音视频肯定离不开FFmpeg,直接上手FFmpeg有难度,那就从IJKPlayer开始吧~
快速集成IJKPlayer步骤:
1、下载源码
最低支持版本号、要求的Xcode版本自自己去github看吧ijkplayer。 cd到你自己指定目录,直接git clone源码,稍等片刻即可。
2、编译FFmpeg - 核心
进到Demo项目:
编译报错,'libavutil/imgutils.h' file not found
头文件找不到:
原因就是FFmpeg没有导入。 根据IJKPlayer ReadMe文档README,进行编译。
cd到ijkplayer-ios
目录下,(你可以创建一个自己的分支,好习惯哈),执行./init-ios.sh
脚本,下载FFmpeg。可能需要一盏茶时间,进到ijkplayer-ios/iOS
目录下如果你看到下面的显示,就是下载好了。
此时我们再去编译IJKMediaDemo,还是报错'libavutil/imgutils.h' file not found
头文件找不到。这是因为我们只下载了FFmpeg源码,还没进行编译,我们要将其编译成.a
文件。这时我们也可以进到IJKMediaPlayer
工程来验证我们的判断,查看源文件可以看到,.a
文件都是红色的。
然后我们cd到iOS目录下,编译FFmpeg。
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
先clean,为编译FFmpeg做准备
执行./compile-ffmpeg.sh all
编译各个平台的FFmpeg库。在一盏茶后你看到如下提示,就证明编译成功了。
去到编译完成的目录下,也可以查看库文件:
这是我们可以再去IJKMediaPlayer
工程查看,FFmpeg的.a
文件都有了。
此时在运行,IJKMediaDemo
工程,应该就能运行成功了。
接下来打包IJKMediaFramWork
打开IJKMediaPalyer
工程,千要不要开错了哦,别开成IJKMediaDemo
工程哈。
选中IJKMediaFramework
,分别在真机和模拟器下进行build,按你需要,Debug
和Release
模式下都Build一次。
然后找到编译完成的文件夹:
你的Xcode 工程可能没有这个Products
文件夹。小小设置一下直接就出来了。
找到IJKMediaPlayer.xcodeproj
显示包内容,然后打开工程文件,
搜索mainGroup
关键字,将mainGroup
的值复制给productRefGroup
,虽然值看着一样,一样也要复制,不要问为什么!!!
这样我们就能进到编译完成的文件下了,文件下面面显示真机和模拟器两个编译产物。
然后合并真机和模拟器版本。执行以下命令
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
文件.别搞错了哈。。
至此就可以将打包好的 IJKMediaFramework.framework
集成到项目中了。
新建一个TestIJKPlayer
工程,按照ReadMe
集成文档,把需要的库都加到工程中。
有些库会自动导入,测试只需添加这些即可:
注意: 按照文档只需要添加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")