ExoPlayer如何使用MediaExtractor的思路

news2024/11/25 11:01:44

本文主要针对于,自己的设备解码能力(比如底层集成ffmpeg 、qti、android 、需要付费的格式等等)大于ExoPlayer自己封装的固有Extractor,基于现在Android架构通俗的来说,就是MediaPlayer可以播,但是ExoPlayer播不了的情况。

底层集成的优势在于,不需要每个app都来集成,那样每个app都非常庞大,工作繁琐也很难以统一,第三方app使用系统播放器也没有相关的能力。

ExoPlayer现在已被集成到Media3.AndroidX,但仍然没有解决此问题。

 通过寻找多年历史的蛛丝马迹,我们可以看到,是因为每台设备的解码能力不同,而且在我们实际开发中,会发现有些文件duration等一些参数存在问题,需要兼容。ExoPlayer作为一个通用播放器不可能面面俱到,故舍弃了此方案,选用了需要明确指出Extrator的方案。

ExoPlayer现版本,需要指定Extractor,或者通过ffmpeg拓展格式,但这回导致设备底层原本支持的格式会出现不支持,如果你是做自己的设备,比如手机、平板、车载等,你是明确知道能力的。

核心修改思想如下 

所以说我们想要对接底层的解码能力,就必须换掉ExoExtractor,不需要再去遍历sniff,换为通用的MediaExtractor,让其走到底层,自行去寻找分发软硬解能力。

想要既使用ExoPlayer的Api又对接底层解码能力的记录 ,我们需要改掉read填充buffer的部分

FrameworkSampleSource sampleSource = new FrameworkSampleSource(
                context, uri, null);

        MediaCodecVideoTrackRenderer videoRenderer = new MediaCodecVideoTrackRenderer(context,
                sampleSource, MediaCodecSelector.DEFAULT, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT, 5000,
                mainHandler, player, 50);
        MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource,
                MediaCodecSelector.DEFAULT, null, true, mainHandler, player,
                AudioCapabilities.getCapabilities(context), AudioManager.STREAM_MUSIC);
        TrackRenderer textRenderer = new TextTrackRenderer(sampleSource, player,
                mainHandler.getLooper());

FrameworkSampleSource相关代码已经在ExoPlayer,Github上被删除,先贴上谷歌历史代码,基于此思路基本可以打通,就整合代码替换繁琐,后续补充详细整改资源,

https://github.com/odenktools/ExoPlayerDemo/tree/master/libraries/exoplayer/src/com/google/android/exoplayer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解码客厅:知名设计师带你探索其历史与设计风格

会客厅又称接待室,,它们是宾客和家人享受下午或晚上娱乐时光的天然聚会场所。由于会客厅反映了每个家庭的个性,因此在家具和设计上花费了很多心思。装饰品、复古艺术品、三角钢琴以及雕塑和花瓶等其他装饰元素在今天的会客厅中已司空见惯。 下…

UE4 地形编辑基础知识 学习笔记

之前自己写过这样的功能,今天看到一个UE现成的 点击地形,选择样条 按住CTRL键点击屏幕中某一个点会在场景内生成一个这样的图标 再点两次,会生成B样条的绿线条 点击号再选择一个模型,会生成对应的链条状的mesh 拉高最远处的一个图…

