安卓手机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的配置。

相关推荐

  1. 手机APP开发__媒体开发部分__媒体

    2024-04-21 15:58:06       15 阅读
  2. 手机APP开发__媒体开发部分__媒体

    2024-04-21 15:58:06       16 阅读
  3. 手机APP开发__媒体开发部分__APK裁剪

    2024-04-21 15:58:06       18 阅读
  4. 手机APP开发__媒体开发部分__直播流

    2024-04-21 15:58:06       16 阅读
  5. 手机APP开发__媒体开发部分__网络栈

    2024-04-21 15:58:06       18 阅读
  6. 手机APP开发__媒体开发部分__媒体投屏

    2024-04-21 15:58:06       14 阅读
  7. 手机APP开发__媒体开发部分__检索元数据

    2024-04-21 15:58:06       14 阅读
  8. 手机APP开发__媒体开发部分__音轨的选择

    2024-04-21 15:58:06       15 阅读
  9. 手机APP开发__媒体开发部分__播放器的接口

    2024-04-21 15:58:06       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-21 15:58:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-21 15:58:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-21 15:58:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-21 15:58:06       20 阅读

热门阅读

  1. Golang:三种引号详解-单引号、双引号、反引号

    2024-04-21 15:58:06       12 阅读
  2. 【EXCEL自动化10】pandas提取指定数据 + 批量求和

    2024-04-21 15:58:06       12 阅读
  3. 使用HttpsURLConnection请求https报错

    2024-04-21 15:58:06       13 阅读
  4. 【AI 测试】自然语言处理(NLP)类项目如何测试

    2024-04-21 15:58:06       15 阅读
  5. MacOS 文件句柄数不够 Error: EMFILE: too many open files

    2024-04-21 15:58:06       10 阅读