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

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

目录

概述

简单媒体项

处理非标准的文件扩展名

受保护的内容

边播边加载的字幕轨道

剪切一个媒体流

加广告


概述

基于媒体项的实例的播放列表API,能够很方便地使用MediaItem.Builder
来构建。 在播放器内部,一个播放项能被媒体源工厂转换成一个可以播放的
媒体源。没有定制化的配置,这个转化由一个默认的媒体源工厂来执行,它能
构建一个复杂的媒体源,这个源对应着媒体项的属性。一些在媒体项的属性
在下面列出来了。

简单媒体项

一个媒体项包括了一个流URI,构建如下:

Kotlin


val mediaItem = MediaItem.fromUri(videoUri)

对于其它的情况,能使用一个MediaItem.Builder。在如下的例子中,
一个媒体项能用一个编号和一些附加的元数据来构建:

Kotlin

val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()

当播放列表的切换发生时,附加的元数据能在更新你的APP的用户界面时很有用。


处理非标准的文件扩展名

ExoPlayer提供了可适配的媒体源,包括了DASH,HLS,光滑流的情况。如果
这样的可适配的媒体项的URI以一个标准的文件扩展名结束,相应的媒体源被
自动地创建。如果媒体项的URI有一个非标准的扩展名,或者是没有扩展名,
那么MIME的类型能够被显式地显示为媒体项的类型:

Kotlin

val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()

对于先进的媒体流,一个MIME类型是不需要有的。

受保护的内容

对于受保护的内容,媒体项的数据版权管理的属性应该被设置:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setDrmConfiguration(
      MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
        .setLicenseUri(licenseUri)
        .setMultiSession(true)
        .setLicenseRequestHeaders(httpRequestHeaders)
        .build()
    )
    .build()

这个例子构造了一个宽藤(估计是一个商标)受保护的内容的媒体项。
在播放器内,DefaultMediaSourceFactory传递了一些属性给DrmSessionManagerProvider,
这样就得到了DrmSessionManager,然后这个管理器被注入到已创建的媒体源。
数字版权管理行为能够根据你的需求,被进一步地定制。

边播边加载的字幕轨道

对边播边加载的字幕轨道,当构建一个媒体项时,媒体项的字幕实例能被加上:

Kotlin

val subtitle =
  SubtitleConfiguration.Builder(subtitleUri)
    .setMimeType(mimeType) // The correct MIME type (required).
    .setLanguage(language) // The subtitle language (optional).
    .setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
    .build()
val mediaItem =MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()

从内部看,DefaultMediaSourceFactory将使用MergingMediaSource来组合内容媒体源。
DefaultMediaSourceFactory不支持多个DASH的边播边加载字幕的功能。

剪切一个媒体流

为了剪切一个媒体项优先的内容,设置定制的开始和结束位置:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setClippingConfiguration(
      MediaItem.ClippingConfiguration.Builder()
        .setStartPositionMs(startPositionMs)
        .setEndPositionMs(endPositionMs)
        .build()
    )
    .build()

内部地看,DefaultMediaSourceFactory使用ClippingMediaSource来打包内容媒体源。
这有附加的剪切属性。

加广告

为了加广告,一个媒体项的广告标签的URI属性应该设置成:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())

从内部看,DefaultMediaSourceFactory将打包内容媒体源到广告媒体源,来插入广告。
为了做到这一点,播放器也需要有它自己的相应的DefaultMediaSourceFactory的配置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化(四):Pandas技术的高级操作案例,豆瓣电影数据也能轻松分析!

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…

typecho博客的相对地址实现

