記錄一次Linux下編譯Android平臺的ijkPlayer源碼

環(huán)境:Ubuntu18.04
跟ffmpeg編譯類似检诗,不過沒有ffmpeg的編譯復雜酝枢。

幾個出錯點:

  • 1.編譯ssl時發(fā)生:*
$ sudo ./compile-openssl.sh all
====================
[*] check archs
====================
FF_ALL_ARCHS = armv5 armv7a arm64 x86 x86_64
FF_ACT_ARCHS = armv5 armv7a arm64 x86 x86_64

You must define ANDROID_NDK before starting.
They must point to your NDK directories.\n

解決
如果不是ndk路徑設置錯誤恬偷,很大 可能是權限問題,給父目錄設置權限:

     sudo chmod -R 777 /xxx/
    1. 下面這個不是很重要帘睦,x86 架構袍患,可以不用管。網(wǎng)上有一種處理辦法竣付,是提前安裝依賴項:

sudo apt-get install python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev zlib1g-dev

這個我沒有試過诡延。下面是錯誤信息:

Delta compression using up to 12 threads.
壓縮對象中: 100% (6502/6502), 完成.
寫入對象中: 100% (25071/25071), 完成.
Total 25071 (delta 15950), reused 25071 (delta 15950)
./init-android-openssl.sh: 第 35 行: cd: android/contrib/openssl-x86: 沒有那個文件或目錄
  • 3.執(zhí)行*./compile-ffmpeg.sh all *時發(fā)生錯誤:
--------------------
[*] compile ffmpeg
--------------------
In file included from ./libavutil/internal.h:42:0,
                 from ./libavutil/common.h:467,
                 from ./libavutil/avutil.h:296,
                 from ./libavutil/avassert.h:31,
                 from libavfilter/aeval.c:26:
./libavutil/timer.h:38:31: fatal error: linux/perf_event.h: No such file or directory
 # include <linux/perf_event.h>
                               ^
compilation terminated.
make: *** [libavfilter/aeval.o] Error 1

解決
回到config文件夾,在module-default.sh最底部增加以下兩行

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

重新執(zhí)行:

ln -s module-default.sh module.sh

然后回去:

cd ../android/contrib

繼續(xù)編譯ffmpeg

一古胆、準備工作

先進入項目官網(wǎng)肆良,查看目錄結構,選擇需要的分支拉取到本地逸绎。
選擇穩(wěn)定分支k0.8.8
源碼地址:https://github.com/bilibili/ijkplayer/tree/master

tag next

  • ffmpeg: upgrade to 4.0

tag k0.8.8

  • ffmpeg: upgrade to 3.4
  • ffmpeg: fix hls some issue
  • android: fix seek bug when no audio
  • openssl: upgrade to 1.0.2n
  • ios: vtb support h265

1. 安裝配置jdk, SDK, NDK

網(wǎng)上有人說jdk,sdk不配置也行惹恃,我的都配置過了。

  • jdk:
sudo apt-get install openjdk-8-jdk
//配置環(huán)境變量:
sudo gedit  /etc/profile 
export  JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
./sdkmanager "add-ons;addon-google_apis-google-24" "add-ons;addon-google_apis-google-24"  "platform-tools" "platforms;android-28" "tools"

3)環(huán)境變量

sudo gedit  /etc/profile 
export ANDROID_SDK=/home/jesen/Android/SDK/android-sdk-linux
export PATH=${PATH}:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
  • NDK下載跟sdk一樣,版本不要太高巫糙,否則后面編譯會報You need the NDKr10e or later
    r14b下載
    r10e下載
    不過可以編譯前指定ndk版本找到do-detect-env.sh 腳本颊乘,路徑:ijkplayer-android/android/contrib/tools/do-detect-env.sh
    修改里面的第71行 11|12|13|14)参淹,就是添加你所用的NDK版本)
    下載完同樣配置環(huán)境變量:
export ANDROID_NDK=/home/jesen/Android/ndk/android-ndk-r14b
export PATH=$PATH:${ANDROID_NDK}
export ANDROID_NDK

