iOS -- 视频直播框架ijkplayer的集成

  最近直播火的一塌糊涂,人人都想搞直播,各路明星也开直播,也诞生了很多网红。刷着跑车,谢谢点亮,各取所需!各个公司也想分到一杯羹,纷纷搭起了直播平台,目前较出名的有:

映客 、斗鱼、熊猫、花椒 等等

  效果图如下:

喵播直播页面

  直播原理:

把主播录制的视频,推送到服务器,在由服务器分发给观众观看。

  直播环节:

推流端(采集、美颜处理、编码、推流)、服务端处理(转码、录制、截图、鉴黄)、播放器(拉流、解码、渲染)、互动系统(聊天室、礼物系统、赞)

  实现流程:

采集、滤镜处理、编码、推流、CDN分发、拉流、解码、播放、聊天互动

  如果想要自己从零开始搭建,除非是大牛,而且是一群大牛,因为直播需要运用的技术非常多,例如视频/音频处理、图形处理、视频/音频压缩、CDN分发、即时通讯,都需要你学习很久!所以现在对于对于一个初创团队来讲,自研直播不管在技术门槛、CDN、带宽上都是有很大的门槛的,而且需要耗费大量的时间才能做出成品,不利于拉投资。一般会采取使用第三方SDK。但对于公司直播平台大,从长远看,自研可以节省成本,技术成面比直接用SDK可控。

  那有哪些第三方SDK能够快速的开发一个完整的直播APP呢?

  即构科技

自研语音视频引擎,在语音前处理、网络自适应和跨平台兼容性等方面,达到国际顶尖水平。致力于提供全球最清晰稳定的实时语音视频云服务,帮助企业快速获得实时通讯能力。花椒、一直播、繁星、么么、美播都是用此SDK;

  腾讯云

直播(Live Video Broadcasting)依托腾讯强大的技术平台,为您提供专业稳定快速的直播接入和分发服务,全面满足超低延迟和超大并发访问量的苛刻要求

  网易视频云

基于专业的跨平台视频编解码技术和大规模视频内容分发网络,提供稳定流畅、低延时、高并发的实时音视频服务,可将视频直播无缝对接到自身App

  七牛云

专为直播平台打造的全球化直播流服务和一站式实现SDK端到端直播场景的企业级直播云服务平台;熊猫TV、龙珠TV等直播平台都是用的七牛云.

  还有阿里云等等,就不一一列举了;这些第三方提供完整的方案,较简便,当然需要花钱!公司有钱,也急需完整开发的可以选择使用。下面介绍一种免费拉流开源SDKijkplayer的集成,顾名思义,拉流就是播放,ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS。

  一、首先下载ijkplayer,下载地址https://github.com/Bilibili/ijkplayer,star很高哦~
gitHub下载页面
  二、看下README.md文档,这里会教我们怎么操作。操作步骤及添加的库都在里面。下面就详细介绍下流程。
README.md
  三、其实下载完成之后下一步操作就是编译ijkplayer,也就是编译 ffmpeg:

  1、打开终端,先执行cd jkplayer-master路径,进入到该文件夹下,路径拖入终端就行,如下图:

jkplayer-master文件夹

终端进入jkplayer-master文件夹

  2、在终端执行命令./init-ios.sh,有点慢,视网速决定,我大概花了一个半小时,耐心等待,此操作目的是下载ffmpeg。当100%时说明下载完毕!

下载 ffmpeg

  3、下载完成后,进入jkplayer-master中的ios文件夹,在终端输入cd ios

进入iOS文件夹

  4、执行./compile-ffmpeg.sh clean命令

执行./compile-ffmpeg.sh clean命令

  5、执行./compile-ffmpeg.sh all命令, 编译 ffmpeg。此次编译时间也较久,大概十几分钟,到此也编译完成了;

执行./compile-ffmpeg.sh all命令
  四、打包静态库IJKMediaFramework.framework合并

  1、打开文件夹IJKMediaPlayer下的工程IJKMediaPlayer.xcodeproj

打开工程IJKMediaPlayer.xcodeproj

  2、打开工程后先选择IJKMediaFramework,然后点击Edit Scheme

