用的播放器框架是ijkplayer 然后就去https://github.com/Bilibili/ijkplayer的issue里找答案发现很多人遇到了这个问题,最终还是想通过编译定制化so的方式解决。
践行解决方案
按照官方文档编译android版so的流程
$ git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
$ cd ijkplayer-android
$ git checkout -B latest k0.8.8
$ ./init-android.sh
//下载openssl
$ ./init-android-openssl.sh
$ 修改config/module.sh添加你要支持的编码格式
$ cd android/contrib
//编译ssl,用于支持https
$ ./compile-openssl.sh clean
$ ./compile-openssl.sh all
$ ./compile-ffmpeg.sh clean
$ ./compile-ffmpeg.sh all
$ cd ..
$ ./compile-ijk.sh all
其它步骤命令都是死的 只有第五步是需要你自己添加的
module.sh默认是软连接的module-lite.sh 我编译出来的so差不多4m
在该文件中添加了三种解码格式
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"
---------------------
修改完成进入到android/contrib后,此时编译可能会提示要配置ndk,在终端输入
export ANDROID_NDK=/Users/michaelx/Library/Android/sdk/ndk-bundle
export ANDROID_SDK=/Users/michaelx/Library/Android/sdk
执行第7 & 8步操作编译ffmpeg 官方文档默认是编译所有架构的 这里我只选择了armv7a
./compile-ffmpeg.sh armv7a
编译完这个之后返回上一级继续执行第10步操作 ./compile-ijk.sh all
同级目录有一个ijkplayer目录,这是一个标准到android项目,编译完的so库会输出到ijkplayer/ijkplayer-armv7a/src/main/libs
等这个编译完成之后整个编译就算完成了。