typecho其中的博客地址,必须写上绝对地址,否则在迁移网址的时候会出现问题,例如页面记载异常 修改其中的 typecho\var\Widget\Options\General.php 中的165行左右, /** 站点地址 */if (!defined(__TYPECHO_SITE_URL__)) {$siteUrl new Form\Element\Text(siteUrl,null,$this-…

Tomcat和Spring Boot配置https

生成测试证书 生成证书前,先验证本地是否正确配置jdk环境变量,如果jdk环境变量配置正确,在命令行程序输入生成证书的命令。 keytool -genkey -alias tomcat -keyalg RSA -keystore "F:\job\apache-tomcat-8.5.29\key\freeHttps.keysto…

MySQL模糊查询

一、MySQL通配符模糊查询(%,_) 1.1.通配符的分类 1.“%”百分号通配符:表示任何字符出现任意次数(可以是0次) 2.“_”下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。当然…

Yoshua Bengio独家专访:我不想把大模型未来押注在Scaling Law上,AGI路上要“注意安全”...

导读 漫长的30年间,数度从主流方向的超然出走,是Bengio的制胜秘诀。这种不盲从主流的风格体现在他研究生涯的方方面面。 90年代末期,神经网络被打入冷宫,Bengio的论文多次遭拒,连学生们也开始担心,和他一起…

EPSON晶振应用到汽车电子产品上的型号有哪些?

EPSON品牌应用在汽车电子产品上的晶振.,当然也少不了晶振可能最熟悉的就是32.768K系列和26MHZGPS晶振用的多。 在汽车里每一个部件都应有的不一样,甚至多次使用到同一尺寸,不同频率的晶振.爱普生品牌晶振型号就有几百种,很容易混淆,要想记住汽车里所应用到的不是件…

⑥【Shiro】使多个自定义Realm规则生效。

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ⑥【Shiro】Shiro中,如何使多个自定…

DevOps(七)Jenkins发布第一个流水线任务

Jenkins的流水线(Pipeline)是一种强大的工具,用于定义和管理持续集成和持续交付(CI/CD)过程。它允许你以代码的形式(即"Pipeline as Code")定义整个构建、测试和部署流程,…

UE4 拍摄、保存并浏览相册

效果: 1.新建CameraActor类 2.修改截图保存路径 3.编写BP_Camera蓝图 注意路径 Save Image函数要在执行拍照和BeginPlay事件执行一次 按钮执行拍摄事件 3.编写UMG蓝图 技巧:让Index加1、减1循环赋值 4.把BP_Camera挂在玩家上

《QT实用小工具·三十》基于QT开发的访客管理平台demo

1、概述 源码放在文章末尾 该项目为访客管理平台demo,包含主界面、系统设置、警情查询、调试帮助、用户退出功能。 项目部分代码如下: #ifndef QTHELPER_H #define QTHELPER_H#include "head.h"class QtHelper { public://获取所有屏幕区域…

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

前言: 在C语言中,我们知道程序从我们所写的代码到可执行执行的过程中经历了以下过程 1.预处理 2.编译 3.汇编 4.链接 可以通过下图来理解 翻译过程 1.预处理 该过程主要进行以下操作: (1)头文件的包含 (2)define定义符号的替换&#xff…

怎样实现opc采集数据后传给web后端

现在很多老工厂要进行数字化改造,现场生产的各种数据需要传到web后端,很多工厂现场原有的自动监控系统已经采集了现场的各种数据,只是没有形成联网。如果前端自动化系统全部废除,重新做数字化控制系统,成本投入太大&am…

docker服务无法启动

背景:断电重启经常会导致磁盘io错误,甚至出现磁盘坏块 这时可以使用xfs_repair来修复磁盘,但是修复过程可能会导致部分数据丢失 xfs_repair -f -L /dev/sdc问题一: Apr 15 19:27:15 Centos7.6 systemd[1]: Unit docker.service e…

Java入门(JDK安装)

安装 JDK 下载 Java Downloads | Oracle 安装 下一步直接安装安装过程中,需要确定自己的安装位置 参考:D:\Java\jdk1.8.0_281_x64 演示位置 校验 终端输入 java -version 配置 1)删除默认 javapath 默认情况下,可以在cm…

【C++题解】1607. 两位数运算

问题:1607. 两位数运算 类型:基本运算、拆位求解 题目描述: 小丽在编程课上学会了拆位运算,她已经可以拆出一个两位整数的十位和个位了,她想知道这个整数的十位 / 个位的结果是多少,请编程帮她实现&#…

VulnHub靶机 DC-5 打靶 渗透测试详情过程

VulnHub靶机 DC-5 打靶 详细渗透测试过程 目录 VulnHub靶机 DC-5 打靶 详细渗透测试过程一、将靶机导入到虚拟机当中二、渗透流程主机发现端口扫描目录爆破文件包含getshell反弹shell提权 一、将靶机导入到虚拟机当中 靶机地址: https://download.vulnhub.com/dc/…

【论文阅读】YOLO-World | 开集目标检测

Date:2024.02.22,Tencent AI Lab,华中科技大学Paper:https://arxiv.org/pdf/2401.17270.pdfGithub:https://github.com/AILab-CVC/YOLO-World 论文解决的问题: 通过视觉语言建模和大规模数据集上的预训练来…

HTTP/HTTPS详解

HTTP/HTTPS详解 1. HTTP1.1 HTTP基础知识1.2 HTTP建立和断开连接 2. HTTPS 1. HTTP 1.1 HTTP基础知识 HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用 于从WWW服务器传输超文本到本…

学习一下选择排序,快速排序

1.选择排序 我们可以根据这动图看到,就是在这个数组里面我们选出最小的放进第一个位置,然后再选除了第一个位置最小的,剩下的数里面最小的放到第二个位置,是不是非常简单呢。 void SelectSort2(int* arr, int n) {int begin 0;…

Stable Diffusion 3 API 发布!超越Midjourney v6和DALL-E 3

Stable Diffusion 3 于 2 月首次宣布作为预览版发布。而今天,StabilityAI 正式推出了 Stable Diffusion 3 和 Stable Diffusion 3 Turbo API 的API接口服务。 Stability AI 称仍在持续改进该模型,并没有说明发布日期。模型还没发布,但API先来…
最新文章