ijkplayer是B站开源的点播+直播框架,底层基于FFmpeg封装,同时支持Android和iOS平台。
由于ijkplayerSDK在下载的文件中没有直接提供,需要我们通过编译脚本手动完成编译,在自行合成framework文件
下载ijkplayer
ijkplayer下载地址:https://github.com/bilibili/ijkplayer
解压后文件内部目录如下图:
编译ijkplayer
1、cd到 ijkplayer-master 文件夹里,执行命令 ./init-ios.sh (下载fmpeg 要保证网络连接通畅,失败了多尝试几次)成功后 ios 文件夹里会出现 不同架构的ffmpeg,如下图
2、执行命令 ./init-ios-openssl.sh 成功后 iOS 文件夹里会出现 不同架构的openssl
3、执行命令 ./init-config.sh
4、执行命令 cd ios (进入ios文件夹)
5、执行命令 ./compile-ffmpeg.sh clean (清理文件)
6、执行命令 ./compile-openssl.sh clean (清理文件)
7、执行命令 ./compile-openssl.sh all (编译 openssl )
8、执行命令 ./compile-ffmpeg.sh all (编译 ffmpeg )
打包IJKMediaFramework.framework框架
打开IJKMediaPlayer工程
选择 IJKMediaFramework
设置工程的 scheme,然后, 分别选择真机和模拟器进行编译
注意,如果项目中没有products,执行以下方法
在IJKMediaPlayer目录下
先是右键IJKMediaPlayer.xcodeproj选择显示内容
将project.pbxproj放到编辑器里面。查找mainGroup
将mainGroup的值 复制粘贴 给productRefGroup
保存project.pbxproj,重新打开。
合并真机和模拟器版本的 framework
注意不要合并错了, 合并的是这个文件, 如下图:
打开终端, 进行合并, 命令行具体格式为:
#lipo -create "真机版本路径" "模拟器版本路径" -output "合并后的文件路径"
lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
下面很重要, 需要用合并后的IJKMediaFramework把原来的IJKMediaFramework替换掉, 如下图, 希望你能看懂:
上图中的1、2两步完成后, 绿色框住的那个IJKMediaFramework.framework文件就是我们需要的框架了, 可以复制出来, 稍后我们需要导入工程使用.
iOS工程中集成ijkplayer
新建工程, 导入合并后的IJKMediaFramework.framework以及相关依赖框架以及相关依赖框架
添加系统库
AudioToolbox
AVFoundation
CoreMedia
CoreVideo
libbz2
libz
MediaPlayer
MobileCoreServices
OpenGLES
VideoToolbox
导入头文件 编译成功
问题一:真机模拟器库无法合并,报错:have the same architectures (arm64) and can't be in the same fat output file
lipo -create Release-iphoneos/xxxSDK.framework/xxxSDK Release-iphonesimulator/xxxSDK.framework/xxxSDK -output xxxSDK fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: Release-iphoneos/xxxSDK.framework/xxxSDK and Release-iphonesimulator/xxxSDK.framework/xxxSDK have the same architectures (arm64) and can't be in the same fat output file
XCode12之前:
编译模拟器静态库支持i386 x86_64两架构
编译真机静态库支持armv7 arm64两架构
使用lipo -create -output命令可以将两个库合并成一个支持模拟器和真机i386 x86_64 armv7 arm64四种架构的胖子库。
XCode12编译的模拟器静态库也支持了arm64,导致出现真机库和模拟器库不能合并的问题。
have the same architectures (arm64) and can't be in the same fat output file
设置Build Setting --> Excluded Architectures --> Debug --> 添加上 arm64
设置Build Setting --> Excluded Architectures --> Release --> 添加上 arm64
出现的原因是XCode12 编译的模拟器库新增支持架构arm64。