安卓手机APP开发__媒体开发部分__媒体源

安卓手机APP开发__媒体开发部分__媒体源

目录

概述

定制媒体源的创建

基于播放列表的API的媒体源

高级的媒体源的组合


概述

在ExoPlayer,媒体的每一个部分都能表示为一个媒体项。
然而内部来看,播放器需要媒体源的实例来播放内容。
播放器使用一个媒体源的工厂从媒体项来创建了这些实例。

默认上,播放器使用DefaultMediaSourceFactory,它能创建如下的
内容媒体源的实现:

对于DASH有DASH的媒体源
对于光滑流有SsMediaSource
对于HLS有HlsMediaSource
对于常规的媒体文件,有ProgressiveMediaSource
对于RTSP,有RtspMediaSource

DefaultMediaSourceFactory也能创建更加复杂的媒体源,
这依赖于相应的媒体项的属性。

对于需要媒体源的APP,播放器的默认配置不支持这个设置,有一些定制的方法。

定制媒体源的创建

当构建一个播放器时,一个MediaSource.Factory能被注入。例如,
如果一个APP需要加广告和使用一个CacheDataSource.Factory来支持
缓冲,DefaultMediaSourceFactory的实例能被配置来满足这些需求并且
在播放器的组装子中注入它:

Kotlin

  val mediaSourceFactory: MediaSource.Factory =DefaultMediaSourceFactory(context).setDataSourceFactory(cacheDataSourceFactory).setLocalAdInsertionComponents(adsLoaderProvider, playerView)val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()

注入一个定制的MediaSource.Factory的实现也是可能的。例如
为了支持创建一个定制的媒体源类型。工厂的createMediaSource(MediaItem)
能被调用来创建一个媒体源,再加入到播放列表中。

基于播放列表的API的媒体源

ExoPlayer的接口定义了附加的播放列表方法,来接受媒体源而不是媒体项。通过
把播放器的内部的MediaSource.Factory和媒体源的实例直接传给播放器,这是可行的:

Kotlin

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources)
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource)// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))exoPlayer.prepare()
exoPlayer.play()

高级的媒体源的组合

ExoPlayer提供了多个媒体源的实现,来改变和组合其它的媒体源实例。
如下的是最有用的,很多手定制的源是由它们进行组合的,没有更简单且有效的了

ClippingMediaSource: 允许剪切媒体到一个特定的时间范围。

FilteringMediaSource:过滤可用的轨道到特定的类型

MergingMediaSource: 合并多个媒体源来并行的播放。

ConcatenatingMediaSource2:合并多个媒体源来串行的播放。

SilenceMediaSource:生成静音的媒体源

AdsMediaSource:扩展一个媒体源加上客户端的加入广告功能。

ServerSideAdInsertionMediaSource:扩展一个媒体源加上服务器端的加入广告功能。

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

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

相关文章

shell流程控制语句

1 test test 条件 条件为真返回 0,条件为假返回 1 [ 条件 ] test 能够理解3种类型的表达式 1.文件测试 2.字符串比较 3.数字比较 文件测试 -f存在且是普通文件-d存在且是目录-h存在且是符号链接-b块设备-c字符设备-e文件存在 字符串 -n STRING字符串长度不为零…

neo4j使用详解(终章、neo4j的java driver使用模板及工具类——<可用于生产>)

Neo4j系列导航: neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 neo4j java Driver等更多 1. 简介 本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括: 图…

我三战华东师范大学的同桌真的很牛

标题党一下,其实是我的一个关系很好的高中同桌死磕华东师范大学三年,最终第二名上岸的故事。 其实我们是同一届的,我为了早点走选择了个排名还行的双非院校就走了,而我这个同桌相当有毅力,他能坚持这么久我其实很佩服&…

微信小程序开发一(常用的标签)

去微信公众平台注册账号确定怎么操作去网上找找 网址:微信公众平台 (qq.com)https://mp.weixin.qq.com/https://mp.weixin.qq.com/ 微信开放文档中找到工具栏下载微信开发者工具 网址:微信开发者工具(稳定版 Stable Build)下载地…

vue3 文件分片上传

base 64 分片上传文件 <template><div><input type"file" change"onFileSelected" /><button v-if"file && !isUploading" click"startUpload">开始上传</button><button v-if"isUplo…

Go 之获取变量类型

Python 可以通过 type 快速获取变量类型。Ruby 也可以通过 class 方法快速获取变量类型。 lists [1, 2, 3, 4, 5] print(type(lists)) # <class list>lists [1, 2, 3, 4, 5] puts lists.class # Array 那么 Go 有哪些获取变量类型的方法呢&#xff1f; fmt.Printf(&…

JavaWeb开发02-MYSQL-DDL-DML-DQL-多表设计-多表查询-事务-索引

一、MySQL概述 通过SQL语句可以操作数据库 关系型数据库&#xff1a; 只要是关系型数据库就可以用SQL语句这一统一标准进行操作数据库 1.MYSQL数据模型 客户端通过SQL语句交给了数据库管理系统DBMS&#xff0c;进行相应操作&#xff0c;创建一个一个数据库&#xff0c;体现为一…

