前言
關(guān)于ijkplayer
基于 FFmpeg n3.1 的 Android/iOS 視頻播放器,支持 MediaCodec, VideoToolbox,支持 RTMP/HTTP/HTTPS 視頻流播放,支持本地視頻播放。
如果是使用的 Windows 系統(tǒng)需要先用虛擬機裝個 Linux 系統(tǒng),因為 ijkplayer 相關(guān)庫需要在 Linux 環(huán)境下編譯。
相關(guān)文章
準備工作:
1 ) 打開終端,執(zhí)行下面命令,安裝 git 和 yasm
sudo apt-get install git
sudo apt-get install yasm
2 ) clone ijkplayer code
// 把代碼clone到本地
git clone https://github.com/Bilibili/ijkplayer ijkplayer
3 ) 通過 Log 查看穩(wěn)定版的 tag,切換到穩(wěn)定版分支
// 切換到穩(wěn)定版分支
git checkout -B k0.6.2.1 k0.6.2.1
4 ) 配置環(huán)境變量
在開始編譯之前需要先配置`ANDROID_SDK` 與`ANDROID_NDK`環(huán)境變量。Linux 下如何配置環(huán)境變量可以參考上面那篇文章。
5 ) 環(huán)境說明
- 系統(tǒng):Ubuntu 16.04
- NDK:android-ndk-r12b(建議使用 r10e 以上版本)
初始化
1 ) checkout ffmpeg code
// 進入工程根目錄
cd ijkplayer
// checkout ffmpeg 源碼,默認從 https://github.com/Bilibili/FFmpeg.git checkout
./init-android.sh
2 ) checkout openssl code,增加 https 協(xié)議支持需要用到該庫。
// checkout openssl android源碼,默認從 https://github.com/Bilibili/openssl.git checkout
./init-android-openssl.sh
編譯
1 ) 編譯 openssl
// 首先 cd 到 ijkplayer/android/contrib 目錄下,Android下編譯腳本就放在該目錄下
cd android/contrib
// 編譯 openssl
./compile-openssl.sh clean
./compile-openssl.sh all
2 ) 編譯 ffmpeg
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
3 ) 編譯 ijkplayer native code
// 返回到 ijkplayer/android 目錄
cd ..
// 編譯生成各CPU架構(gòu)的so,如果不加 all 默認只生成 armv7a 架構(gòu)的 so
// 編譯指定架構(gòu)的so:compile-ijk.sh armv7a,具體參考 .sh 文件中的 Usage
./compile-ijk.sh all
編譯完成后 so 就放在 ijkplayer/android/ijkplayer/ijkplayer-xxx/src/main/libs 目錄下。此時編譯好的 so 是支持 https 協(xié)議的。
ijkplayer/android/ijkplayer 是一個 Android Studio 工程,里面有 ijkplayer 的 example 和各架構(gòu)的 Library Project。
此時,把 ijkplayer/android/ijkplayer 導入 Android Studio ,ijkplayer-example 已經(jīng)可以正常運行了。
4 ) 在自己的工程中引用 ijkplayer 和自己編譯的 so
(1) 在 build.gradle 添加 ijkplayer-java 依賴
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.2'
// compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.6.2' // 這個是 ijkplayer 對 exoplayer 的封裝,支持webm格式視頻,看項目需求是否添加
(2) 在工程 src\main 目錄下新建一個 jniLibs 目錄并把 so 拷貝到對應架構(gòu)名稱的目錄下。
我編譯好的庫
項目地址:https://coding.net/u/linchaolong/p/ijkplayer-https/git
修改編譯配置說明
ijkplayer的編譯配置腳本在 ijkplayer/config 目錄下。
如果需要啟用/停用某個解碼器或功能只需要修改 enable/disable。
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mp3_header_decompress"
修改后
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-bsf=mp3_header_decompress"
橫豎屏切換問題
默認情況下,Activity 橫豎屏切換會重新創(chuàng)建,播放器也會被銷毀重新創(chuàng)建。為了防止這種情況,在 AndroidManifest.xml 中 Activity 添加如下配置,表示下面屬性變化時把事件傳遞給該 Activity 的 onConfigurationChanged 方法處理。
android:configChanges="orientation|keyboardHidden|screenSize"