欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ijkplayer编译支持HTTPS和采坑记录

程序员文章站 2022-04-11 13:49:03
...

编译之前要准备好编译环境:
sdk
ndk(这个地方希望是用你ndk14)
再次不在赘述,只是贴出我的环境变量:

#android adb
export PATH=${PATH}:/softdata/android-sdk-macosx/platform-tools:/softdata/android-sdk-macosx/tools
export PATH=/softdata/android-sdk-macosx/android-ndk-r14b:$PATH
ANDROID_NDK=/softdata/android-sdk-macosx/android-ndk-r14b

测试NDK是否成功只需要在控制台打出ndk-build -v
ijkplayer编译支持HTTPS和采坑记录
测试adb有没有配置成功可以使用adb version
ijkplayer编译支持HTTPS和采坑记录

1. clone ijkplayer 源码

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

2. 编译之前

编译前选择你的配置
选择自动化编译时的一些配置选项,比如支持的协议,音视频类型等,官方给我们提供了三个模板。

可以打开config/目录下config/module.sh看看,enable启用,disable禁用

module-default.sh
module-lite-hevc.sh
module-lite.sh

If you prefer more codec/format

cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
sh compile-ffmpeg.sh clean

If you prefer less codec/format for smaller binary size (include hevc function)

cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib
sh compile-ffmpeg.sh clean

If you prefer less codec/format for smaller binary size (by default)

cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib
sh compile-ffmpeg.sh clean

官方默认建议选择的是 module-lite.sh,可以根据自己的需求选择

cd config
rm module.sh
ln -s module-lite.sh module.sh

3. 开始编译

执行初始化
初始化会下载各种包,尽量选择在良好的网络环境下╮( ̄ ̄)╭

cd ..
./init-android.sh

初始化OpenSSL

./init-android-openssl.sh

编译OpenSSL和FFmpeg
首先清除一波

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

编译OpenSSL:可以选择不同版本,全量编译耗时更长,但最好选择全量编译,编译完成后再根据需求选择要使用的包。

./compile-openssl.sh all

编译FFmpeg,同样的

./compile-ffmpeg.sh all

// 如果要选择特定的架构: ./compile-ffmpeg.sh armv7a | armv5
最后编译ijkplayer

./compile-ijk.sh all

到此我们编译就完成了,so库已经生成他们的位置在src/main/libs下了,需要什么样的cpu架构去对应的文件夹下去找就可以了
ijkplayer编译支持HTTPS和采坑记录
下面就是把编好的so导入到项目,我们之间导入是利用下面的方式导入

 # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'(现在这行可以去掉了)

在build.gradle中添加下边的代码
ijkplayer编译支持HTTPS和采坑记录
然后再在app下创建libs文件夹,把生成的类库添加到libs就可以了
ijkplayer编译支持HTTPS和采坑记录

编译IJKPlayer时,踩坑实录

1. You need the NDKr10e or later
build on Linux x86_64
ANDROID_NDK=/home/czl/Android/android-ndk-r16b
IJK_NDK_REL=16.1.4479499
You need the NDKr10e or later

解决办法:

下载低版本ndk,NDK下载 【下载版本为14的(亲测成功)】
2.在编译ffmpeg的时候报错的解决办法
compilation terminated.
make: *** [libavfilter/af_acopy.o] Error 1
make: *** Waiting for unfinished jobs....
make: *** [libavfilter/af_acrusher.o] Error 1

解决办法

仔细阅读module-lite.h 原来在最下面有一行配置:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
把这行复制到module-default.sh或者module-lite-hevc.sh 的最后面就可以了