天天看點

android+ts+播放器,開源播放器ijkplayer的編譯

快速入門

ijkplayer是Bilibili釋出的輕量級 Android/iOS 開源視訊播放器。核心代碼主要是用C寫的,主要由ffmpeg(解碼)+openssl(https)+播放器相關組成。編譯可裁剪,支援直播、點播(線上播放)、硬體加速解碼、彈幕等,完整版支援格式較多,包括且不限于mp4、avi、asf、dat、f4v、flv、mkv、mov、mpg、rmvb、ts、vob、webm、wmv等視訊封裝格式。

快速內建

在Android Studio中加如下依賴即可:

// 必須:足以适應大多數裝置

implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'

// 可選:其他架構

implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'

// 實驗性功能:對ExoPlayer的封裝,封裝成功IMediaPlayer

implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'

使用預設的支援的格式相對較少,測試後大概有mp4、flv、f4v和mkv(0.8.8支援),如果要更多格式需要自己下載下傳源碼在Ubuntu中編譯。

編譯ijkplayer

所需環境

系統:Ubuntu 18.04.1 LTS(虛拟機推薦使用VirtualBox)

NDK:android-ndk-r13b-linux-x86_64(ijkplayer僅支援r10e以上r14b及以下的NDK版本)

項目:ijkplayer k0.8.8

安裝Ubuntu

(略)

安裝元件

$ sudo apt-get install vim openssh-server git curl wget tar unzip build-essential openjdk-8-jdk yasm python

// 用bash代替dash (不一定需要),彈出視窗選擇NO

$ sudo dpkg-reconfigure dash

配置環境變量

在開始編譯之前需要先配置ANDROID_NDK環境變量。

下載下傳NDK後解壓到/opt/Android/目錄下

$ sudo unzip android-ndk_r13b-linux-x86_64.zip

$ sudo mv android-ndk-r13b /opt/Android/

添加環境變量到profile

$ sudo vim /etc/profile

在檔案末尾添加如下内容

export ANDROID_NDK=/opt/Android/android-ndk-r13b

export PATH=$PATH:$ANDROID_NDK

完成後重新開機Ubuntu或者在終端中source一下profile

$ source /etc/profile

克隆ijkplayer代碼

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

編譯配置

ijkplayer有三種編譯配置

1)支援較多格式(完全編譯,幾乎所有格式都支援了),檔案較大

$ cd config

$ rm module.sh

$ ln -s module-default.sh module.sh

2)支援較少格式,包含hevc

$ cd config

$ rm module.sh

$ ln -s module-lite-hevc.sh module.sh

3)支援較少格式(預設)

$ cd config

$ rm module.sh

$ ln -s module-lite.sh module.sh

下載下傳源碼

開源項目中并沒有直接包含ffmpeg和openssl源碼,是以編譯前需要先下載下傳

// 進入工程根目錄

$ cd ijkplayer-android

// checkout ffmpeg 源碼,ffmpeg有300多M,下載下傳可能會有點慢

$ ./init-android.sh

// checkout openssl android源碼

$ ./init-android-openssl.sh

編譯

// 編譯openssl(用于支援https)

$ cd android/contrib

$ ./compile-openssl.sh clean

$ ./compile-openssl.sh all

// 編譯 ffmpeg

$ ./compile-ffmpeg.sh clean

$ ./compile-ffmpeg.sh all

// 編譯ijkplayer

$ cd ..

$ ./compile-ijk.sh all

如果在編譯ffmpeg時有報:fatal error: linux/perf_event.h: No such file or directory錯誤,那麼在ijkplayer-android/config/module.sh的末尾添加

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"

再重新編譯即可

使用

ijkplayer-android/android/ijkplayer目錄是一個 Android Studio 工程,經過編譯後即是一個完整的工程,可以直接拷貝出來用Android Studio打開使用。

ijkplayer-example:示例

ijkplayer-java:java層的庫(必須的)

ijkplayer-xxx:各種架構的so庫

ijkplayer-exo:對ExoPlayer的封裝

也可以将lib工程中的so拷貝到建立的工程中,隻需要依賴對應版本的java層的庫即可,這裡是k0.8.8

implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'