【发烂渣】iOS - ijkplayer集成【一】

4,292 阅读5分钟

【背景】

现在市面上比较多人使用的APP一般都会有视频播放的个功能。视频无论是从功能性、体验性等对于用户来说都是比较友好的方式。所以对于一名iOS开发人员来说,视频、播放器等关于多媒体的开发能力来说,可以来说是必不可少的。

【为什么不使用iOS原生框架】

虽然Apple也提供AVPlayer框架、MPPlayer框架(MP在iOS13后,已经被苹果完全抛弃了),但AVPlayer对于一些比较高度自定义、直播等功能来说,就不是一个比较好的解决方案了。同时对于现在的APP来说,有苹果端则必须有安卓端。如果此时,苹果能解决的功能,而安卓做不到相同的功能,又或者安卓可以,但苹果不可以。对于用户来说,我觉得是不可以接受的。

【为什么使用ijkPlayer】

ijkPlayer -- 其实是由的BiliBili-B站开源的一个开源视频框架,同时有安卓端和苹果端。这对于公司来说,是一个比较好的解决方案。基本上则就可以保证,在功能的开发上,基本能保证功能的一致性,则也可以让用户在使用APP的时候有比较好的使用体验。

【ijkPlayer的由来】

ijkPlayer 其实是对大名鼎鼎的跨平台框架【FFMpeg】进行封装的一个开源架构,使得该视频框架可以在多平台进行开发和使用。

【题外话 -- FFMpeg介绍】

1. 它的全称为“Fast Forward Mpeg”,正如它的名称一样,快速、功能强大。
2. 是一个多媒体视频处理的解决方案,集转换、播放、录制等功能于一身的工具。
3. FFmpeg虽然是在Linux下进行开发的,但她是基于C语言进行开发的,所以可以同时在Windows、MacOS等系统下进行编译运行开发。
4. FFMpeg也因其完美,被许多大厂集成过、或者仍然使用着。如VLC、MPlayer,还有国内的暴风影音、QQ影音也都在其列
5. 需要注意的是,该项目是基于LGPL/GPL的开源协议。
对于FFMpeg的框架的解读,我将在之后再写一遍专门的文章进行介绍。

【集成开始】

那现在就由我来讲解一下ijkplayer的集成方式

一、 获取ijkPlayer

1. 前往全球最大的交友平台站 GitHub 进行 下载 或者 克隆 ijkPlayer

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
建议:先创建一个文件夹,然后cd进入后,再进行git clone

进入到文件目录,文件目录结构如下图:

2. 进入ijkplayer-ios文件目录,如图:

cd ijkplayer-ios

3. 新建分支latest并切换

git checkout -B latest k0.8.8
如果看到Switched to a new branch 'latest',即可。如图:

到这里,我们基本上把ijkPlayer项目已经git下来了,并且新建和切换到分支latest

正如刚刚也说,ijkPlayer是基于FFMpeg进行封装的,所以在进行使用ijkPlayer之前,我们需要把核心【FFMpeg】进行编译。

因为ijkPlayer 是有2个版本,1个是支持SSL,另外一个是不支持SSL。这两者的区别是什么?简答的来说,就是如果需要支持https的视频连接,请使用SSL版本,否则,反之。

但是!但是!但是!如果需要使用SSL版本,则需要进行openSSL的编译。

记住!记住!记住!在编译ijkPlayer的时候,必须先编译FFMpeg和OpenSSL。两个版本的编译流程如下:

SSL版本:OpenSSL下载->OpenSSL编译->FFMpeg下载->FFMpeg编译-ijkPlayer编译

非SSL版本:FFMpeg下载->FFMpeg编译-ijkPlayer编译

git 的命令如下:(看到这些命令不要那么心急就直接在命令行进行复制、粘贴,往下阅读一下!再看一下!真的,下面的是干货!!!!)

./init-ios-openssl.sh  //如果需要https,则这一句必须进行
./init-ios.sh       
cd ios
./compile-openssl.sh clean //如果需要https,则这一句必须进行
./compile-ffmpeg.sh clean
./compile-openssl.sh all   //如果需要https,则这一句必须进行
./compile-ffmpeg.sh all

需要注意的是,因为OpenSSL和FFMpeg都比较大,无论是下载和编译都很耗时。所以耐心等待。

在官方的文档也特别提到的一些地方,我们一起看下:

简单的翻译一下,大概就是如果需要更多的编码或者解码,需要在编译前提前进行更改。命令行如下:

  • If you prefer more codec/format
cd config
rm module.sh
ln -s module-default.sh module.sh
#cd android/contrib
cd ios
sh compile-ffmpeg.sh clean
  • If you prefer less codec/format for smaller binary size (include hevc function)
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
#cd android/contrib
cd ios
sh compile-ffmpeg.sh clean
  • If you prefer less codec/format for smaller binary size (by default)
cd config
rm module.sh
ln -s module-lite.sh module.sh
#cd android/contrib
cd ios
sh compile-ffmpeg.sh clean

接下来,本人就会使用SSL的版本进行步骤分解和说明

1. 进行OpenSSL的clone,如图:(真的会很耗时!真很耗时!真的很耗时!)。

./init-ios-openssl.sh  

2. 进行FFMpeg的clone。(真的会很耗时!真很耗时!真的很耗时!)

./init-ios.sh 

3.clone完毕后,我们就可以开始进行编译运行了。但编译前我们需要先clean。首页我们需要cd进入“ios”这个文件夹里面进行清除和编译。

cd ios                   
./compile-openssl.sh clean  //对openssl进行clean
./compile-ffmpeg.sh clean   //对ffmpeg进行clean

4. clean完毕后,我们就可以开始编译了。

./compile-openssl.sh all  //对ssl进行编译
./compile-ffmpeg.sh all  // 对ffmpeg进行编译

重点!重点!重点!

一般在进行./compile-ffmpeg.sh all这句话的时候都会出现以下这个错误

这个时候不要怕,我们是技术人员,解决问题是我们的强项!

跟着以下这几步,即可解决这个问题。

  1. 打开【ios】文件夹里面的打开【compile-ffmpeg.sh】这个文件

  2. 第24行改为:【FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64】

  3. 第120行改为:【if [ "$FF_TARGET" = "armv7s" -o "$FF_TARGET" = "arm64" ]; then

  4. 第159行改为:【echo " compile-ffmpeg.sh arm64|i386|x86_64"】

修改完后,我们重新运行命令行,然后安静的等待即可。

./compile-ffmpeg.sh all

看到没有任何错误,即表示已经编译完成了。

再进入到文件夹【ios】里面,即可以正常运行ijkplayer了。

然而,在运行【IJKMediaPlayer】或者【IJKMediaDemo】我们仍然会出现几个问题。

关于ijkplayer的framework编译和打包。我将在下一篇文章中,重点讲解。