前端時間項(xiàng)目中用到了視頻播放的功能占遥,沒辦法又不想使用系統(tǒng)自帶的播放器,沒有為什么就是不想用痘煤,我也希望谷歌爸爸能出一款最基礎(chǔ)的播放器控件凑阶,然后可以靈活的自己定制UI,唉衷快!經(jīng)過一番尋找終于找到了IjkPlayer宙橱,這是Bilibili的一款基于ffmpeg視頻編解碼庫的播放器控件,看起來挺不錯的蘸拔。此外還發(fā)現(xiàn)了一篇二次封裝的UI效果 基于ijkplayer的視頻播放器师郑,仿Bilibili客戶端,集成沉浸式全屏都伪、彈幕呕乎、觸屏控制、視頻源切換等功能 封裝的不錯陨晶。于是采用這個來做自己的播放器控件了猬仁。但實(shí)踐的過程中還是有不少坑要踩的,比如視頻的解碼格式的支持先誉,安卓各CPU平臺的兼容湿刽,以及https的支持這些都是我遇到的問題,網(wǎng)上的很多庫都是對這些支持都是不全的褐耳,怎么辦呢诈闺?還是自己動手豐衣足食,重新去編譯一遍Ijkplayer的源碼铃芦。找到 ijpliayer github 地址看到它的Readme中有編譯過程的描述,嗯!大致就醬紫雅镊, 不過還是有些需要注意的襟雷。下面帶大家一起一步一步的重新編譯。
-
準(zhǔn)備工作
這里我使用在ubuntu下去編譯它仁烹,沒有為什么就是方便耸弄。
1.下載virtualbox虛擬機(jī)官網(wǎng)地址
2.下載unbutu17.04鏡像文件
3.下載winSCP百度搜一下就有,用來方便在win和unbutu之間傳輸文件用
-
開始安裝工作
當(dāng)系統(tǒng)安裝完成以后卓缰,我們進(jìn)入桌面计呈,開始編譯ijkplayer。
1.首先先去下載androidNDK 以及SDK
android NDK選擇Linux的
android SDK選擇一個高一點(diǎn)的Linux版本就好征唬。
下載完成之后打開終端
Ctrl+Alt+T
我們在home\Downloads
目錄下會看到我們下載的ndk和sdk壓縮包我們把它們解壓出來捌显,一個是.zip的另一個是.tgz的。
cd ~/Downloads
unzip xxx.zip
tar zxvf xxx.taz
將兩個壓縮文件解壓到當(dāng)前目錄即可总寒。
2.下載openjdk
sudo apt-get install openjdk-8-jre-headless
之后會自動安裝好扶歪。
3.配置SDK和NDK環(huán)境變量
新下載好的linux版本的sdk缺少一點(diǎn)東西,需要我們自己去下摄闸,好在官方readme中已經(jīng)說明了打開和windows中的sdkmanager一樣的東西击罪,在Linux中不叫這個名字,叫做android.sh 在tools目錄下贪薪。說明如下
To start the SDK Manager,please execute the program "android".
啟動android sdk manager
sh ~/Downloads/android-sdk-linux/tools/android
之后就是和windows一樣了。
我們下載最新的Android SDK Tools和Android SDK Platform-tools以及Android SDK Build-tools眠副,在下載一個最新的Android SDK Platform即可画切。
配置環(huán)境變量
sudo gedit /etc/profile
/etc/profile 的文件是讓所有用戶都可用。
在配置文件末尾加入如下部分并保存:
export PATH=~/Downloads/android-sdk-linux/platform-tools:$PATH
export PATH=~/Downloads/android-sdk-linux/tools:$PATH
export ANDROID_NDK=~/Downloads/android-ndk-r14b
export PATH=~/Downloads/android-ndk-r14b:$PATH
讓環(huán)境變量立即生效
source /etc/profile
你可以用簡單的命令來測試一下是否生效了如
adb -version
3.安裝一些軟件
sudo apt-get update
sudo apt-get install git
sudo apt-get install yasm
4.下載ijkplayer-android
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
-
5.開始編譯
cd ijkplayer-android
先做初始化
./init-android.sh
初始化從網(wǎng)上提取ffmpeg庫囱怕,有段時間霍弹,可以先去泡杯茶。
如果視頻播放需要支持Https協(xié)議的還需要執(zhí)行一遍如下初始化腳本娃弓。
./init-android-openssl.sh
1.編譯各個平臺的openssl
cd android/contrib
./compile-openssl.sh clean
之后最好一個一個的對應(yīng)CPU平臺去編譯openssl,也能一次全部編譯典格,但是我之前出過問題,后來單獨(dú)編譯就好了台丛∷=桑可以更具自己的需求分別選擇執(zhí)行下面步驟,過程也是挺漫長的挽霉。
./compile-openssl.sh armv7a
./compile-openssl.sh armv5a
./compile-openssl.sh arm64
./compile-openssl.sh x86
./compile-openssl.sh x86_64
2.編譯各個平臺的ffmpeg
根據(jù)官方的說法防嗡,如果我們需要更多的編解碼格式,得先執(zhí)行下面的命令
回到ijkplayer-android目錄并鏈接module文件
cd ../..
cd config/
rm module.sh
ln -s module-default.sh module.sh
cd ..
cd android/contrib/
./compile-ffmpeg.sh clean
其實(shí)打開module.sh里面是各個編解碼的格式侠坎,可以在里面開啟或禁用
如果需要啟用/停用某個解碼器或功能只需要修改 enable/disable即可蚁趁。
之后最好一個一個的對應(yīng)CPU平臺去編譯ffmpeg,也能一次全部編譯,但是我之前出過問題实胸,后來單獨(dú)編譯就好了他嫡》伲可以更具自己的需求分別選擇執(zhí)行下面步驟,過程也是挺漫長的钢属。
./compile-ffmpeg.sh armv7a
./compile-ffmpeg.sh armv5a
./compile-ffmpeg.sh arm64
./compile-ffmpeg.sh x86
./compile-ffmpeg.sh x86_64
3.編譯ijkplayer native代碼
做法也是一個一個平臺去編譯它徘熔。不要圖省事一起編譯。
cd ..
./compile-ijkplayer.sh armv7a
./compile-ijkplayer.sh armv5a
./compile-ijkplayer.sh arm64
./compile-ijkplayer.sh x86
./compile-ijkplayer.sh x86_64
編譯好后就能在android/ijkplayer目錄中對于的文件夾里找到了這里截取一段x86文件夾的圖
新版的編譯后新增了一個libijksound.so文件署咽,之前是沒有的近顷,通常libijkffmpeg.so 有我圖中這么大就差不多了,不同的平臺大小都不一樣宁否。其他兩個文件相對來是就幾百k窒升。
到這里一切都o(jì)k了。我們可以使用winSCP工具把編譯好的ijkplayer傳送到win上然后使用慕匠。