快速入門
ijkplayer是Bilibili發(fā)布的輕量級 Android/iOS 開源視頻播放器。核心代碼主要是用C寫的宪卿,主要由ffmpeg(解碼)+openssl(https)+播放器相關組成。編譯可裁剪哎榴,支持直播菇肃、點播(在線播放)、硬件加速解碼首量、彈幕等,完整版支持格式較多进苍,包括且不限于mp4加缘、avi、asf觉啊、dat拣宏、f4v、flv杠人、mkv勋乾、mov、mpg嗡善、rmvb辑莫、ts、vob滤奈、webm摆昧、wmv等視頻封裝格式。
- 快速集成
在Android Studio中加如下依賴即可:
// 必須:足以適應大多數(shù)設備
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
- 所需環(huán)境
系統(tǒng):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
- 配置環(huán)境變量
在開始編譯之前需要先配置ANDROID_NDK環(huán)境變量偶垮。
下載NDK后解壓到/opt/Android/目錄下
$ sudo unzip android-ndk_r13b-linux-x86_64.zip
$ sudo mv android-ndk-r13b /opt/Android/
添加環(huán)境變量到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 工程砰奕,經(jīng)過編譯后即是一個完整的工程蛛芥,可以直接拷貝出來用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'