ijkplayer是github上开源的一个直播框架,基于ffmpge,目前很多主流的直播平台都是采用这个直播框架,我在工作的过程中,也碰到了集成的这个问题,下面总结一下。
一、下载源码
- 下载地址:https://github.com/Bilibili/ijkplayer
- 下载后解压
文件如下图
这里有两个文件夹 需要我们了解,一个是 config,另外一个是 ios
二、开始编译
- 编译ffmpeg
第一次编译的话,需要去初始化一下环境(下载ffmpeg)
在当前目录下,执行命令
./init-ios.sh
这个过程可能有点久(网络好的朋友就当我没说)
初始化(下载)完成之后,可以考虑我们需要使用ffmpeg的哪些功能,因为ffmpeg编译是可裁剪的,为了减少我们生成包的大小,尽量还是去配置一下编译参数
打开上文中提到的config 文件夹,里面有三个文件,我们只需要修改module-lite.sh 这个文件即可,对于不需要的模块,就disable掉!
修改完成后,打开命令行工具,通过命令进入到ios文件夹
插播一下指令集的划分
指令集 | 设备 |
---|---|
armv6 | iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch |
armv7 | iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini,iPod Touch 3G, iPod Touch4 |
armv7s | iPhone5, iPhone5C, iPad4(iPad with Retina Display) |
arm64 | iPhone5S, iPad Air, iPad mini2(iPad mini with Retina Display) |
i386 | 32位模拟器设备 |
x86_64 | 64位模拟器设备 |
OK 继续
执行命令
./compile-ffmpeg.sh clean //清除掉之前编译生成的文件
./compile-ffmpeg.sh all //选择编译所有的指令集 rmv7 arm64 i386 x86_64
编译的过程中,如果出现了错误,查看错误原因,然后去/config/module-lite.sh 这个文件里重新配置一下,然后再编译。
三、生成IJKMediaFramework.framework库文件
打开ios/IJKMediaPlayer 项目文件,然后修改编译参数为Release
分别用真机和模拟器运行项目,运行成功后执行下图操作
在Findle中可以看到两个版本的文件
下面就是要将两个版本的framework合并成一个文件,这样模拟器和真机都可以使用这个库了
合并使用的命令如下
<pre>lipo -create ""真机版本路径"" ""模拟器版本路径"" -output ""合并后的文件路径""
</pre>
把合并后的文件替换到真机的framework中,如下图
绿色的框里的这个 就是最终的framework文件了
四、测试framework
新建一个项目,将生成的这个framework文件拖进项目
然后导入一下系统库文件
AudioToolbox.framework
AVFoundation.framework
CoreGraphics.framework
CoreMedia.framework
CoreVideo.framework
libbz2.tbd
libz.tbd
MediaPlayer.framework
MobileCoreServices.framework
OpenGLES.framework
QuartzCore.framework
UIKit.framework
VideoToolbox.framework
测试播放代码如下
id mePlayer=[[IJKFFMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@""视频流地址""] withOptions:nil];
UIView *playView=[self.mePlayer view];//播放器的view
playView.frame=CGRectMake(0,0,self.view.frame.size.width,200);
playView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view insertSubview:playView atIndex:1];