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库拷到你的项目中即可。到此就结束了。

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