最近接到了视频直播方面的开发任务。第一次接触到视频领域并且周边也没有熟悉这块领域的大牛,只好先找些开源的方案来使用。
比较了两个网上讨论比较多并且支持Android/iOS的项目
- Vitamio
- IJKPlayer
首先说下Vitamio目前可以拿到的版本是4.20,商业使用需要付费。
目前手头上的iPhone6s iOS为9.0.2,在播放RTMP直播的情况下反复切到后台或者直接锁屏有很大的几率崩溃。另外Vitamio错误提示不完善,我们QA最喜欢用飞行模式测试大法:你断网了要暂停,网络恢复了要继续播放啊(策划需求)。但是在断网等情况下根本就没回调,即便用了AFNetWorking的网络监测暂停恢复Vitamio也有几率崩溃,根本没法过QA……
IJKPlayer是国内B站的bbcallen大大写的开源视频播放项目。除了B站,美拍和斗鱼的App都有在使用的样子,应该说经得起行业领域的考验了,对我采用IJKPlayer多了一份信心。
后面事实证明,IJKPlayer确实很省心。
将IJKPlayer集成到项目中其实还会遇到不少问题,我将遇到的问题记录下来,希望能帮助到各位,少走些弯路。
我的构建环境
- OS:Mac OSX 10.11.2
- iOS:Xcode 7.2
- HomeBrew
- Git
安装构建必要的环境
如果因为墙的关系或者速度太慢可以使用proxychains,网上教程很多,就不涉及了。
# install homebrew, git, yasm
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm
构建
下载ffmpeg和编译ffmpeg会花费比较长的时间,可以去泡一杯咖啡:)
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.4.4.1
./init-ios.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
运行
用Xcode打开ios/IJKMediaDemo/IJKMediaDemo.xcodeproj,验证是否构建正确并可以学习如何使用IJKPlayer。
IJKDemoSampleViewController.m //刚开始上手可以先从sampleList加些播放源来试试手
IJKMoviePlayerViewController.m //这里学习IJKplayer的使用方法
集成
这是比较重要的一步,估计也是最容易卡住的一步。
# import ios/IJKMediaPlayer for MediaPlayer.framework-like interface (recommended)
# open ios/IJKMediaDemo/IJKMediaDemo.xcodeproj with Xcode
因为本人没Get到上面的点,只好在issue搜索,发现一条关于制作.a文件的提示结果就纠结在制作.a文件上卡了1天(大坑),这个离正确答案很近但它不是正确答案。
集成步骤
1.将ijkplayer整个目录复制到项目中,需要保持ijkplayer内的目录结构,可以删除Android和一些无关的文件,ijkplayer中的目录结构如下:


2.将IJKMediaPlayer.xcodeproj拽入项目中,并添加如下类库:

3.移植DEMO项目的代码示例,写死一个播放源,并运行。

完美!
Updated on 2016-05-13
为苦于各种奇怪原因而无法玩耍的小伙伴们提供了包装了ijkplayer的pod,仅供测试体验。
1.基于ijkplayer 5737ccc提交制作成的framework,需要注意的是需要iOS8+。
2.如果使用ijkplayer过程中遇到BUG什么的,可以移步去ijkplayer作者的GitHub上提issue或者PR。
哦对了,地址在这里https://coding.net/u/shirokuma/p/IJKMediaLibrary/git,因framework超过100MB无法传到GitHub上,就放到Coding上了。祝各位玩的愉快!
网友评论
建议看看 https://github.com/daniulive/SmarterStreaming
cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean
然后我的ios文件夹下的build中ffmpeg文件就全部没了。不止楼主怎么处理的?
framework打包可以参考这篇文章来:http://www.jianshu.com/p/709828379028
如果还有疑惑也可以使用搜索引擎关键字:“ios framework 制作”
发布前可以再compile-ffmpeg.sh armv7|arm64编译arm库可以缩小不少体积,https://github.com/Bilibili/ijkplayer/blob/master/ios/compile-ffmpeg.sh,看Usage
如果还不能解决您的问题,可以到官方github提个issue问问,也许就有大神能帮您。
学习的过程比直接知道结果更有意义不是么:)
2.是的,只需要加载对应的依赖即可
3.你可以完全不用工程里的UI,那个是xib画的。你看看b站,斗鱼什么的也都是用自己画的UI。
但是可以自己做一个对应的framework和一个标准cocoapods通过vendored_framework来引入。相对比较麻烦,如果没有特殊需求还是建议你打包成framework直接引入项目比较快些。
# import ios/IJKMediaPlayer for MediaPlayer.framework-like interface (recommended)
# open ios/IJKMediaDemo/IJKMediaDemo.xcodeproj with Xcode
这两段是什么意思? 不太懂命令行 ,可以帮忙解读一下吗? 也是需要在终端跑吗? 谢谢
1.跟着我这文章走到运行那步骤,也就是IJKMediaDemo可以成功编译和运行
2.先把玩下demo,然后往IJKDemoSampleViewController的sampleList中加入你的rtmp直播地址,然后进入IJKMoviePlayerViewController学习,关键的API都在这里了。
祝你成功~