iOS M1 Pro 芯片编译IJKPlayer实录

2023-01-17  本文已影响0人  翼须付出

ijkplayer是B站开源的点播+直播框架,底层基于FFmpeg封装,同时支持Android和iOS平台。

由于ijkplayerSDK在下载的文件中没有直接提供,需要我们通过编译脚本手动完成编译,在自行合成framework文件

下载ijkplayer

ijkplayer下载地址:https://github.com/bilibili/ijkplayer
解压后文件内部目录如下图:

ijkplayer-master内部目录

编译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。

上一篇下一篇

猜你喜欢

热点阅读