iOS 拉流使用 IJKPlayer 的集成
最近侯哥换了工作,下个项目用到直播的功能。虽然侯哥之前的工作是在某直播平台做iOS 端开发,但只做过前端页面相关内容,推流拉流都是引擎组封装好的库文件,直接使用即可。这两天研究了下推拉流,决定拉流使用 IJKPlayer,本文记录一下集成过程以及遇到的问题。
ijkplayer是bilibili的一个开源项目 https://github.com/Bilibili/ijkplayer
首先下载ijkplayer
地址就是:https://github.com/Bilibili/ijkplayer
下载下来之后,解压
编译ijkplayer
在解压后的文件 ijkplayer-master 中的 README 中可以看到,编译需要相关环境。我的电脑上已经安装了 homebrew,git,可以使用一下代码检测:
brew -v
git --version
还需要安装 yasm
brew install yasm
开始编译
-
cd 到 ijkplayer-master 文件夹中,执行 ./init-ios.sh
-
等待执行完毕后,cd 到 ios 目录中,在终端依次执行
./compile-ffmpeg.sh clean
和./compile-ffmpeg.sh all
命令
此时遇到了第一个问题:
xcurun sdk iphonos clang is unable to create an executable file c compiler test failed
解决:因为装过多个xcode 版本,是xcode 的路径问题,修改一下
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer
3. 重新执行./compile-ffmpeg.sh clean
和 ./compile-ffmpeg.sh all
命令
遇到了第二个问题:
error: unknown directive .arch armv7-a
解决:这是因为新版本的 xcode,弱化了对 armv7 的支持导致的,使用文本工具打开 compile-ffmpeg.sh
这里将 armv7 去掉,重新执行./compile-ffmpeg.sh clean
和 ./compile-ffmpeg.sh all
命令。耐心等待后,终于完成。
因为去掉了 armv7,之后集成到项目中也不能对 armv7 进行支持,所以项目中架构也得去掉 armv7。iPhone 5s及以上都是64位的ARM CPU了,影响不大。
打包IJKMediaFramework.framework
- 打开工程 IJKMediaPlayer.xcodeproj
- 首先调整 editScheme 中,Run 改为 release;
- 然后选择项目 IJKMediaFramework,分别编译模拟器和真机;
- 找到路径,终端合成,lipo -create "真机路径" "模拟器路径" -output "合成后的路径"
这里遇到了问题三:
can't map input file: IJKMediaFramework.framework
解决:因为命令需要的参数是 IJKMediaFramework.framework/IJKMediaFramework
5. 最后, 将新生成的 IJKMediaFramework.framework 中的 IJKMediaFramework 拖到 Release-iphoneos/IJKMediaFramework.framework 中,替换原来的。
集成到项目中
Release-iphoneos/IJKMediaFramework.framework 这个就是我们所需要的,集成到工程中,添加依赖库,编译通过。
依赖库如下:
参考文章:
https://www.jianshu.com/p/1f06b27b3ac0
https://www.jianshu.com/p/65fb80dff4d6
https://github.com/bilibili/ijkplayer/issues/4494
https://www.jianshu.com/p/e4e4f7f3767d