Exoplayer2源码编译FFmpeg拓展模块实现音频软解码

在前面文章最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程中介绍了最新版本的Exoplayer(androidx.Media3)编译FFmpeg模块的流程,有就是media3版本的explayer最低支持的sdk版本是21也就是Android5.x,但是市面上还是有很多IOT设备是很老的android4.4(sdk=19)的,需要兼容的话就只能使用Exoplayer2来实现播放功能。所以就需要在Exoplayer2源码基础上编译FFmpeg模块,基本流程跟之前编译Media3版本差不多,但有些差异和坑,这里记录一下。

一.源码区别:

这块我主要用的是Exoplayer2+FFMPEG4.3

exoplayer2的下载地址:https://github.com/google/ExoPlayer

exoplayer3的下载地址:https://github.com/androidx/media

ffmpeg下载地址:https://github.com/FFmpeg/FFmpeg/branches (这是分支地址,找到4.3下载(使用exoplayer3的话,建议用6.0版本或以上)

二.配置编译环境

主要就是下面这几个,具体设置方式参考前面文章即可。

【FFMPEG_MODULE_PATH】 :exoplayer源码中ffmpeg模块路径

【NDK_PATH】:ndk路径

【HOST_PLATFORM】:编译平台环境-x86

【ANDROID_ABI】:Android最低支持版本,这里设置19

【FFMPEG_PATH】:FFmpeg自身源码路径

【ENABLED_DECODERS】:需要支持的音频格式

三.编译FFmpeg源码

ffmpeg模块路径与media3中不一样,ExoPlayer-release-v2\extensions\ffmpeg

Exoplayer源码中已经帮我们配好了编译脚本build_ffmpeg.sh,执行即可,带上之前配置的环境变

复制代码
//在Exoplayer源码decoder_ffmpeg模块,jni目录下执行编译
 
./build_ffmpeg.sh \ "${FFMPEG_MODULE_PATH}" "${NDK_PATH}" "${HOST_PLATFORM}" "${ANDROID_ABI}" "${ENABLED_DECODERS[@]}"

量坑一:编译报错

编译链armv7a-linux-androideabi16-clang找不到,由于使用的ndk版本26较高,没有androideabi-16低版本了,修改编译脚本build_ffmpeg.sh对应位置为androideabi-21即可。

四.编译ffmpge扩展模块打包成aar文件供android调用

进入到Exoplayer源码更目录执行编译打包指令

复制代码
./gradlew extension-ffmpeg:assembleRelease

坑二:编译报错找不到Android SDK,或者NDK版本与前面编译ffmpeg时使用的不一致,导致各种错误

解决办法:在Exoplayer2源码项目跟目录增加sdk和ndk路径配置文件local.properties,注意需要根据自己放置sdk和ndk的目录位置配置

复制代码
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Thu Feb 20 11:36:04 CST 2025

#根据自己的目录修改
sdk.dir=/home/xxx/android-sdk 
ndk.dir=/home/xxx/android-ndk-r26d

五.Android项目中使用aar实现音频软解码

复制生成的aar包到项目libs目录,修改app下的build.gradle文件,引用aar包

implementation(files("libs/extension-ffmpeg-release.aar"))

自定义DefaultRenderersFactory,构造ExoPlayer实例时传入,日志中有ffmpeg相关信息代表加载成功,具体实现方法参考前面文章即可。

相关推荐
假装我不帅1 小时前
ffmpeg操作mp3去除封面信息
ffmpeg
2603_949462102 小时前
Flutter for OpenHarmony社团管理App实战:预算管理实现
android·javascript·flutter
王泰虎4 小时前
安卓开发日记,因为JCenter 关闭导致加载不了三方库应该怎么办
android
mit6.8246 小时前
[solution] 关闭硬件加速解决导出视频绿屏
音视频
2601_949543017 小时前
Flutter for OpenHarmony垃圾分类指南App实战:主题配置实现
android·flutter
2601_949833398 小时前
flutter_for_openharmony口腔护理app实战+知识实现
android·javascript·flutter
晚霞的不甘8 小时前
Flutter for OpenHarmony从基础到专业:深度解析新版番茄钟的倒计时优化
android·flutter·ui·正则表达式·前端框架·鸿蒙
鸟儿不吃草9 小时前
android的Retrofit请求https://192.168.43.73:8080/报错:Handshake failed
android·retrofit
Minilinux20189 小时前
Android音频系列(09)-AudioPolicyManager代码解析
android·音视频·apm·audiopolicy·音频策略
李子红了时9 小时前
【无标题】
android