[iOS] IJKPlayer集成到iOS项目

一.前言

最近一段时间在找工作也比较空闲, 所以又心血来潮写这一篇文章, IJK是B站开源的一款基于ffmpeg的播放框架, 那为什么要使用它呢? iOS自带的AVPlayer不香么? 答案是一定程度上来说自带的播放器很香, 但如果想要播放多种格式或者直播拉流就不能胜任了, 所以今天来讲一下这个播放器的应用.

二.从下载到编译再到集成

首先我们要把它下载到本地
https://github.com/bilibili/ijkplayer

https://github.com/bilibili/ijkplayer.git

没有安装git的自行去安装

下载完毕后我们可以看到它的目录

克隆完毕后 我们需要运行脚本, 脚本会自动下载ffmpeg到本地, 这个过程非常的漫长, 有90%的人都"死"在了这里,

./init-ios.sh
./init-ios-openssl.sh

这里提供快速下载的解决方案, 如果你的网络不好请尝试云服务器上进行下载安装, 然后使用winscp或者filezilla移动到你本地电脑上

下载完毕后我们进入ios目录

可以看到这么一大堆东西, 这些就是arm处理器下播放视频所需要的库, armv7, arm64 是指令集, 比如v7对应的机型就是4s, arm64对应的机型就是5s, 6s及之后的全部机型, 这里就不在过多赘述了, 接下来我们需要做的一步非常容易出错, 就是编译ffmpeg以提供给我们的IJKPlayer

首先我们要添加一句话 打开https支持

在这个文件中加入

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"

然后开始编译

cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

然后这里可能会报出一个错误

我们这里选择直接放弃32位处理器(5s及以上均为64位处理器)
所以我们修改文件 compile-ffmpeg.sh

第 24 行
FF_ALL_ARCHS_IOS8_SDK="armv7 arm64 i386 x86_64"
改为
FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"

然后我们重新执行编译

./compile-ffmpeg.sh all

编译完成后是这个样子

然后我们查看一下编译之后的库

之后我们就可以进行下一步操作了 打开我们的IJKMediaDemo
选择好工程和设备

我们来运行一下 cmd + r

我们发现项目是可以跑起来的 视频也是可以播放的

不要急 这只是我们成功的第一步 之后我们要把这个播放器集成到我们iOS项目, 这就需要把播放器打包成一个framework静态库

我们点击下拉列表把工程切换到IJKMediaFramework
然后切换成release模式

cmd + b 进行编译

模拟器版本的静态库编译非常成功


我们再来编译真机版本的

这次好像不太成功会出现这个报错, 索性我们追踪过去

解决方案是去掉 avconfig.h 中的 armv7 指令集

我的路径是

/Users/objcat/Downloads/ijkplayer-master/ios/build/universal/include/libavutil/avconfig.h

去掉之后我们再次编译, 发现会有另外一个错误

这次是config.h文件 我们追踪过去 干掉 armv7 指令集

干掉后 我们再次编译

这次很顺利编译成功了

然后我们来查看一下编译完成的framework

我们可以看到有两个framework, 其中一个是模拟器编译出来的是提供给模拟器用的, 另外一个是iOS设备编译出来的是真机使用的, 如果你分不清他们的区别, 我们就简单介绍一下, 首先我们进入目录

这个就是framework的静态库文件, 我们来查看一下它的架构

lipo -info IJKMediaFramework

我们可以清楚的查看到它的指令集是 i386, x86_64 这是我们电脑cpu的指令集, 模拟器就是基于我们电脑cpu来运作的

我们再来看一下真机的静态库

armv7 arm64 可以看出来就是我们的手机需要用的指令集

接下来我们需要合并这两个静态库让我们既能在pc上面用也能在真机上面用

lipo -create framework1 framework2 -output framework3
# 回到桌面
cd ~/desktop
# 创建文件夹
mkdir result
# 合并静态库
lipo -create /Users/objcat/Library/Developer/Xcode/DerivedData/IJKMediaDemo-bhbtpbiuyqzmnsdymcfvwrhrakmk/Build/Products/Release-iphoneos/IJKMediaFramework.framework/IJKMediaFramework  /Users/objcat/Library/Developer/Xcode/DerivedData/IJKMediaDemo-bhbtpbiuyqzmnsdymcfvwrhrakmk/Build/Products/Release-iphonesimulator/IJKMediaFramework.framework/IJKMediaFramework -output ./result/IJKMediaFramework

到这里合并就完成了 我们去桌面查看一下

我们可以看到它包含了模拟器和真机的指令集, 到这里静态库制作成功了, 我们把这个文件随意塞到一个编译好的framework

这个framework我们就可以直接在其他工程中使用了, 下面我就来演示一下

新建工程

制作好的静态库放进来

#import "ViewController.h"
#import <IJKMediaFramework/IJKMediaFramework.h>

@interface ViewController ()
/// 播放器
@property (strong, nonatomic) IJKFFMoviePlayerController *moviePlayer;
/// 播放配置
@property(nonatomic,strong) IJKFFOptions *options;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.options = [IJKFFOptions optionsByDefault];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"mov"];
    self.moviePlayer = [[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:filePath] withOptions:self.options];
    self.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
    [self.moviePlayer prepareToPlay];
    [self.view addSubview:self.moviePlayer.view];
}

写好播放器代码后我们来运行一下

发现了一堆乱七八糟的错误哈 不要着急 这种问题显然是缺少动态库导致的

libc++.tbd
libz.tbd

引入动态库后我们发现问题完美解决了

快播放的视频看看吧!

播放网络视频和很容易哦

self.options = [IJKFFOptions optionsByDefault];
self.moviePlayer = [[IJKFFMoviePlayerController alloc] initWithContentURLString:@"http://www.objcat.com:8083/1.mov" withOptions:self.options];
self.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
[self.moviePlayer prepareToPlay];
[self.view addSubview:self.moviePlayer.view];

播放视频这一块到此结束.

三.播放HTTPS地址

如果请求地址是https协议的, 这里会出现一个错误

这时候我们就需要来添加https支持库
我们在安装的时候有执行脚本init-ios-ssl.sh
这个脚本就是帮助我们下载了https所需要的库文件

然后我们对它进行编译

./compile-openssl.sh all

编译完成后是这个样子

我们进入这个文件夹

我们需要的库文件是

然后我们把这两个文件拖入到项目中去

再次进行双编译就可以了 编译出的静态库是支持https的 如果你很迷茫不会编译 我这里也提供了百度云盘的下载链接 直接拿去使用

链接:https://pan.baidu.com/s/1uqrBrfuOSpiXZ93J5jlsow 密码:uimn

finally enjoy it

by objcat

2020.04.04

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

推荐阅读更多精彩内容