ijkPlayer在Xcode10.3编译记录

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

至此,就全部完成了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351