当前位置: 首页 > news >正文

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相关信息代表加载成功,具体实现方法参考前面文章即可。

相关文章:

  • 深度探索:直击服务器权限获取之旅
  • 快速开始React开发(一)
  • 车载测试:智能座舱测试中多屏联动与语音交互的挑战
  • OpenMCU(一):STM32F407 FreeRTOS移植
  • OpenHarmony定制子系统
  • SQL Server查询计划操作符(7.3)——查询计划相关操作符(8)
  • 预测 38 种成分与 X 蛋白的结合活性,并构建 GCN(图卷积网络)与 Transformer 双模型进行交叉验证的大致步骤
  • 企业工程项目管理系统源码:Java版源码解析
  • 扣子(Coze):重构AI时代的工作流革命
  • 利用Ollama+AnythingLLM+本地向量数据库Milvus+本地DeepSeek大模型实现知识库的搭建
  • Docker基础-自定义镜像与容器网络
  • 【MySQL】(3) 数据类型
  • 韩国互联网巨头 NAVER 如何借助 StarRocks 实现实时数据洞察
  • 【系统架构设计师】软件架构的重要性
  • STM32——串口通信 UART
  • Gartner:数据安全平台DSP提升数据流转及使用安全
  • 大白话css第九章主要聚焦于前沿技术整合、生态贡献与技术传承
  • 一文了解Conda使用
  • 数据结构:八大排序(冒泡,堆,插入,选择,希尔,快排,归并,计数)详解
  • 《HarmonyOS赋能的智能影像诊断系统安全架构与临床实践》
  • 绵阳网站建设怎么做/今日头条新闻在线看
  • 中国建设银行官网站下载/网站制作多少钱
  • 公益网站模板/网络营销客服主要做什么
  • 建设部网站水利设计资质/深圳网页设计公司
  • wordpress付费下载主题/seo排名点击软件运营
  • 救护车网站找谁做/广告公司业务推广