自编 IJKlMediaFramework 使用

1. 准备工作

安装homebrew、git等,google 一下一堆傻瓜式流程指导,自行搜索.

2. 获取 ijkplayer 源码

cd 到自己想要保存的文件中,执行一下命令

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.8

3. 获取 ffmpeg 并初始化

执行脚本获取 ffmpeg ,输入一下命令

cd ..
./init-ios.sh

4. 添加 https 支持

# 获取 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

5. 编译 ffmpeg

如下:

# 如果下一步提示错误`xcrun: error: SDK "iphoneos" cannot be located`, 请执行`sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer/`, 再重新执行下一步

# 编译openssl, 如果不需要https可以跳过这一步
./compile-openssl.sh all

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

执行最后一步,如果出现错误如下:

./libavutil/arm/asm.S:50:9: error: unknown directive
        .arch armv7-a
        ^
make: *** [libavcodec/arm/aacpsdsp_neon.o] Error 1

是因为最新的 Xcode 已经弱化了对 32 位的支持, 解决方法:

在 compile-ffmpeg.sh 中删除 armv7 ,也就是修改 FF_ALL_ARCHS_IOS8_SDK="armv7 arm64 i386 x86_64" 为 FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64

然后重新执行 ./compile-ffmpeg.sh all

6. 打开IJKMediaPlayer项目

添加 openssl 相关依赖:

选择 Targets ——> IJKMediaFrameworkWithSSL ——> General ——> Linked Frameworks and Libraries ,选择 Add Other... , 然后在 ijkplayer-ios 目录下(也可能是别的名字)的 ios —— build —— universal —— lib 中,选中 libcrypto.a 和 libssl.a 文件,添加进去

如图:


屏幕快照 2019-03-20 下午3.29.51.png
屏幕快照 2019-03-20 下午3.35.46.png

7. 打包 framework

1)选择 Xcode 上方导航栏中的 Product ——> Scheme ——> Edit Scheme..., 打开后选择 Run ——> Info ——> Build Configuration,将 Debug 改为 Release
如图:

屏幕快照 2019-03-20 下午4.24.32.png

2)Cmd + b 直接运行,会报错 avconfig.h 文件找不到,这时候去一下路径找到 avconfig.h 文件,如:

~/Desktop/ijkplayer-ios/ios/build/universal/include/libavutil

打开 avconfig.h ,注释掉

include "armv7/avconfig.h"

如图:


屏幕快照 2019-03-20 下午3.53.15.png

3)Cmd + b 再运行,又报错 config.h 文件找不到,去

~/Desktop/ijkplayer-ios/ios/build/universal/include/libffmpeg

中打开 config.h , 同上注释掉

include "armv7/avconfig.h"

4)Cmd + b 再运行,还报错... ld: symbol(s) not found for architecture armv7, 也就是 armv7 不支持,去

TARGETS ——> IJKMediaFrameworkWithSSL ——> Build Settings ——> Valid Architecutres 

中,删掉其中的 armv7、armv7s

5)Cmd + b 再运行,Success !!! 选择真机(Generic iOS Device),再运行,Success !!! 这时候,项目的 Products 文件目录下就生成了 模拟器的framework (Release-iphonesimulator)真机的framework(Release-iphoneos),这里右键点击 XcodeProducts 下的 IJKMediaFrameworkWithSSL.frameworkshow in finder 就能直接到。

8. 合成 framework

用终端到当前生成的 framework 目录下,执行以下命令

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

将生成的 IJKMediaFrameworkWithSSL 替换掉 Release-iphoneos/IJKMediaFrameworkWithSSL.framework 文件下的 IJKMediaFrameworkWithSSL,就 OK 啦。

9. 将生成的 framework 导入到所需工程中

1)直接将 IJKMediaFramework.framework 拖入到工程中即可,注意记得勾选 Copy items if needed 和 对应的 target

2)然后添加相关依赖

libc++.tbd ( 编译器选 gcc 的请导入 libstdc++.tbd )
libz.tbd
libbz2.tbd
AudioToolbox.framework
UIKit.framework
CoreGraphics.framework
AVFoundation.framework
CoreMedia.framework
CoreVideo.framework
MediaPlayer.framework
MobileCoreServices.framework
OpenGLES.framework
QuartzCore.framework
VideoToolbox.framework

3)在相应文件中导入 #import <IJKMediaFrameworkWithSSL/IJKMediaPlayer.h>
即可使用 IJKMediaPlayer

4)如果运行程序报 image not found 错误 ,需在工程对应 TARGETS —— General —— Embedded Binaries 中添加 IJKMediaFrameworkWithSSL.framework 即可.

参考文献:
https://www.jianshu.com/p/9743a68c2939

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容