二、編譯ijkplayer源碼

  • 進入源碼目錄乏悄,執(zhí)行拉取ffmpeg:
sudo ./init-android.sh
  • 拉取openssl:
    Android系統(tǒng)自帶的播放器也是不支持https協(xié)議視頻的懈万,ijkplayer需要支持 Https 協(xié)議執(zhí)行如下命令
./init-android-openssl.sh

*進入 contrib 目錄,編譯各個平臺的編譯 openssl

cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all
  • 回到前面宵睦,進入config目錄,配置ffmpeg編譯參數(shù):
cd config
rm module.sh
ln -s module-default.sh module.sh 

編譯 ffmpeg 解碼庫

./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

編譯JNI代碼

cd ..
./compile-ijk.sh all

最后得到的產物在 二級目錄:xxx/android/ijkplayer下面吴叶,這是一個androidStudio工程捆姜,包含各個庫和demo:


Peek 2021-06-04 14-44.png

三、運行效果

將該項目拷貝到本地AndroidStudio目錄下识啦,import 進AS。
實際上沒有像網(wǎng)上說的一導入就運行了神妹。實際上因為代碼構建版本太低颓哮,example這個module會報很多錯誤。

我的Gradle版本:

AndroidStudio: 3.14
Android Gradle Plugin Version 3.1.4
Gradle Version 6.5

可能需要修改gradle依賴:
compile to implementation
all64Compile to all64Implementation

  • 錯誤1:
    'All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com'
    解決:
    flavorDimensions rootProject.ext.versionName
defaultConfig {
        applicationId "tv.danmaku.ijk.media.example"
        minSdkVersion 9
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
        flavorDimensions rootProject.ext.versionName 
        ...
}
  • 錯誤2:
    Peek 2021-06-03 19-28.png

兩個@@資源引用錯誤鸵荠,改為一個@

  • 錯誤3:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/tv.danmaku.ijk.media.example-1/base.apk"],nativeLibraryDirectories=[/data/app/tv.danmaku.ijk.media.example-1/lib/x86, /system/lib, /vendor/lib]]] couldn't find "libijkffmpeg.so"
        at java.lang.Runtime.loadLibrary0(Runtime.java:984)

實際上libijkffmpeg.so已經被引入了冕茅,這種錯誤的原因是手機是64位的,我們的apk是32位,構建的時候需要注意構建64位apk:


Peek 2021-06-04 15-26.png

效果:


ezgif-1-39e2623c0917.gif
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末姨伤,一起剝皮案震驚了整個濱河市哨坪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乍楚,老刑警劉巖当编,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異徒溪,居然都是意外死亡忿偷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門臊泌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲤桥,“玉大人,你說我怎么就攤上這事渠概〔璧剩” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵播揪,是天一觀的道長贮喧。 經常有香客問我,道長剪芍,這世上最難降的妖魔是什么塞淹? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮罪裹,結果婚禮上饱普,老公的妹妹穿的比我還像新娘。我一直安慰自己状共,他們只是感情好套耕,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峡继,像睡著了一般冯袍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碾牌,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天康愤,我揣著相機與錄音,去河邊找鬼舶吗。 笑死征冷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的誓琼。 我是一名探鬼主播检激,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼肴捉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叔收?” 一聲冷哼從身側響起齿穗,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饺律,沒想到半個月后窃页,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡蓝晒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年腮出,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芝薇。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡胚嘲,死狀恐怖,靈堂內的尸體忽然破棺而出洛二,到底是詐尸還是另有隱情馋劈,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布晾嘶,位于F島的核電站妓雾,受9級特大地震影響,放射性物質發(fā)生泄漏垒迂。R本人自食惡果不足惜械姻,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望机断。 院中可真熱鬧楷拳,春花似錦、人聲如沸吏奸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奋蔚。三九已至她混,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泊碑,已是汗流浹背坤按。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留馒过,地道東北人臭脓。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像沉桌,于是被迫代替她去往敵國和親谢鹊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內容