32122.png

  3、选择Release后点击close

选择Release后点击close

  4、然后分别选择真机和模拟器进行编译,执行command B,这时在目录Products文件下多了个IJKMediaFramework.framework静态库,然后右击Show in Finder 进入文件夹


12232.png

  5、上步编译一定要选择真机和模拟器分别编译一遍,才会得到下面的两个版本的framework

真机和模拟器

  6、接下来就是合并真机和模拟器的framework了,注意是IJKMediaFramework.framework里面的IJKMediaFramework文件


合并的文件

  合并的命令是:

lipo -create 真机版本路径 模拟器版本路径 -output 合并后的文件路径/名称

  1.合并操作很容易出现问题,当提示这个错误时:

error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't move temporary file: /Users/xiong/Desktop/demo to file: /Users/xiong/Desktop/demo.lipo (Is a directory)

  解决方法:
  此错误一般是在合并后的路径没有加上合并后生成的文件名字,加上就行。

  2.当出现这种错误时:

xcrun: error: active developer path ("/Applications/Xcode 7.1.app/Contents/Developer") does not exist, use xcode-select --switch path/to/Xcode.app to specify the Xcode that you wish to use for command line developer tools (or see man code-select)

  解决方法:
此错误是多个Xcode,删掉一个后出现,终端执行sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer命令,然后再输入一次系统的密码就可以。

  下面是我合并时输入的命令,可以参考下:

合并命令

  7、合并后,这边就生成了一个合并的文件:

合并生成的文件

  8、然后把合并的文件替换真机里面的IJKMediaFramework文件

替换文件

  9、然后IJKMediaFramework.framework就是我们需要的框架了


最终的framework
  五、导入静态库到我们的工程
导入库

  导入库之后,我们先包含头文件#import <IJKMediaFramework/IJKMediaFramework.h>编译没问题就说明集成成功了,如果有碰到这个问题 :

报错

  请再引入libc++.tbd解决

  六、到此ijkplayer已集成完成,接下来就是播放了

  1、先定义两个View

@property (atomic, retain) id <IJKMediaPlayback> player;
@property (nonatomic, strong) UIView *playerView;

  2、创建播放器

//背景View
self.playerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
self.playerView.backgroundColor = [UIColor lightGrayColor];
[self.view addSubview:self.playerView];

//提示文字
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, SCREEN_HEIGHT/2-30, SCREEN_WIDTH-20, 30)];
titleLabel.text = @"正在加载视频,请稍后...";
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.textColor = [UIColor whiteColor];
titleLabel.font = [UIFont systemFontOfSize:18];
[self.playerView addSubview:titleLabel];

//创建播放器
NSString *url =  @"http://live.hkstv.hk.lxdns.com/live/hks/playlist.m3u8";//播放地址
self.player = nil;
self.player = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString: url] withOptions:nil];
self.player.shouldAutoplay = YES;//自动播放
[self.player setScalingMode:IJKMPMovieScalingModeAspectFill];
[self.playerView addSubview:_player.view];
[self.player prepareToPlay];
    
if (![self.player isPlaying]) {
    [self.player play];
}


  3、界面消失,一定要记得停止播放

[self.player pause];
[self.player stop];
[self.player shutdown];

  中间遇到过坑,不过也总算成功了,遇到问题多试几次,做出来还是挺好玩的,也吸取了一些大神的经验。

声明: 转载请注明出处http://www.jianshu.com/p/6fbf05a6a257

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,800评论 25 707
  • 连续第二年到上海参加光博会,感觉还是有很多的变化,首先是现场登记领胸卡,以前是手写资料,人工录入信息,如今微信扫一...
    灰灰2017阅读 248评论 0 1
  • ·互联网出现之前,打造个人品牌并没有实际意义。毕竟,你的整个职业生涯都要在一家公司,或者最多两至三家公司里,一步步...
    酸书生子云阅读 199评论 0 0
  • 字:非~读书要用心,读好书要非常用心! 文:但凡一个能够读好书的人,一般很用心有的非常用心,比如说: 想学...
    老区游子阅读 331评论 0 3