ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究

马肤

温馨提示:这篇文章已超过474天没有更新,请注意相关的内容是否还可用!

摘要:ExoPlayer是一款在Android平台上广泛使用的媒体播放器框架,通过集成AndroidX Media3库,它得到了进一步的增强。ExoPlayer扩展了ffmpeg的功能,实现了音频软解码。这意味着它能够更有效地处理音频数据,提高音质并优化性能。这一改进对于音频处理和播放的需求较高的应用来说,将带来更好的用户体验。

1、Ubuntu 20.04.4 LTS 操作系统

2、Android NDK 版本 r26C

3、配置好SDK和JDK 17.0.1的Android Studio 2023.1.1

4、ffmpeg 6.0 的源码

5、ExoPlayer的源码,版本为AndroidX Media release分支

操作步骤

1. 下载ExoPlayer源码

目前官方已废弃Exopler2,相关代码已迁移到AndroidX Media,请通过以下命令下载:

使用git clone命令克隆AndroidX Media的GitHub仓库git clone https://github.com/androidx/media

进入媒体目录并设置FFMPEG_MODULE_PATH变量,指向ExoPlayer中的ffmpeg模块路径。

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第1张

2. 下载NDK

可以从官网下载NDK或通过SDK Manager安装,下载完成后,解压并设置NDK_PATH变量。

3. 设置编译平台

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第2张

对于Linux系统,HOST_PLATFORM="linux-x86_64"

对于Mac系统,HOST_PLATFORM="darwin-x86_64"

4. 设置最小支持Android版本

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第3张

通常设置为项目的minSDK版本,NDKr26最小支持SDK版本为21,因此ANDROID_ABI可设置为23。

5. 下载ffmpeg源码

克隆ffmpeg的源码库并设置FFMPEG_PATH变量。

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第4张

6. 配置解码器格式

根据自己的需求设置解码格式,具体支持的解码格式请参考官方文档。

7. 关联ffmpeg源码

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第5张

将ExoPlayer源码中的ffmpeg模块jni与ffmpeg源码关联。

8. 编译ffmpeg

执行提供的build_ffmpeg.sh脚本,编译ffmpeg源码,成功后,会在ffmpeg目录下生成一个android-libs目录。

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第6张

9. 编译生成Android项目依赖的aar包

在ExoPlayer项目目录下执行提供的命令,编译生成aar包,成功后,会在指定目录生成aar包。

10. 项目使用

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第7张

将生成的aar包复制到项目libs目录,并在app下的build.gradle文件中引用该aar包,然后自定义DefaultRenderersFactory,并在构造ExoPlayer实例时传入,若日志中有ffmpeg相关信息,代表加载成功。

常见问题

1、Shell变量属于临时设置,只在当前窗口生效,运行build_ffmpeg.sh脚本时,请注意查看变量信息是否正确。

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第8张

2、编译ffmpeg源码和生成aar包时,NDK版本最好保持一致,以避免生成aar包时出现错误。

3、若下载Gradle和同步Maven库的速度较慢或超时,可以考虑设置国内镜像源,如参照Android Studio配置腾讯镜像地址。

4、详细教程可参照官方开发者指南README.md。

ExoPlayer(AndroidX Media3) 扩展ffmpeg实现音频软解码,ExoPlayer(AndroidX Media3)结合ffmpeg实现音频软解码功能探究 第9张


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码