美文网首页
iOS M1 Pro 芯片编译IJKPlayer实录

iOS M1 Pro 芯片编译IJKPlayer实录

作者: 翼须付出 | 来源:发表于2023-01-17 01:12 被阅读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。

    相关文章

      网友评论

          本文标题:iOS M1 Pro 芯片编译IJKPlayer实录

          本文链接:https://www.haomeiwen.com/subject/esjthdtx.html