【其实不难】【MAC OS】编译IjkPlayer支持Https协议/各种直播协议、Avi等视频格式

1、 环境

Mac OS 10.13.4:其他环境后续补充,建议使用Linux/Mac环境编译
ffmpeg 0.8.8:目前最新版,如你使用的是旧版本,请仔细阅读教程正文,会有补充
Git:MacOS应该自带了git工具链,如没有请自行安装

1.5、 什么鸡儿?我只想要新的so不想知道怎么搞!

懒人下载链接:IjkPlayer-0.8.3 so库下载地址只使用0.8.3版本,其他版本请自行编译!

2、准备工作

请务必按照下面的步骤进行配置!

①、下载NDK-r10e
下载地址:MacOS X 64-bit-android-ndk-r10e-darwin-x86_64.bin

②、安装NDK环境并配置
cd 到android-ndk-r10e-darwin-x86_64.bin下载完成的目录执行以下指令

chmod a+x android-ndk-r10e-darwin-x86_64.bin
./android-ndk-r10e-darwin-x86_64.bin

等待解压完成等到下图所示文件夹

ijkplayer ios 代码解析 ijkplayer支持的格式_IjkPlayer


获取这个文件夹的位置配置到环境变量中

使用vim编辑~/.bash_profile并保存

(如果使用了zsh,那么就要编辑~/.zshrc)

如果没有这个文件,请自行新建

//不要直接复制这一句,=后面要粘贴自己的路径
export ANDROID_NDK=/Users/###/android-ndk-r10e

③、配置Android SDK环境

在Android Studio中获取Android SDK的位置,如下图

ijkplayer ios 代码解析 ijkplayer支持的格式_Android_02


同样配置到~/.bash_profile并保存

(如果使用了zsh,那么就要编辑~/.zshrc)

//不要直接复制这一句,=后面要粘贴自己的路径
export ANDROID_SDK=/Users/###/Library/Android/sdk
source ~/.bash_profile(~/.zshrc)

④、配置homebrew和yasm

//安装homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
//安装 yasm
brew install yasm

3、编译

请自行创建一个文件夹用于进行后续的操作,在该新建文件夹中执行以下指令

①、获取iIjkPlyer

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

cd ijkplayer-android

git checkout -B k0.8.3
//如果你使用的是新版,例如0.8.8版本,请执行如下指令
git checkout -B k0.8.8
//你也可以使用git tag指令来查看所有可以checkout的版本

②、自定义要支持的协议或格式(如果只想支持https、avi、flv等,请跳过这一步)

自定义要支持的协议或视频格式

ijkplayer ios 代码解析 ijkplayer支持的格式_IjkPlayer_03


通过vim或者记事本编辑该文件

ijkplayer ios 代码解析 ijkplayer支持的格式_IjkPlayer_04


这里只截取一部分,将你想要增加的协议或者格式更改为enable,例如我想支持rtp视频流只需要按照如下更改然后保存即可

ijkplayer ios 代码解析 ijkplayer支持的格式_Android_05

③、初始化openSSL/获取FFmpeg库文件
这一步看网速,可能会比较耗时
在ijkplayer-android目录下执行

./init-android-openssl.sh  这一步是添加https协议支持,看需求是否要执行
./init-android.sh


ijkplayer ios 代码解析 ijkplayer支持的格式_IjkPlayer_06

④、编译

cd android/contrib

./compile-openssl.sh clean
./compile-ffmpeg.sh clean

# 下面这一步耗时较久
./compile-openssl.sh all //编译https支持
./compile-ffmpeg.sh all

cd ..

./compile-ijk.sh all
//如果只想支持armv7a,不要其他CPU架构可以去掉all,比较节省时间

4、查看生成文件

打开如下目录

/###/ijkplayer-android/android/ijkplayer

查看armv7a架构的.so文件

cd ijkplayer-armv7a/src/main/libs/armeabi-v7a


ijkplayer ios 代码解析 ijkplayer支持的格式_ffmpeg_07

这里有三个so文件拷贝到自己的工程里使用即可

如果需要其他Cpu架构如x86的请到对应的目录下寻找即可

ijkplayer ios 代码解析 ijkplayer支持的格式_ijkplayer ios 代码解析_08

5、使用新的so库

①、解除旧的依赖

api 'tv.danmaku.ijk.media:ijkplayer-java:0.8.3'
//    api 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.3'
//如有其他架构也要解除依赖并引入自己编译的so库

②、拷贝新的so到工程

这里需要注意,如果你使用了自定义的JniLib目录,就要拷贝到自己定义的目录下面

ijkplayer ios 代码解析 ijkplayer支持的格式_IjkPlayer_09

③、rebuild工程,然后放小电影吧!

5、致谢

感谢Bilibili工程师的无私奉献