2023国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法?2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法? 粒子群算法(Pa…

无涯教程-PHP - preg_split()函数

preg_split() - 语法 array preg_split (string pattern, string string [, int limit [, int flags]]); preg_split()函数的操作与split()完全相同,只不过正则表达式被接受为pattern的输入参数。 如果指定了可选的输入参数limit,则仅返回子字符串的限…

测试框架pytest教程(11)-pytestAPI

常量 pytest.__version__ #输出pytest版本 pytest.version_tuple #输出版本的元组形式 功能 pytest.approx pytest.approx 是一个用于进行数值近似比较的 pytest 断言工具。 在测试中,有时候需要对浮点数或其他具有小数部分的数值进行比较。然而,由于…

正中优配:散户也算股东吗?能不能参加股东大会?

股市上,常有散户自称韭菜,长一波被股市收割一波,不可谓不惨。但要较真的话,散户仍是有必定身份的,最少他是所持股的股东。有人会好奇,原来散户也算股东吗?那他能不能参与公司的股东大会&#xf…

一篇文章教你自动化测试如何解析excel文件?

前言 自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们的首选,无论是编写测试用例还是存放测试数据,excel都是很方便的。…

怎么测试app?app的测试技巧是什么?

前言 今天笔者想和大家来唠唠app测试,现在的app有非常的多,这些app都是需要经过测试之后才能发布到应用市场中,app已经成为了我们日常生活中不可或缺的一部分了,但它的功能必须强大,才能受到消费者的重视,并…

深度学习3:激活函数

一、激活函数的简介与由来 激活函数:是用来加入非线性因素的,解决线性模型所不能解决的问题。 线性函数的组合解决的问题太有限了,碰到非线性问题就束手无策了。如下图。 通过激活函数映射之后,可以输出非线性函数。 最后再通过…

Ubuntu下跑Aplaca报错:torch.cuda.0utofMemoryError: CUDA out of memory.解决办法(查看CUDA占用情况清除GPU缓存)

缓存不够!!!!并非内存容量不够 错误提示: torch.cuda.0utofMemoryError: CUDA out of memory.Tried to allocate 2.00 MiB (PU 0; 23.69 GiB total capacity; 237 BiB already allocated; 18.38 MiB fre; 2.50 GiB re…

解决elementUI打包上线后icon图标偶尔乱码的问题

解决vue-elementUI打包后icon图标偶尔乱码的问题 一、背景二、现象三、原因四、处理方法方式1:使用css-unicode-loader方式2:升高 sass版本到1.39.0方式3:替换element-ui的样式文件方式4:更换打包压缩方式知识扩展:方式…

一文读懂AUTOSAR系列 – DEM功能详解

摘要: DEM是以DTC为核心的AUTOSAR基础软件模块,实现了对DTC的监控上报,存储等功能,如果需要对AUTOSAR诊断进行进一步学习,还需要对DCM,Doip,Cantp等模块进行系统性学习。 前言 Dem是AUTOSAR中配…

【MySQL系列】ALTER语句详解,以及UPDATE,DELECT,TRUNCATE语句的使用+区别

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

网络货运平台盈利指南

8月17日,由中国物流与采购联合会主办的2023(第十五届)物流与供应链数字化发展大会在贵阳成功举办! 会议期间,数据宝作为中物联副会长单位受邀出席,并与菜鸟集团、中储、满帮、华润、货运中国、山东高速、德…

玩转自动化测试:Monkey工具的实践应用

本文将介绍monkey在自动化测试中的使用技术,主要包括monkey的安装和配置,使用monkey进行自动化测试的步骤,以及monkey的常用选项和技巧 01、Monkey的安装和配置 Mac OS X 在Mac OS X中,可以通过终端进行monkey的安装和配置 安…

4.物联网LWIP之C/S编程,实现服务器大小写转换

LWIP配置 服务器端实现 客户端实现 错误分析 一。LWIP配置(FREERTOS配置,ETH配置,LWIP配置) 1.FREERTOS配置 为什么要修改定时源为Tim1?不用systick? 原因:HAL库与FREERTOS都需要使用systi…

资损防控技术体系简介及实践

1 资损防控介绍 得物提供大量商品买卖等服务,资金流转量大,任何由于设计缺陷、系统缺陷、系统故障、人为操作、安全漏洞等因素都会引发直接或间接资金损失。资损防控就是在项目全生命周期内,引入多种资金分析和控制手段,预防资损…

Web安全测试:HTTP请求详解

一、前言 结合内部资料,与安全渗透部门同事合力整理的安全测试相关资料教程,全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试,覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬! 全部…

基于AVR128单片机世界电子时钟的设计

一、系统方案 上电初始化完成系统初始化,液晶滚动显示北京、莫斯科、东京、伦敦、巴黎、纽约等六个城市的标准时间,显示的内容包括地区名及相应地区的年、月、日、星期、时、分、秒。 使用K1按键控制滚动显示或稳定显示某个地区的时间。 使用K3、K4、K5按…

Goodnotes替代品!有哪些类似Goodnotes的笔记软件?

近期软件圈的一个重磅消息,莫过于笔记软件Goodnotes6从买断制变更为订阅制,不少早前已购买了Goodnotes的用户感觉受到了欺骗,原先承诺的「一次付费、长期使用」变成了空头支票,想用上最新的6.0版本和AI功能,就得掏钱订…