美文网首页
ijkPlayer在Xcode10.3编译记录

ijkPlayer在Xcode10.3编译记录

作者: 令狐冲_ | 来源:发表于2019-08-12 14:47 被阅读0次

ijkPlayer按照github上的做法在最新的Xcode上编译打包会出现各种问题,以下是我在编译打包过程遇到的问题记录,应该是全网最新了,希望能够帮助到你,如果有问题,请issue我

一.环境准备

需要安装yasmpkg-config,可用homebrew安装

brew install yasm
brew install pkg-config

代码拉下来后
切换分支到文档制定的k0.8.8

git checkout -B latest k0.8.8

配置编解码器格式支持(可选)

默认为最少支持, 如果足够你使用, 可以跳过这一步. 否则可以改为以下配置:

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

照旧文档指令执行

./init-ios.sh

这一步主要是下载ffmpeg的各种架构仓库

添加https支持

最后会生成支持 https 的静态文件 libcrypto.a 和 libssl.a, 如果不需要可以跳过这一步

# 获取 openssl 并初始化
./init-ios-openssl.sh

cd ios

# 在模块文件中添加一行配置 以启用 openssl 组件
# 这一步我不是很确定,我是直接加在compile-openssl.sh文件的最后一行的
echo 'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"' >> ../config/module.sh

./compile-ffmpeg.sh clean

三.编译ffmpeg

编译就是运行compile-openssl.sh文件和compile-ffmpeg.sh文件
在运行的过程中,报错

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.shcompile-openssl.sh中关于armv7的内容,总共有3处(注:经测试,compile-openssl.sh中的不需要注释,否则会报错)

报错评论给出的解答(暂未测试):还少个步骤,现在上面 avconfig.h 和 config.h 两个文件都处理完后,再编译IJKMediaPlayer会报错,说好多文件不支持armv7,去项目的TARGETS---IJKMediaFrameworkWithSSL---Build Settings--- Valid Architectures,删掉armv7就可以了

#1
#FF_ALL_ARCHS_IOS8_SDK="armv7 arm64 i386 x86_64"
FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
#2
#if [ "$FF_TARGET" = "armv7" -o "$FF_TARGET" = "armv7s" -o "$FF_TARGET" = "arm64" ]; then
if [ "$FF_TARGET"  = "armv7s" -o "$FF_TARGET" = "arm64" ]; then
#3
#    echo "  compile-ffmpeg.sh armv7|arm64|i386|x86_64"
    echo "  compile-ffmpeg.sh arm64|i386|x86_64"

#1
#FF_ALL_ARCHS_IOS8_SDK="armv7 arm64 i386 x86_64"
FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
#2
#if [ "$FF_TARGET" = "armv7" -o "$FF_TARGET" = "armv7s" -o "$FF_TARGET" = "arm64" ]; then
if [ "$FF_TARGET"  = "armv7s" -o "$FF_TARGET" = "arm64" ]; then
#3
#    echo "  compile-openssl.sh armv7|arm64|i386|x86_64"
    echo "  compile-openssl.sh arm64|i386|x86_64"

最后再次执行

./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all //编译

添加openssl相关包以支持https

如果使用 https, 那么需要手动给IJKMediaFramework添加 libcrypto.alibssl.a 文件, 默认不会添加
ps: 这两个依赖库的目录为:ijkplayer-ios/ios/build/universal/lib, 只有进行了上面跟 openssl 相关的操作, 才会在这个目录下有生成libcrypto.alibssl.a

碰到问题:

/build/universal/include/libavutil/avconfig.h:34:21: 'armv7/avconfig.h' file not found

解决方案:

直接点击跳不过去,然后可以右键reveal in Log,在报错处找文件目录,
找到avconfig.hconfig.h注释对应的include "armv7/config.h"
参考阅读:https://www.jianshu.com/p/2669370bee23

四、打包 framwork

首先将debug改为release
再分别选择真机和模拟器进行编译command+b
点击products文件夹,打开后选择IJKMediaFramework.framework反键打开show in Finder,在上一级的Products文件夹内,有两个文件Release-iphoneosRelease-iphonesimulator,我们要合并的就是这个两个framework,首先我们cd到products文件夹中,然后执行

lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework

可以看到在products文件夹中生成了一个framework文件
用它替换掉Release-iphoneos中的
IJKMediaFramework.

五.集成 framework 到项目中

  • 导入framework
    直接将 IJKMediaFramework.framework 拖入到工程中即可

注意记得勾选 Copy items if needed 和 对应的 target

  • 添加下列依赖到工程
  1. libc++.tbd ( 编译器选 gcc 的请导入 libstdc++.tbd )
  2. libz.tbd
  3. libbz2.tbd
  4. AudioToolbox.framework
  5. UIKit.framework
  6. CoreGraphics.framework
  7. AVFoundation.framework
  8. CoreMedia.framework
  9. CoreVideo.framework
  10. MediaPlayer.framework
  11. MobileCoreServices.framework
  12. OpenGLES.framework
  13. QuartzCore.framework
  14. VideoToolbox.framework

至此,就全部完成了

相关文章

网友评论

      本文标题:ijkPlayer在Xcode10.3编译记录

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