安卓手机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:扩展一个媒体源加上服务器端的加入广告功能。

相关推荐

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

    2024-04-20 17:34:09       41 阅读
  2. 手机APP开发__媒体开发部分__媒体

    2024-04-20 17:34:09       36 阅读
  3. 手机APP开发__媒体开发部分__APK裁剪

    2024-04-20 17:34:09       39 阅读
  4. 手机APP开发__媒体开发部分__直播流

    2024-04-20 17:34:09       37 阅读
  5. 手机APP开发__媒体开发部分__网络栈

    2024-04-20 17:34:09       38 阅读
  6. 手机APP开发__媒体开发部分__媒体投屏

    2024-04-20 17:34:09       33 阅读
  7. 手机APP开发__媒体开发部分__检索元数据

    2024-04-20 17:34:09       36 阅读
  8. 手机APP开发__媒体开发部分__音轨的选择

    2024-04-20 17:34:09       34 阅读
  9. 手机APP开发__媒体开发部分__播放器的接口

    2024-04-20 17:34:09       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-20 17:34:09       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-20 17:34:09       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-20 17:34:09       82 阅读
  4. Python语言-面向对象

    2024-04-20 17:34:09       91 阅读

热门阅读

  1. 蓝桥杯备考随手记: practise08

    2024-04-20 17:34:09       33 阅读
  2. 基于Python的招聘岗位数据分析系统的设计与实现

    2024-04-20 17:34:09       38 阅读
  3. QC、QA、SQC、SQA

    2024-04-20 17:34:09       43 阅读
  4. 签到接口流程总结

    2024-04-20 17:34:09       31 阅读
  5. Python3中的时间应用 (代码)

    2024-04-20 17:34:09       35 阅读
  6. 某互联网公司c++笔试题1

    2024-04-20 17:34:09       32 阅读
  7. 如何正确设计 TCP/IP 流式应用层网络协议

    2024-04-20 17:34:09       38 阅读
  8. coco128数据对象类别中英文对照json格式

    2024-04-20 17:34:09       37 阅读
  9. electron+Vue3构建桌面应用之IPC通讯

    2024-04-20 17:34:09       36 阅读
  10. 构建spotify的electron版本

    2024-04-20 17:34:09       37 阅读