环境准备:
集成ijkplayer需要电脑中安装git
和yasm
和homebrew
检查自己电脑是不是安装了git
、yasm
、homebrew
可以打开终端依次输入:
brew -v
git --version
yasm --version
安装homebrew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果想卸载homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
使用homebrew
安装git
brew install git
使用homebrew
安装yasm
一、使用git克隆仓库到本地
ijkplayer是bilibili的一个开源项目https://github.com/Bilibili/ijkplayer
在合适的位置新建文件夹(不想新建也可以的),我是在桌面上新建文件夹命名为ijkplayer
,然后进入对应文件夹
cd /Users/caoxiang/Desktop/ijkplayer //这是我的路径啊看准喽
//克隆仓库到指定位置并重命名为ijkplayer-ios
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
然后进入文件夹ijkplayer-ios
cd ijkplayer-ios
新建分支latest并切换到新建的分支上
git checkout -B latest k0.8.8
我们平时开发最好不要在master分支上直接开发,所以这里我按照教程新建了分支latest。但是我们不需要提交代码,所以这里不新建分支也是可以的,新建与否都对后续各步骤没有影响。
配置编解码器格式支持
默认为最少支持, 如果足够你使用, 可以跳过这一步. 否则可以改为以下配置:
module-default.sh 更多的编解码器/格式
module-lite-hevc.sh 较少的编解码器/格式(包括hevc)
module-lite.sh 较少的编解码器/格式(默认情况)
# 进入 config 目录
cd config
# 删除当前的 module.sh 文件
rm module.sh
# 可根据需要替换为`module-default.sh`, `module-lite-hevc.sh`, `module-lite.sh`
# 创建软链接 module.sh 指向 module-lite-hevc.sh
ln -s module-lite-hevc.sh module.sh
cd ..
cd ios
sh compile-ffmpeg.sh clean
二、下载ffmpeg
//下面针对的文件夹的操作都是ijplayer-ios
这个文件夹
添加 https 支持
最后会生成支持 https 的静态文件 libcrypto.a 和 libssl.a, 如果不需要可以跳过这一步
# 获取 openssl 并初始化
./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
三、 编译ffmpeg
# 如果下一步提示错误`xcrun: error: SDK "iphoneos" cannot be located`, 请执行`sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/`, 再重新执行下一步
# 编译openssl, 如果不需要https可以跳过这一步
./compile-openssl.sh all
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all //编译
这里有可能遇到错误
xcrun -sdk iphoneos clang is unable to create an executable file.
C compiler test failed.
造成这个问题的原因有很多,这里我是因为xcode路径问题引起的,解决方法:
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer
这里还遇到了另一个问题
AS libavcodec/arm/aacpsdsp_neon.o
./libavutil/arm/asm.S:50:9: error: unknown directive
.arch armv7-a
^
make: *** [libavcodec/arm/aacpsdsp_neon.o] Error 1
make: *** Waiting for unfinished jobs....
最新的 Xcode 已经弱化了对 32 位的支持, 解决方法:
在 compile-ffmpeg.sh 中删除 armv7 , 修改如:
FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
再重新执行出现错误的命令: ./compile-ffmpeg.sh all



然后再次执行
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all //编译
这个时候本人执行的时候总是执行失败
让后反复执行
./compile-ffmpeg.sh clean
./compile-openssl.sh all
./compile-ffmpeg.sh all //编译

重点:因为去除了armv7,那么后面对xcode编译的时候(command+B),必须在xcode如下图
将armv7
去掉,否则就会出现在报错,显示有个文件中不包含armv7
四、打开ios/IJKMediaPlayer并运行
添加
openssl
相关包以支持https
如果不使用https
, 可以跳过此步, 直接开始打包framwork
如果使用
https
, 那么需要手动给IJKMediaFramework
添加libcrypto.a
和libssl.a
文件, 默认不会添加
ps: 这两个依赖库的目录为
:ijkplayer-ios/ios/build/universal/lib
, 只有进行了上面跟openssl
相关的操作, 才会在这个目录下有生成libcrypto.a
和libssl.a
![]()
![]()
然后以此打开build
->universal
->lib
选择libcrypto.a
和libssl.a
![]()

五、打包 framwork

大家会发现除了 IJKMediaFramework这个target, 还有一个叫 IJKMediaFrameworkWithSSL, 但是不推荐使用这个, 因为大部分基于 ijkplayer 的第三方框架都是使用的前者, 你把后者导入项目还是会报找不到包的错误, 就算你要支持 https 也推荐使用前者, 然后按照上一步添加 openssl即可支持
首先将debug
改为release

选中
IJKMediaFramework.framework
右键show in finder
可以看到

合并真机和模拟器的
framework
,我们要合并的其实是这个文件

首先我们cd到
products
文件夹中

然后执行:
lipo -create 真机framework路径 模拟器framework路径 -output 合并的文件路径
lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework
可以看到在products
文件夹中生成了一个framework
文件

替换掉
Release-iphoneos
中的IJKMediaFramework
,如图

六、集成framwork并测试
新建工程并导入IJKMediaFramework.framework
以及其他依赖库