ijkplayer 編譯總結

    在通過多次的嘗試和多方查資料後,最終成功的編譯了ijkplayer,並且添加了自己想要的mp2的音頻編碼。一開始的時候以爲是一件比較難的事情,最後編譯成功後,還是覺得比較的簡單。

    編譯環境: 系統 ubuntu   ,ndk 14  ,sdk ,git , yasm

    我只在ubuntu的環境下編譯,並沒有在其他的環境下進行嘗試,在環境中,最重要的是ndk的版本,需要在10 -14之間,我用了18 ,19 ,都失敗,並且最低的ndk版本也是需要10以上。

    這裏是ndk舊版的下載地址,可以下載ndk14的版本:ndk舊版下載地址

    將下載後的ndk解壓到某個路徑下,可以選擇配置sdk和ndk的環境變量,也可以選擇在我們編譯ijkplayer的時候,需要用到的init-android.sh ,compile-ffmpeg.sh ,compile-ijk.sh ,的頭部添加sdk和ndk的環境配置。

    例如我們的sdk和ndk的環境變量配置爲如下:

export ANDROID_SDK=/***/***/***/android/sdk
export PATH=$ANDROID_SDK/platform-tools:$PATH
export PATH=$ANDROID_SDK/tools:$PATH
export ANDROID_NDK=/***/***/***/android/ndk14/android-ndk-r14b
export PATH=$ANDROID_NDK:$PATH

    然後可以在compile-ffmpeg.sh中做如下的添加

    

    這樣在編譯的時候,就會自動的找到sdk和ndk的位置。

    git 和 yasm的安裝可以通過如下方式

sudo apt-get install git
sudo apt-get install yasm

    接下來是正題。這裏是github中的ijkplayer的項目的地址 ijkplayer項目地址,在編譯或是使用的過程中遇到的問題,都可以在這項目中的issues中查詢。

    以下是官方提供的編譯的流程,我也是通過這個流程並且編譯成功。

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8

./init-android.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

cd ..
./compile-ijk.sh all

    通常這樣編譯就已經可以了,但是當我們想要兼容更多的視頻格式或是音頻的格式的時候,我們就需要修改 ijkplayer-android/config 下的文件。在這個路徑下有4個文件。一下是官方提供的。

#如果想要最多的類型,用module-default.sh,生成module.sh
cd config
rm module.sh
ln -s module-default.sh module.sh
cd ..
cd android/contrib
sh compile-ffmpeg.sh clean

#如果你不想要編譯出來的文件太大,想要兼容少的播放格式,可以用module-lite-hevc.sh生成module.sh
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd ..
cd android/contrib
sh compile-ffmpeg.sh clean

#如果你想要最少的兼容,可以用module-lite.sh生成module.sh(默認的編譯使用方式)
cd config
rm module.sh
ln -s module-lite.sh module.sh
cd ..
cd android/contrib
sh compile-ffmpeg.sh clean

    需要注意的是module-default.sh ,和module-lite-hevc.sh 如果你要使用這兩種方式,需要在這兩個文件的最後面加入以下內容,否則會報錯

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

    如果,我們想要加入更多的編碼的格式,就需要在生成module.sh文件後,在module.sh 文件中添加相應格式配置,如我想要的是 mp2和mpeg4和ac3,我需要在module.sh中添加如下配置。

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mpeg4"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp2*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=ac3"

    所以,總的編譯的流程是

1: git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
2: cd ijkplayer-android
3: git checkout -B latest k0.8.8

4: (如果要添加新的編碼,在這個步驟生成並修改module.sh文件)

5: ./init-android.sh

6: cd android/contrib
7: ./compile-ffmpeg.sh clean
8: ./compile-ffmpeg.sh all

9:  cd ..
10: ./compile-ijk.sh all

    在編譯成功後的項目打開,還是需要修改一些問題,才能運行起來,如下是我總結的幾個問題。

    1.build.gradle 文件中的 compile 改爲api  all32Compile  改爲 all32Implementation
    2.demo中有個xml文件有問題多了一個@,編譯的時候會報錯,修改下就可以了
    3項目中的build.gradle的 google() 方法要考到allprojects-》repositories中
    4.項目中的 compileSdkVersion = 27
    buildToolsVersion = "27.0.3"    25.0.3 要改成27.0.3版本
    5.在項目ijkplayer-example的build.gradle 的 defaultConfig 中添加flavorDimensions "versionCode"

    最後,如果你想要導入一整個自己編譯後的項目,可以將你想要用到的so庫如ijkplayer-armv7a libs中的文件拷到ijkplayer-java下新建的libs中,然後通過下面的步驟生成aar,集成到自己的項目中。

    

    第二種方式是:

    在你的項目中引入  

api 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'

    然後把你編譯的項目中的ijkplayer-arm64 和ijkplayer-armv7a 中的lib中的so庫拷到你的項目中即可。到此就結束了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章