iOS直播之ijkplayer的集成

环境准备:

集成ijkplayer需要电脑中安装gityasmhomebrew

检查自己电脑是不是安装了gityasmhomebrew可以打开终端依次输入:

  brew -v
  git --version
  yasm --version
屏幕快照 2019-02-27 下午1.43.37.png
安装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这个文件夹

屏幕快照 2019-02-27 下午1.56.34.png

添加 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如下图

屏幕快照 2019-02-27 下午2.14.44.png

armv7去掉,否则就会出现在报错,显示有个文件中不包含armv7

四、打开ios/IJKMediaPlayer并运行

添加 openssl相关包以支持https
如果不使用https, 可以跳过此步, 直接开始打包 framwork

如果使用 https, 那么需要手动给IJKMediaFramework添加libcrypto.alibssl.a 文件, 默认不会添加

ps: 这两个依赖库的目录为:ijkplayer-ios/ios/build/universal/lib, 只有进行了上面跟 openssl相关的操作, 才会在这个目录下有生成libcrypto.alibssl.a



然后以此打开build->universal->lib选择libcrypto.alibssl.a

五、打包 framwork

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

首先将debug改为release


屏幕快照 2019-02-27 下午2.23.32.png

选中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以及其他依赖库

屏幕快照 2019-02-27 下午2.28.23.png

你可能感兴趣的:(iOS直播之ijkplayer的集成)