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_flac 和 decoder_opus 的解码能力。详情请参考:支持的格式页面
因此,实际上只需要编译并引用 decoder_vp9、decoder_av1 和 decoder_ffmpeg 这三个扩展库,就能获得官方提供的全部解码能力。
编译示例:FFmpeg 音频解码库
下面以 FFmpeg 音频解码库为例,介绍如何编译和使用扩展库。
Let’s start
-
克隆 Media3 项目
git clone https://github.com/androidx/media.git -
首先要把整个media3项目弄下来,还要准备Android ndk和sdk独立版就行了。
-
手动构建FFmpeg库,以便gradle可以在APK中捆绑FFmpeg二进制文件,设置以下shell变量:
cd "<path to project checkout>"
FFMPEG_MODULE_PATH="$(pwd)/libraries/decoder_ffmpeg/src/main"
- 下载安卓NDK并在shell变量中设置它的位置。这个构建配置已经在NDK r26b上测试过了(如果安卓_ABI小于21的话就是r23c)。
NDK_PATH="<path to Android NDK>"
- 设置主机平台(对于Mac OS X使用“darwin-x86_64”):
HOST_PLATFORM="linux-x86_64"
- 为本机代码设置ABI版本(通常等于minSdk,不得超过它):
ANDROID_ABI=21
- 获取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)"
- 将解码器配置为包括。参见支持的格式页面,了解可用解码器的详细信息以及它们支持的格式。 详细:支持的格式页面
ENABLED_DECODERS=(vorbis opus flac)
我编译已经包括了ffmpeg支持所有格式了啊!!
- 在FFmpeg模块中添加到FFmpeg源代码的链接jni目录。
cd "${FFMPEG_MODULE_PATH}/jni" && \
ln -s "$FFMPEG_PATH" ffmpeg
- 执行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
相关文章:
media3 exoplayer 扩展解码库在这里 take it , please !
Media3 ExoPlayer 扩展解码库介绍 请注意,本文讨论的是 Media3 ExoPlayer 而不是 Google ExoPlayer2。详细参考:Media3 ExoPlayer 迁移指南 文章最后提供了已经编译好的AAR文件,直接引用即可!!! 为什么选…...
在Xshell中查看日志文件详情
学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…...
深入理解计算机系统--计算机系统漫游
对于一段最基础代码的文件hello.c,解释程序的运行 #include <stdio.h>int main() {printf ( "Hello, world\n") ;return 0; }1.1、信息就是位上下文 源程序是由值 0 和 1 组成的位(比特)序列,8 个位被组织成一组…...
哪些指标可以用来评估精益生产现场管理和改善的效果?
在探讨如何评估精益生产现场管理和改善效果时,我们需要关注一系列关键指标,这些指标不仅反映了生产流程的效率,还体现了质量和客户满意度的提升。详细如天行健企业管理咨询公司下文所述: 1. 生产效率 每小时生产数量(…...
在 Linux 系统上安装免费杀毒软件
选择合适的免费杀毒软件 Linux 上流行的免费杀毒软件: . ClamAV:最为知名的开源免费杀毒软件,支持多种 Linux 发行版。它可以扫描病毒、恶意软件以及 Windows 系统上的威胁。 Sophos Antivirus for Linux:虽然是商业软件ÿ…...
第 7 章:Vue UI 组件库
1. PC 端常用 UI 组件库 Element UI:https://element.eleme.cnIView UI:https://www.iviewui.com 2. 移动端常用 UI 组件库 Vant:https://youzan.github.io/vantCube UI:https://didi.github.io/cube-uiMint UI:htt…...
【SQL】SQL用户管理和权限
🎄 管理用户 📢 用来管理数据库用户、控制数据库的访 问权限 ⭐ 查询用户 📢 mysql数据库中的user表中,存放了当前数据库中所有的用户和用户的权限 use mysql; select * from user; 📢 其中Host代表当前用户访问的主机, 如果为…...
STM32应用详解(5)USART串口初始化
文章目录 一、USART初始化二、代码说明1.原理图2.main函数3.USART串口初始化函数4.代码整体结构 三、USART串口初始化总结 一、USART初始化 所谓的对USART进行初始化,就是对USART固件库函数的调用,来完成串口(USART)的设置,比如设置波特率、…...
渗透实战 JS文件怎么利用
1.前言 关于JS在渗透测试中的关键作用,想必不用过多强调,在互联网上也有许多从JS中找到敏感信息从而拿下关键系统的案例。大部分师傅喜欢使用findsomething之类的浏览器插件,也有使用诸如Unexpected.information以及APIFinder之类的Burp插件…...
啥是CTF?新手如何入门CTF?
CTF是啥 CTF 是 Capture The Flag 的简称,中文咱们叫夺旗赛,其本意是西方的一种传统运动。在比赛上两军会互相争夺旗帜,当有一方的旗帜已被敌军夺取,就代表了那一方的战败。在信息安全领域的 CTF 是说,通过各种攻击手法…...
解决python多环境冲突问题
解决Python多环境冲突问题,以下是一些详细的解决方法: 1. 使用虚拟环境 虚拟环境允许你为每个项目创建独立的Python环境,每个环境可以有自己的库和依赖。常用的工具包括venv、virtualenv和pipenv。 使用 venv venv 是Python 3.3及以上版本…...
Aatrox-Bert-VITS2部署指南
一、模型介绍 【AI 剑魔 ①】在线语音合成(Bert-Vits2),将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者:Xz 乔希 https://space.bilibili.com/5859321 声音归属:Riot Games《英雄联盟》暗裔剑魔亚托克斯 …...
计算不停歇,百度沧海数据湖存储加速方案 2.0 设计和实践
本文整理自百度云智峰会 2024 —— 云原生论坛的同名演讲。 今天给大家介绍下百度沧海存储团队在数据湖加速方面的工作进展情况。 数据湖这个概念,从 2012 年产生到现在已经有十余年的时间,每家公司对它内涵的解读都不太一样。但是数据湖的主要存储底座…...
vue2项目 实现上边两个下拉框,下边一个输入框 输入框内显示的值为[“第一个下拉框选中值“ -- “第二个下拉框选中的值“]
效果: 思路: 采用vue中 [computed:] 派生属性的方式实现联动效果,上边两个切换时,下边的跟随变动 demo代码: <template><div><!-- 第一个下拉框 --><select v-model"firstValue"><option v-for"option in options" :key&q…...
el-radio 点击报错 Element with focus: inputAncestor with aria-hidden....
一、序言 浏览器版本影响的问题(与代码无关,可能是web或浏览器相关协议更新导致),不影响功能的使用. 翻译:元素上的Blocked aria-hidden,因为刚刚接收焦点的元素不能对辅助技术用户隐藏。避免在焦点元素或…...
集成平台,互联互通平台,企业大数据平台建设方案,技术方案(Word原件 )
企业集成平台建设方案及重点难点攻坚 基础支撑平台主要承担系统总体架构与各个应用子系统的交互,第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上,实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台,提出了以下要求&…...
宠物用品交易网站开发:SpringBoot技术详解
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
解构OpenAI swarm:利用Cursor进行框架分析与示例运行
解构OpenAI SWARM:利用Cursor进行框架分析与示例运行 1. 引言 在AI技术日新月异的今天,OpenAI再次为我们带来了惊喜。SWARM框架作为其最新研究成果,正在开创多智能体协作的新纪元。本文将带您深入探索这一框架,通过Cursor工具进行代码分析,并手把手教您安装运行SWARM。无论您…...
基于springboot的秦皇岛旅游景点管理系统 设计与实现
博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...
uniapp展示本地swf格式文件,实现交互
概览 uniapp打包的Android项目实现本地swf格式文件的展示,并且能够进行交互 需求分析 1、因为是打包的Android项目展示本地的swf文件,首先需要拿到这个本地的swf文件路径 2、如何在uniapp的vue页面中展示swf,因为没有直接展示swf文件的标…...
Ollama在Apple Silicon上预览,性能大提升
2026年3月30日,Ollama开启在Apple silicon上的预览,由苹果MLX框架支持,解锁新性能,加速繁重工作,还在多方面有显著改进。MLX驱动,性能飞升基于Apple silicon的Ollama构建在MLX框架上,利用统一内…...
AI中混淆矩阵及其核心评估指标案例
AI中混淆矩阵及其核心评估指标案例...
2026年4月OpenClaw怎么集成?京东云小白6分钟部署及百炼APIKey配置步骤
2026年4月OpenClaw怎么集成?京东云小白6分钟部署及百炼APIKey配置步骤。OpenClaw(原Clawdbot)作为2026年主流的AI自动化助理平台,可通过阿里云轻量服务器实现724小时稳定运行,并快速接入钉钉,让AI在企业群聊…...
嵌入式系统中的累加和校验算法原理与实现
1. 累加和校验算法概述在嵌入式系统开发中,数据通信的可靠性至关重要。想象一下,当你通过无线模块控制一台工业机器人时,如果传输的运动指令数据出现错误,可能导致机械臂做出完全不可预测的动作,轻则损坏产品ÿ…...
MediaPipe Pose镜像体验:CPU也能毫秒级检测,无需GPU免配置
MediaPipe Pose镜像体验:CPU也能毫秒级检测,无需GPU免配置 1. 引言:CPU上的实时姿态检测革命 在计算机视觉应用中,人体姿态检测一直是个热门领域。从健身应用的动作分析到虚拟试衣的体型测量,这项技术正在改变我们与…...
H5-Dooring零基础入门终极指南:无需编码制作专业H5页面
H5-Dooring零基础入门终极指南:无需编码制作专业H5页面 【免费下载链接】h5-Dooring H5 Page Maker, H5 Editor, LowCode. Make H5 as easy as building blocks. | 让H5制作像搭积木一样简单, 轻松搭建H5页面, H5网站, PC端网站,LowCode平台. 项目地址: https://g…...
基于SpringBoot + Vue的养老院管理系统(角色:家属、护工、管理员)
文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...
5分钟学会使用OrigamiSimulator:实时WebGL折纸模拟器完全指南
5分钟学会使用OrigamiSimulator:实时WebGL折纸模拟器完全指南 【免费下载链接】OrigamiSimulator Realtime WebGL origami simulator 项目地址: https://gitcode.com/gh_mirrors/or/OrigamiSimulator OrigamiSimulator是一款基于WebGL的实时折纸模拟器&#…...
GD32F4xx GPIO实战:用按键控制LED,详解输入输出配置与防抖处理
GD32F4xx GPIO实战:从按键消抖到LED控制的完整设计指南 在嵌入式开发中,GPIO(通用输入输出)是最基础却至关重要的外设模块。对于GD32F4xx系列微控制器而言,掌握GPIO的高效配置不仅关乎功能实现,更直接影响系…...
如何高效使用猫抓cat-catch:5个关键技巧完全指南
如何高效使用猫抓cat-catch:5个关键技巧完全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到这样的情况:…...