如何理解信创产品?成为信创产品?

信创产品是指运用信息技术手段创造的产品&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创产品包括了IT基础设施如CPU芯片、服务器、存储、交换机、路由器、各种云和相关服务内容&#xff1b;基础软件如数据库、操作系统、中间件&#xff…

JRT在线初始化完善

之前实现的在线初始化留了个尾巴&#xff0c;那就是环境下载页构造zip包的时候没修改JRTBrowser的连接串地址为当前网站&#xff0c;这样就要求网站部署好之后给用户下载之前有人要把服务器的浏览器地址配置好。这样就增加一个运维工作&#xff0c;如果忘了或者不知道的人就会导…

利用H.264码流传输摄像头地理位置信息

目录 1. 引言2. NALU格式介绍3. SEI格式介绍4. 举例5. 推广1. 引言 摄像头的应用范围越来越广泛,从安防监控到视频会议,它们在我们的日常生活中起着关键作用。除了视频图像本身,摄像头还可以提供其他有用的信息,例如摄像头的地理位置。本文将讨论如何利用H.264码流传输摄像…

if __name__ == ‘__main__‘ 是个什么鬼?

有句话经典的概括了这段代码的意义&#xff1a; “Make a script both importable and executable” 意思就是说让你写的脚本模块既可以导入到别的模块中用&#xff0c;另外该模块自己也可执行。 咋一看&#xff0c;其实我也不理解到底是个什么球意思&#xff0c;这里我们写两个…

nuxt3使用记录四:加载静态资源时路径的写法研究

在上一篇记录了NUXT进行SSG构建时&#xff0c;不仅会构建纯静态的html文件&#xff0c;也会构建一堆js文件。而如果网页中有加载静态资源&#xff0c;如图片&#xff0c;这时就需要注意了&#xff0c;不能简单的使用官网说的<img src"~/assets/img/nuxt.png" alt&…

2024年华中杯数学建模C题思路与论文助攻

C 题 基于光纤传感器的平面曲线重建算法建模 光纤传感技术是伴随着光纤及光通信技术发展起来的一种新型传感器术。它是以光波为传感信号、光纤为传输载体来感知外界环境中的信号&#xff0c;其 基本原理是当外界环境参数发生变化时&#xff0c;会引起光纤传感器中光波参量&am…

Linux进阶---常见符号及其含义、常见报错

一、常见符号及其含义&#xff08;重要&#xff09; 二、 常见报错 • 找不到文件、文件不存在&#xff1a;No such file or directory • 没有权限 &#xff1a;Permission denied • 命令不存在 &#xff1a;command not found 1.找不到文件、文件不存在&#xff1a;No s…

logstash迁移es自建数据到pass服务

1 安装 下载对应版本的tar文件 https://www.elastic.co/cn/downloads/past-releases#logstash解压 tar -zvxf logstash-6.8.23-linux-x86_64.tar.gz 2 配置 修改Logstash的堆内存使用vi config/jvm.options&#xff0c;修改Logstash配置文件config/jvm.options&#xff0c;增…

AI智能电销机器人是什么?能给我们带来哪些便利?

科技的飞速发展&#xff0c;让很多“懒人”的幻想变成了现实&#xff0c;越来越多的人工智能产品被发明出来甚至完全替代日常生活中的工作。比如在电销行业&#xff0c;很多企业选择AI智能电销机器人进行外呼。那么你了解多少AI智能电销机器人呢&#xff1f;和小编kelaile520一…

声明v.s.定义

参考&#xff1a;http://t.csdnimg.cn/1xnzA 变量的定义&#xff1a;用于为变量分配存储空间&#xff0c;还可以为变量指定初始值&#xff0c;在程序中&#xff0c;变量有且仅有一个定义。变量的声明&#xff1a;用于向程序表明变量的类型和名字。在程序中&#xff0c;变量可以…

React参数传递问题

问题描述 <div className"reply-list">{/* 评论项 */}{list.map((item) > {console.log("map 里面的item", item);return <CommentItem item{item} />; // 调用组件并传递参数item})}</div> // 在组件中使用形参 function CommentI…

SAP SD学习笔记06 - 受注的据否,受注的理由,简易变更(一括处理)

上文讲了一括处理和Block&#xff08;冻结&#xff09;处理。 SAP SD学习笔记05 - SD中的一括处理&#xff08;集中处理&#xff09;&#xff0c;出荷和请求的冻结&#xff08;替代实现承认功能&#xff09;-CSDN博客 本章继续讲SAP的流程中一些常用的操作。 1&#xff0c;受注…

Flume 入门教程

内容目录 Flume 简介 架构和基本概念 多种架构模式 Flume 安装部署 Flume 简介 Flume 是一个分布式、可靠且高可用的数据收集、聚合和传输系统&#xff0c;主要用于高效地处理大规模日志数据。设计之初&#xff0c;它主要服务于日志管理领域&#xff0c;但其灵活性和可扩展…