ijkplayer打包framework,支持https和Bitcode

准备工具

  • homebrew 
      ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • git
    brew install git
  • yasm
    brew install yasm

获取源代码

#在桌面建立一个ijkplayer的文件夹 
cd ~/Desktop 
mkdir ijkplayer 
cd ijkplayer 
#clone 
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios 
# 进入源码目录 
cd ijkplayer-ios 
#切换成最新的分支(当前为k0.8.8,许久未更新了) 
git checkout -B latest k0.8.8复制代码

配置编解码器支持

  • module-default.sh
  • module-lite-hevc.sh
  • module-lite.sh

根据本身的须要进行配置,本文选用最多的编解码器支持module-default.shphp

cd config
#移除 module.sh
rm module.sh
#创建软连接,可自行根据须要进行修改
ln -s module-default.sh module.sh

cd ..
cd ios
sh compile-ffmpeg.sh clean复制代码

获取FFmpeg以及初始化

cd ..
#注意点:若是须要支持armv7s架构,则修改init-ios.sh中FF_ALL_ARCHS=$FF_ALL_ARCHS_IOS7_SDK
./init-ios.sh
复制代码


添加https支持

./init-ios-openssl.sh
cd ios
# 在模块文件中添加一行配置 以启用 openssl 组件
echo 'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"' >> ../config/module.sh(也能够自行添加)
./compile-ffmpeg.sh clean复制代码

编译

#编译openssl
./compile-openssl.sh all
#编译ffmpeg
./compile-ffmpeg.sh all复制代码

若是出现以下错误
ios

./libavutil/arm/asm.S:50:9: error: unknown directive
        .arch armv7-a
        ^复制代码

若是你的应用不须要支持armv7架构,则能够在compile-ffmpeg.sh中删除,修改成
git

FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"复制代码


若是须要armv7以及armv7s等架构支持,则须要下载旧版本的Xcode,选择Xcode9.1进行下载,完成后再终端执行sudo xcode-select -s /Applications/Xcode9.1.app/Contents/Developer
github

而后修改compile-ffmpeg.sh脚本 FF_ALL_ARCHS=$FF_ALL_ARCHS_IOS7_SDK
xcode


而后执行./compile-ffmpeg.sh allruby

打包framework

打开IJKMediaPlayer.xcodeproj,若是须要https支持,则将ios/build/universal目录下生成的libcrypto.a以及libssl.a拖入Target "IJKMediaFramework", 而后在Build Settings里添加User-Defined BITCODE_GENERATION_MODE=bitcode,而后进行编译生成framework
bash


备注

以前怕openssl不支持bitcode致使ijkplayer没法支持bitcode,特地找了个支持bitcode的ssl
markdown

查看framework是否支持bitcode的方式
架构

otool -l IJKMediaFramework.framework/IJKMediaFramework
#而后在终端搜索bitcode,若是有结果且size不为0x0000000000000001,则为支持
#若是framework已合并。需使用下面的方法
otool -arch arm64 -l IJKMediaFramework.framework/IJKMediaFramework复制代码


查看支持的架构
app

lipo -info IJKMediaFramework.framework/IJKMediaFramework复制代码

参考资料

ijkplayer 的编译、打包 framework 和 https 支持