iOS编译IJKPlayer详细步骤

965 阅读3分钟
音视频肯定离不开FFmpeg,直接上手FFmpeg有难度,那就从IJKPlayer开始吧~

快速集成IJKPlayer步骤:

1、下载源码

最低支持版本号、要求的Xcode版本自自己去github看吧ijkplayer。 cd到你自己指定目录,直接git clone源码,稍等片刻即可。

截屏2022-06-21 15.11.24.png

2、编译FFmpeg - 核心

进到Demo项目: 截屏2022-06-21 15.13.47.png 编译报错,'libavutil/imgutils.h' file not found头文件找不到: 截屏2022-06-21 15.15.56.png 原因就是FFmpeg没有导入。 根据IJKPlayer ReadMe文档README,进行编译。 cd到ijkplayer-ios目录下,(你可以创建一个自己的分支,好习惯哈),执行./init-ios.sh脚本,下载FFmpeg。可能需要一盏茶时间,进到ijkplayer-ios/iOS目录下如果你看到下面的显示,就是下载好了。

image.png

此时我们再去编译IJKMediaDemo,还是报错'libavutil/imgutils.h' file not found头文件找不到。这是因为我们只下载了FFmpeg源码,还没进行编译,我们要将其编译成.a文件。这时我们也可以进到IJKMediaPlayer工程来验证我们的判断,查看源文件可以看到,.a文件都是红色的。

截屏2022-06-21 15.46.33.png image.png

然后我们cd到iOS目录下,编译FFmpeg。

cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

先clean,为编译FFmpeg做准备 截屏2022-06-21 15.49.30.png 执行./compile-ffmpeg.sh all编译各个平台的FFmpeg库。在一盏茶后你看到如下提示,就证明编译成功了。 截屏2022-06-21 15.25.42.png 去到编译完成的目录下,也可以查看库文件: image.png 这是我们可以再去IJKMediaPlayer工程查看,FFmpeg的.a文件都有了。

image.png 此时在运行,IJKMediaDemo工程,应该就能运行成功了。

接下来打包IJKMediaFramWork

打开IJKMediaPalyer工程,千要不要开错了哦,别开成IJKMediaDemo工程哈。

image.png 选中IJKMediaFramework,分别在真机和模拟器下进行build,按你需要,DebugRelease模式下都Build一次。

image.png 然后找到编译完成的文件夹: 截屏2022-06-21 16.37.15.png

你的Xcode 工程可能没有这个Products文件夹。小小设置一下直接就出来了。 找到IJKMediaPlayer.xcodeproj显示包内容,然后打开工程文件,

image.png 搜索mainGroup关键字,将mainGroup的值复制给productRefGroup,虽然值看着一样,一样也要复制,不要问为什么!!!

image.png 这样我们就能进到编译完成的文件下了,文件下面面显示真机和模拟器两个编译产物。

image.png

然后合并真机和模拟器版本。执行以下命令

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

这是我的命令 lipo -create "/Users/fanqinglong/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-epbzsdheaiuwzuasivazbncxfrdp/Build/Products/Debug-iphoneos/IJKMediaFramework.framework/IJKMediaFramework" "/Users/fanqinglong/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-epbzsdheaiuwzuasivazbncxfrdp/Build/Products/Debug-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework" -output "/Users/fanqinglong/Library/Developer/Xcode/DerivedData/IJKMediaPlayer-epbzsdheaiuwzuasivazbncxfrdp/Build/Products/IJKMediaFramework" 执行完就多了一个IJKMediaFramwork。然后用新生成的这个替换之前真机、模拟器下面的framework文件.别搞错了哈。。

image.png

至此就可以将打包好的 IJKMediaFramework.framework 集成到项目中了。 新建一个TestIJKPlayer工程,按照ReadMe集成文档,把需要的库都加到工程中。

image.png

有些库会自动导入,测试只需添加这些即可: 截屏2022-06-21 16.28.53.png 注意: 按照文档只需要添加10个依赖库,但是我添加完编译报错,还要多加一个libc++.tbd才行!!!

然后来测试是否集成成功,导入IJKMediaFramework.h头文件,编译一下,如果没有报错,就说明集成成功了。 接下来只要有拉流地址,就能完成一个简单的直播视频了。

PS:目前测试可测试用的直播拉流地址:

       // 美国1
       let url = URL(string: "rtmp://http://media3.scctv.net/live/scctv_800")
      // 中东
      let url = URL(string: "rtmp://http://ns8.indexforce.com/home/mystream")
      // 韩国朝鲜日报
      let url = URL(string: "rtmp://http://mobliestream.c3tv.com:554/live/goodtv.sdp")