前言
關(guān)于ijkplayer
基于 FFmpeg n3.1 的 Android/iOS 視頻播放器,支持 MediaCodec, VideoToolbox爽哎,支持 RTMP/HTTP/HTTPS 視頻流播放蜓席,支持本地視頻播放。
項(xiàng)目地址:https://github.com/Bilibili/ijkplayer
如果是使用的 Windows 系統(tǒng)需要先用虛擬機(jī)裝個(gè) Linux 系統(tǒng)课锌,因?yàn)?ijkplayer 相關(guān)庫(kù)需要在 Linux 環(huán)境下編譯厨内。
相關(guān)文章
準(zhǔn)備工作:
1 ) 打開(kāi)終端渺贤,執(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 ) 通過(guò) Log 查看穩(wěn)定版的 tag,切換到穩(wěn)定版分支
// 切換到穩(wěn)定版分支
git checkout -B k0.6.2.1 k0.6.2.1
4 ) 配置環(huán)境變量
在開(kāi)始編譯之前需要先配置`ANDROID_SDK` 與`ANDROID_NDK`環(huán)境變量志鞍。Linux 下如何配置環(huán)境變量可以參考上面那篇文章瞭亮。
5 ) 環(huán)境說(shuō)明
- 系統(tǒng):Ubuntu 16.04
- NDK:android-ndk-r12b(建議使用 r10e 以上版本)
初始化
1 ) checkout ffmpeg code
// 進(jìn)入工程根目錄
cd ijkplayer
// checkout ffmpeg 源碼,默認(rèn)從 https://github.com/Bilibili/FFmpeg.git checkout
./init-android.sh
2 ) checkout openssl code固棚,增加 https 協(xié)議支持需要用到該庫(kù)统翩。
// checkout openssl android源碼仙蚜,默認(rèn)從 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 默認(rèn)只生成 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
目錄下。此時(shí)編譯好的 so 是支持 https 協(xié)議的娶桦。
ijkplayer/android/ijkplayer
是一個(gè) Android Studio 工程贾节,里面有 ijkplayer 的 example 和各架構(gòu)的 Library Project。
此時(shí)衷畦,把 ijkplayer/android/ijkplayer
導(dǎo)入 Android Studio 栗涂,ijkplayer-example 已經(jīng)可以正常運(yùn)行了。
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' // 這個(gè)是 ijkplayer 對(duì) exoplayer 的封裝霎匈,支持webm格式視頻戴差,看項(xiàng)目需求是否添加
(2) 在工程 src\main
目錄下新建一個(gè) jniLibs 目錄并把 so 拷貝到對(duì)應(yīng)架構(gòu)名稱的目錄下。
我編譯好的庫(kù)
項(xiàng)目地址:https://coding.net/u/linchaolong/p/ijkplayer-https/git
修改編譯配置說(shuō)明
ijkplayer的編譯配置腳本在 ijkplayer/config
目錄下铛嘱。
如果需要啟用/停用某個(gè)解碼器或功能只需要修改 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"
橫豎屏切換問(wèn)題
默認(rèn)情況下,Activity 橫豎屏切換會(huì)重新創(chuàng)建墨吓,播放器也會(huì)被銷毀重新創(chuàng)建球匕。為了防止這種情況,在 AndroidManifest.xml
中 Activity 添加如下配置帖烘,表示下面屬性變化時(shí)把事件傳遞給該 Activity 的 onConfigurationChanged 方法處理亮曹。
android:configChanges="orientation|keyboardHidden|screenSize"