• 安卓手机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

    1. val mediaItem =
    2. MediaItem.Builder()
    3. .setUri(videoUri)
    4. .setDrmConfiguration(
    5. MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
    6. .setLicenseUri(licenseUri)
    7. .setMultiSession(true)
    8. .setLicenseRequestHeaders(httpRequestHeaders)
    9. .build()
    10. )
    11. .build()

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

    边播边加载的字幕轨道

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

    Kotlin

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

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

    剪切一个媒体流

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

    Kotlin

    1. val mediaItem =
    2. MediaItem.Builder()
    3. .setUri(videoUri)
    4. .setClippingConfiguration(
    5. MediaItem.ClippingConfiguration.Builder()
    6. .setStartPositionMs(startPositionMs)
    7. .setEndPositionMs(endPositionMs)
    8. .build()
    9. )
    10. .build()

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

    加广告

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

    Kotlin

    1. val mediaItem =
    2. MediaItem.Builder()
    3. .setUri(videoUri)
    4. .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())

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

  • 相关阅读:
    雷电模拟器报错:g_bGuestPoweroff.fastpipeapi. cpp_1153_1161
    win7下安装nodejs16+
    Alkyne-PEG-OH 炔烃PEG羟基Alkyne-PEG-OH 炔烃PEG羟基
    LeetCode //C - 200. Number of Islands
    git:删除上一次 commit 中的某个文件,并重新提交
    框架的优点(SpringBoot VS Servlet)
    oracle OCP OCM MySQL OCP认证难吗?
    参加2024年CSDN博客_付费内容优质创作者_颁奖仪式的收获
    【数据结构】二叉树的层序遍历~动画超详解
    论文笔记: 数据驱动的地震波形反演--健壮性与泛化性研究
  • 原文地址:https://blog.csdn.net/gggwfn1982/article/details/137894435