当前位置: 首页 > 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

相关文章:

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

Media3 ExoPlayer 扩展解码库介绍 请注意&#xff0c;本文讨论的是 Media3 ExoPlayer 而不是 Google ExoPlayer2。详细参考&#xff1a;Media3 ExoPlayer 迁移指南 文章最后提供了已经编译好的AAR文件&#xff0c;直接引用即可&#xff01;&#xff01;&#xff01; 为什么选…...

在Xshell中查看日志文件详情

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…...

深入理解计算机系统--计算机系统漫游

对于一段最基础代码的文件hello.c&#xff0c;解释程序的运行 #include <stdio.h>int main() {printf ( "Hello, world\n") ;return 0; }1.1、信息就是位上下文 源程序是由值 0 和 1 组成的位&#xff08;比特&#xff09;序列&#xff0c;8 个位被组织成一组…...

哪些指标可以用来评估精益生产现场管理和改善的效果?

在探讨如何评估精益生产现场管理和改善效果时&#xff0c;我们需要关注一系列关键指标&#xff0c;这些指标不仅反映了生产流程的效率&#xff0c;还体现了质量和客户满意度的提升。详细如天行健企业管理咨询公司下文所述&#xff1a; 1. 生产效率 每小时生产数量&#xff08;…...

在 Linux 系统上安装免费杀毒软件

选择合适的免费杀毒软件 Linux 上流行的免费杀毒软件&#xff1a; . ClamAV&#xff1a;最为知名的开源免费杀毒软件&#xff0c;支持多种 Linux 发行版。它可以扫描病毒、恶意软件以及 Windows 系统上的威胁。 Sophos Antivirus for Linux&#xff1a;虽然是商业软件&#xff…...

第 7 章:Vue UI 组件库

1. PC 端常用 UI 组件库 Element UI&#xff1a;https://element.eleme.cnIView UI&#xff1a;https://www.iviewui.com 2. 移动端常用 UI 组件库 Vant&#xff1a;https://youzan.github.io/vantCube UI&#xff1a;https://didi.github.io/cube-uiMint UI&#xff1a;htt…...

【SQL】SQL用户管理和权限

&#x1f384; 管理用户 &#x1f4e2; 用来管理数据库用户、控制数据库的访 问权限 ⭐ 查询用户 &#x1f4e2; mysql数据库中的user表中,存放了当前数据库中所有的用户和用户的权限 use mysql; select * from user; &#x1f4e2; 其中Host代表当前用户访问的主机, 如果为…...

STM32应用详解(5)USART串口初始化

文章目录 一、USART初始化二、代码说明1.原理图2.main函数3.USART串口初始化函数4.代码整体结构 三、USART串口初始化总结 一、USART初始化 所谓的对USART进行初始化&#xff0c;就是对USART固件库函数的调用&#xff0c;来完成串口(USART)的设置&#xff0c;比如设置波特率、…...

渗透实战 JS文件怎么利用

1.前言 关于JS在渗透测试中的关键作用&#xff0c;想必不用过多强调&#xff0c;在互联网上也有许多从JS中找到敏感信息从而拿下关键系统的案例。大部分师傅喜欢使用findsomething之类的浏览器插件&#xff0c;也有使用诸如Unexpected.information以及APIFinder之类的Burp插件…...

啥是CTF?新手如何入门CTF?

CTF是啥 CTF 是 Capture The Flag 的简称&#xff0c;中文咱们叫夺旗赛&#xff0c;其本意是西方的一种传统运动。在比赛上两军会互相争夺旗帜&#xff0c;当有一方的旗帜已被敌军夺取&#xff0c;就代表了那一方的战败。在信息安全领域的 CTF 是说&#xff0c;通过各种攻击手法…...

解决python多环境冲突问题

解决Python多环境冲突问题&#xff0c;以下是一些详细的解决方法&#xff1a; 1. 使用虚拟环境 虚拟环境允许你为每个项目创建独立的Python环境&#xff0c;每个环境可以有自己的库和依赖。常用的工具包括venv、virtualenv和pipenv。 使用 venv venv 是Python 3.3及以上版本…...

Aatrox-Bert-VITS2部署指南

一、模型介绍 【AI 剑魔 ①】在线语音合成&#xff08;Bert-Vits2&#xff09;&#xff0c;将输入文字转化成暗裔剑魔亚托克斯音色的音频输出。 作者&#xff1a;Xz 乔希 https://space.bilibili.com/5859321 声音归属&#xff1a;Riot Games《英雄联盟》暗裔剑魔亚托克斯 …...

计算不停歇,百度沧海数据湖存储加速方案 2.0 设计和实践

本文整理自百度云智峰会 2024 —— 云原生论坛的同名演讲。 今天给大家介绍下百度沧海存储团队在数据湖加速方面的工作进展情况。 数据湖这个概念&#xff0c;从 2012 年产生到现在已经有十余年的时间&#xff0c;每家公司对它内涵的解读都不太一样。但是数据湖的主要存储底座…...

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....

一、序言 浏览器版本影响的问题&#xff08;与代码无关&#xff0c;可能是web或浏览器相关协议更新导致&#xff09;&#xff0c;不影响功能的使用. 翻译&#xff1a;元素上的Blocked aria-hidden&#xff0c;因为刚刚接收焦点的元素不能对辅助技术用户隐藏。避免在焦点元素或…...

集成平台,互联互通平台,企业大数据平台建设方案,技术方案(Word原件 )

企业集成平台建设方案及重点难点攻坚 基础支撑平台主要承担系统总体架构与各个应用子系统的交互&#xff0c;第三方系统与总体架构的交互。需要满足内部业务在该平台的基础上&#xff0c;实现平台对于子系统的可扩展性。基于以上分析对基础支撑平台&#xff0c;提出了以下要求&…...

宠物用品交易网站开发:SpringBoot技术详解

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...

解构OpenAI swarm:利用Cursor进行框架分析与示例运行

解构OpenAI SWARM:利用Cursor进行框架分析与示例运行 1. 引言 在AI技术日新月异的今天,OpenAI再次为我们带来了惊喜。SWARM框架作为其最新研究成果,正在开创多智能体协作的新纪元。本文将带您深入探索这一框架,通过Cursor工具进行代码分析,并手把手教您安装运行SWARM。无论您…...

基于springboot的秦皇岛旅游景点管理系统 设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…...

uniapp展示本地swf格式文件,实现交互

概览 uniapp打包的Android项目实现本地swf格式文件的展示&#xff0c;并且能够进行交互 需求分析 1、因为是打包的Android项目展示本地的swf文件&#xff0c;首先需要拿到这个本地的swf文件路径 2、如何在uniapp的vue页面中展示swf&#xff0c;因为没有直接展示swf文件的标…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...