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

media3 exoplayer 扩展解码库在这里 take it , please !

Media3 ExoPlayer 扩展解码库介绍

请注意,本文讨论的是 Media3 ExoPlayer 而不是 Google ExoPlayer2。详细参考:Media3 ExoPlayer 迁移指南
文章最后提供了已经编译好的AAR文件,直接引用即可!!!

为什么选择 ExoPlayer

使用过 ExoPlayer 的开发者都会发现,相比原生 MediaPlayer,ExoPlayer 在使用体验上更加友好。这是因为 ExoPlayer 对状态的要求不像原生 MediaPlayer 那么严格,如果在不同状态下调用某些方法,原生 MediaPlayer 可能会导致崩溃。详细参考:Android MediaPlayer 正确使用姿势

支持的视频格式

尽管 ExoPlayer 在网络流支持方面表现优异,但在某些情况下,它支持的视频格式可能不如原生 MediaPlayer 多。原因是两者都使用了系统的解码库 MediaCodec,但如果平台进行了某些定制,原生 MediaPlayer 的解封装能力可能会更强。

扩展解码能力

幸运的是,ExoPlayer 提供了扩展解码能力的功能,虽然实现起来相对复杂,需要自己编译扩展库。

官方已经提供的扩展库包括:

  • decoder_av1(视频解码)
  • decoder_ffmpeg(音频解码)
  • decoder_flac(音频解码)
  • decoder_midi(音频相关,无需编译,直接引用)
  • decoder_opus(音频解码)
  • decoder_vp9(视频解码)

从上面可以看出,ffmpeg 已经包括了 decoder_flacdecoder_opus 的解码能力。详情请参考:支持的格式页面

因此,实际上只需要编译并引用 decoder_vp9decoder_av1decoder_ffmpeg 这三个扩展库,就能获得官方提供的全部解码能力。

编译示例:FFmpeg 音频解码库

下面以 FFmpeg 音频解码库为例,介绍如何编译和使用扩展库。

Let’s start

  1. 克隆 Media3 项目

    git clone https://github.com/androidx/media.git
    
  2. 首先要把整个media3项目弄下来,还要准备Android ndk和sdk独立版就行了。

  3. 手动构建FFmpeg库,以便gradle可以在APK中捆绑FFmpeg二进制文件,设置以下shell变量:

cd "<path to project checkout>"
FFMPEG_MODULE_PATH="$(pwd)/libraries/decoder_ffmpeg/src/main"
  1. 下载安卓NDK并在shell变量中设置它的位置。这个构建配置已经在NDK r26b上测试过了(如果安卓_ABI小于21的话就是r23c)。
NDK_PATH="<path to Android NDK>"
  1. 设置主机平台(对于Mac OS X使用“darwin-x86_64”):
HOST_PLATFORM="linux-x86_64"
  1. 为本机代码设置ABI版本(通常等于minSdk,不得超过它):
ANDROID_ABI=21
  1. 获取FFmpeg并检查一个适当的分支。我们不能保证与所有版本的FFmpeg兼容。我们目前推荐6.0版:
cd "<preferred location for ffmpeg>" && \
git clone git://source.ffmpeg.org/ffmpeg && \
cd ffmpeg && \
git checkout release/6.0 && \
FFMPEG_PATH="$(pwd)"
  1. 将解码器配置为包括。参见支持的格式页面,了解可用解码器的详细信息以及它们支持的格式。 详细:支持的格式页面
ENABLED_DECODERS=(vorbis opus flac)

我编译已经包括了ffmpeg支持所有格式了啊!!

  1. 在FFmpeg模块中添加到FFmpeg源代码的链接jni目录。
cd "${FFMPEG_MODULE_PATH}/jni" && \
ln -s "$FFMPEG_PATH" ffmpeg
  1. 执行build_ffmpeg.sh为构建FFmpegarmeabi-v7a, arm64-v8a, x86和x86_64。如果您需要为不同的体系结构构建,可以编辑该脚本:
cd "${FFMPEG_MODULE_PATH}/jni" && \
./build_ffmpeg.sh \"${FFMPEG_MODULE_PATH}" "${NDK_PATH}" "${HOST_PLATFORM}" "${ANDROID_ABI}" "${ENABLED_DECODERS[@]}"

编译完成后生成 AAR 包

编译完成后,可以使用 :assembleRelease 任务生成 AAR 包。

./gradlew :libraries:decoder_ffmpeg:assembleRelease

项目引用

项目中引用编译好的 AAR 包非常方便,因为 ExoPlayer 会通过反射自动加载扩展库,所以只需将 AAR 包加入项目即可。

编译好的扩展库下载地址

接下来是编译好的扩展库:
decoder_vp9
decoder_av1
decoder_ffmpeg

下载地址:https://download.csdn.net/download/mhhyoucom/89900256

http://www.lryc.cn/news/465881.html

相关文章:

  • 在Xshell中查看日志文件详情
  • 深入理解计算机系统--计算机系统漫游
  • 哪些指标可以用来评估精益生产现场管理和改善的效果?
  • 在 Linux 系统上安装免费杀毒软件
  • 第 7 章:Vue UI 组件库
  • 【SQL】SQL用户管理和权限
  • STM32应用详解(5)USART串口初始化
  • 渗透实战 JS文件怎么利用
  • 啥是CTF?新手如何入门CTF?
  • 解决python多环境冲突问题
  • Aatrox-Bert-VITS2部署指南
  • 计算不停歇,百度沧海数据湖存储加速方案 2.0 设计和实践
  • vue2项目 实现上边两个下拉框,下边一个输入框 输入框内显示的值为[“第一个下拉框选中值“ -- “第二个下拉框选中的值“]
  • el-radio 点击报错 Element with focus: inputAncestor with aria-hidden....
  • 集成平台,互联互通平台,企业大数据平台建设方案,技术方案(Word原件 )
  • 宠物用品交易网站开发:SpringBoot技术详解
  • 解构OpenAI swarm:利用Cursor进行框架分析与示例运行
  • 基于springboot的秦皇岛旅游景点管理系统 设计与实现
  • uniapp展示本地swf格式文件,实现交互
  • ZYNQ:流水灯实验
  • StratoVirt中vCPU拓扑(SMP)配置与实现的深度解析
  • Xml 相关注解使用
  • 本地时间与时区时间转化(以Helpdesk和BPI Challenge 2012为例)
  • Golang | Leetcode Golang题解之第482题秘钥格式化
  • 代码随想录 -- 贪心 -- 无重叠区间
  • sql server xml
  • WPF中MVVM的应用举例
  • 编程题 7-24 约分最简分式【PAT】
  • 尚硅谷大数据Flink1.17实战教程-笔记04【Flink DataStream API】
  • MySQL常见优化策略