ijkplayer iOS篇集成 支持HTTPS

ijkplayer 是 bilibili 开源的一款优秀的播放器, 基于 FFmpeg, 支持 iOS/Android, 点播/直播, 以及多种编码.官方并不直接提供 framework 框架包, 这样大家可以根据需要选择配置, 自己编译并打包.但这样也会让很多伙伴们编译懵逼,我就是其中一位。下面是我如何在 iOS 中集成ijkplayer的,仅供各位大佬参考:

一、 下载ijkplayer:

在任意一个地方新建一个文件夹, 假设为桌面, 文件夹名为ijkplayer:

# 进入到刚刚新建的文件夹内

cd ~/Desktop/ijkplayer/

# 获取ijkplayer源码

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios

# 进入源码目录

cd ijkplayer-ios

# 新建一个latest分支并切换分支 (目前为k0.8.8, 可以自行去GitHub查看最新版本号)

git checkout -B latest k0.8.8

ijkplayer iOS篇集成 支持HTTPS_第1张图片
下载ijkplayer

二、 配置编解码器格式支持:

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

. 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

ijkplayer iOS篇集成 支持HTTPS_第2张图片
配置编解码器格式支持

三、获取 ffmpeg 并初始化 (这一步要是网络太差会非常的慢,我有两次编译了3个小时

cd ..

./init-ios.sh

ijkplayer iOS篇集成 支持HTTPS_第3张图片
获取 ffmpeg 并初始化

四、添加 https 支持 

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

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

编译:

# 如果下一步提示错误`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

ps: 如果提示错误:

ijkplayer iOS篇集成 支持HTTPS_第4张图片
解决方法: 在 compile-ffmpeg.sh 中删除 armv7 , 修改如: FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64" 再重新执行出现错误的命令: ./compile-ffmpeg.sh all

添加 openssl 相关包以支持 https (如果不使用 https, 可以跳过此步, 直接开始打包 framwork)

如果使用 https, 那么需要手动给 IJKMediaFramework 添加libcrypto.a和libssl.a文件, 默认不会添加

ps: 这两个依赖库的目录为: ijkplayer-ios/ios/build/universal/lib, 只有进行了上面跟 openssl 相关的操作, 才会在这个目录下有生成libcrypto.alibssl.a

ijkplayer iOS篇集成 支持HTTPS_第5张图片
支持https的静态库添加

五、打开 IJKMediaPlayer 项目 (执行完上面的每一步后确认无误)

open IJKMediaPlayer/IJKMediaPlayer.xcodeproj

六、打包 framwork

1、配置 Release 模式:

ijkplayer iOS篇集成 支持HTTPS_第6张图片
选择编辑
ijkplayer iOS篇集成 支持HTTPS_第7张图片
release模式

2、打包真机 framework

选择你连接的手机或者 Generic iOS Device,然后按键 command+b 编译即可

编译

如果之前的步骤删除了 compile-ffmpeg.sh 中 armv7, 这里会报错, 我们直接注释掉就好,如果注释后还是报这个错就全局搜索你的电脑 找到对应的文件 打开看里面的 armv7是否注释,config文件同理。

ijkplayer iOS篇集成 支持HTTPS_第8张图片
注释avconfig中的armv7
ijkplayer iOS篇集成 支持HTTPS_第9张图片
注释config中的armv7

3、打包模拟器 framework,随便选择一个模拟器 直接编译

ijkplayer iOS篇集成 支持HTTPS_第10张图片
模拟器framework

4、合并 framework:如果只需要真机运行或者模拟器运行, 可以不用合并, 直接找到对应的 framework 导入项目即可; 一般我们为了方便会合并 framework, 这样就同时支持模拟器和真机运行.

先找到生成 framework 的目录:

ijkplayer iOS篇集成 支持HTTPS_第11张图片
ijkplayer iOS篇集成 支持HTTPS_第12张图片

打开终端, 先 cd 到 Products 目录下

然后执行: lipo -create Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output IJKMediaFramework

合并完成:

可以看到这里生成了一个大概两倍大小的文件, 将生成的IJKMediaFramework文件替换掉真机framework中的IJKMediaFramework文件,然后这个替换掉文件的真机framework就是我们需要的通用的framework了。

ijkplayer iOS篇集成 支持HTTPS_第13张图片
ijkplayer iOS篇集成 支持HTTPS_第14张图片

七、集成 framework 到项目中

导入 framework

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

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

添加下列依赖到工程

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

导入 ijkplayer 头文件运行一下项目, 如果遇到了类似这样的错误:

可能是因为导入的依赖库不全, 比如缺少 libc++.tbd, 请再次对照添加好所有的依赖库:

ijkplayer iOS篇集成 支持HTTPS_第15张图片
最终需要的依赖库

最后就完成了,如有问题请提问点心,也可以找我要https的完整framework

你可能感兴趣的:(ijkplayer iOS篇集成 支持HTTPS)