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 文件,添加进去
如图:
7. 打包 framework
1)选择 Xcode
上方导航栏中的 Product ——> Scheme ——> Edit Scheme...
, 打开后选择 Run ——> Info ——> Build Configuration
,将 Debug
改为 Release
。
如图:
2)Cmd + b
直接运行,会报错 avconfig.h
文件找不到,这时候去一下路径找到 avconfig.h
文件,如:
~/Desktop/ijkplayer-ios/ios/build/universal/include/libavutil
打开 avconfig.h
,注释掉
include "armv7/avconfig.h"
如图:
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)
,这里右键点击 Xcode
— Products
下的 IJKMediaFrameworkWithSSL.framework
,show 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
即可.