IJKPlayer的集成

1.IJKPlayer的概述

ijkplayer 是一款基于ffmpeg的视频播放器框架, 支持 Android 和 iOS。

源码地址:github.com/Bilibili/ij…

下文将简要介绍iOS侧的IJKPlayer及其集成。

2.IJKPlayer的clone及获取ffmpeg

git上的官方步骤:

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.8
./init-ios.sh(科学上网)
复制代码

3.配置编解码器多格式支持

默认编解码为 module-lite.sh,格式最少,如果足够使用,可以跳过这一步 配置文件在 config 目录下

依次执行以下命令,将默认编译的 module-lite.sh 更改为 module-default.sh

# 进入 config 目录
cd config
​
# 删除当前的 module.sh 文件
rm module.sh
​
# 可根据需要替换为 `module-default.sh`, `module-lite-hevc.sh`, `module-lite.sh`
# 创建软链接 module.sh 指向 module-default.sh
ln -s module-default.sh module.sh
​
cd ..
cd ios
sh compile-ffmpeg.sh clean
​
复制代码

4.支持Https

如果我们需要支持Https,则添加 openssl 相关包,若不需要 Https 则跳过这步。

获取并编译openssl相关包

cd ..
# 获取 openssl 并初始化
./init-ios-openssl.sh
​
cd ios
​
# 在模块文件 module.sh 中添加配置 以启用 openssl 组件
echo 'export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"' >> ../config/module.sh
​
./compile-ffmpeg.sh clean
./compile-openssl.sh all (如果不需要https,跳过这一步)
复制代码

5.编译ffmpeg

./compile-ffmpeg.sh all
复制代码

如果编译 ffmpeg 时报错:error: unknown directive .arch armv7-a,这是因为最新的 Xcode9.4 弱化了对 32 位的支持,解决方式有两种: 1.可以在 compile-ffmpeg.sh 中删除 armv7,修改为 FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64" ;【不推荐,可能还有适配的需求】 2.使用之前的 Xcode 版本,这里我用的是 9.1 可以顺利编译,点这里下载 ,并指定 Xcode 路径

sudo xcode-select -s 【Xcode9.1路径】/Contents/Developer
复制代码

6.打开IJKMediaPlayer项目

添加 openssl 相关包以支持 Https

推荐使用 IJKMediaFramework这个target,并导入openssl相关包

7.打包 Framework

集成 ijkplayer 有两种方法: 一种方法是按照IJKMediaDemo工程中那样,直接导入工程IJKMediaPlayer.xcodeproj, 在这里不做介绍, 如下图:

第二种方法是把 ijkplayer 打包成framework导入工程中使用。 下面开始介绍如何打包IJKMediaFramework.framework。注意:默认打包为动态库,若要打包成静态类,需要手动选择为静态库,具体操作如下。

而如果我们需要打包适配所有模拟器/真机架构的库,则需要手动修改【Build Setting】中的Build Active Architecture Only属性。

如图,上图则表示在Debug模式下的库仅支持当前模拟器/真机架构,而Release模式下则支持所有模拟器/真机的架构。

这里以Release模式为例,需要Debug版同理,配置Release模式:

打包模拟器framework

打包真机framework

如果之前的步骤删除了 compile-ffmpeg.sh 中 armv7, 可能会报错,直接把报错的 armv7 注释掉就好

结果:

合并操作:

1.打开终端cd到Products目录下

2.执行以下命令完成合并

lipo -create Release-iphoneos/IJKMediaFrameworkWithSSL.framework/IJKMediaFrameworkWithSSL  Release-iphonesimulator/IJKMediaFrameworkWithSSL.framework/IJKMediaFrameworkWithSSL  -output IJKMediaFrameworkWithSSL
复制代码

3.替换真机 IJKMediaFrameworkWithSSL得到最终需要的包

7.导入framework到项目中

  • 将得到的包拖到项目中,注意勾选 Copy items if needed 和 对应的 target

  • 添加以下依赖

libc++.tbd
​
libbz2.tbd
AudioToolbox.framework
CoreGraphics.framework
AVFoundation.framework
CoreMedia.framework
CoreVideo.framework
MediaPlayer.framework
MobileCoreServices.framework
OpenGLES.framework
QuartzCore.framework
VideoToolbox.framework
复制代码

并在需要的地方导入头文件,command+B编译成功,集成成功。

#import <IJKMediaFrameworkWithSSL/IJKMediaFrameworkWithSSL.h>
复制代码

【若我们在打包时将库打包为动态库】导入后会出现下列问题: 解决方案: 在General--Embedded Binaries手动导入framework。

参考资料:www.jianshu.com/p/4419111de…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值