安卓手机APP开发__媒体开发部分__直播流

安卓手机APP开发__媒体开发部分__直播流

目录

概述

检查和监控直播的播放

在直播流中的定位查找

直播播放的用户界面

配置直播播放的参数

播放速度调整

定制播放速度的调整算法

直播窗口背后的异常和ERROR_CODE_BEHIND_LIVE_WINDOW


概述

ExoPlayer没有任何特殊配置的情况下,播放绝大多数的
盒外的可适配的直播流。

可适配的直播流提供了一个可用的媒体的一个窗口,这个媒体
是在常规的时间间隔之间进行更新的,更新为当前的实时时刻.
这意味着播放的点位将总是在这个窗口的某一个位置,在大部分
时候,在直播流被生成时它离当前的实时时刻很近.在当前的实时
时刻与播放的点位之间的差距被叫做直播时延.


检查和监控直播的播放

一个直播窗口的每一次刷新,被注册的播放器的监听器实例将
收到一个onTimelineChanged事件.

Player.isCurrentWindowLive显示了当前的播放的媒体项
是否是一个直播流.即使直播流已经结束了,这个值还是真.
Player.isCurrentWindowDynamic显示了当前的播放的媒体项
是否仍然在被更新.对于没有结束的直播流来说,它的值是真的.

Player.getCurrentLiveOffset返回直播的时延.
Player.getDuration返回当前的直播窗口的长度.
Player.getCurrentPosition返回直播窗口中播放位置到开始位置的距离.

在直播流中的定位查找

在直播窗口中你能使用Player.seekTo,查找定位到任何一个位置.
这个查找的位置是相对于直播窗口的开始位置的.

直播窗口有一个默认的位置是被认为是播放开始的位置.这个位置通常
与直播边界比较近的.你能调用Player.seekToDefaultPosition得到这个默认位置.


直播播放的用户界面

ExoPlayer的默认的用户界面的组件显示出直播窗口的长度和当前的播放位置.
这意味着每一次直播窗口的刷新,直播的位置在向后跳.如果你需要不同的行为,
例如显示当前的UNIX时间,或者是当前直播的时间,你能定制PlayerControlView
修改这个类来满足你的需求.

配置直播播放的参数

ExoPlayer使用一些参数来控制播放位置的距离,播放速度的范围也能调节.
根据优先级的降序,你能从三个地方得到这些参数:

被传递到MediaItem.Builder.setLiveConfiguration的媒体项的值
在DefaultMediaSourceFactory的全局默认值
从媒体中直接读取的值

Kotlin

// Global settings.
val player =
  ExoPlayer.Builder(context)
    .setMediaSourceFactory(DefaultMediaSourceFactory(context).setLiveTargetOffsetMs(5000))
    .build()

// Per MediaItem settings.
val mediaItem =
  MediaItem.Builder()
    .setUri(mediaUri)
    .setLiveConfiguration(
      MediaItem.LiveConfiguration.Builder().setMaxPlaybackSpeed(1.02f).build()
    )
    .build()
player.setMediaItem(mediaItem)

可用的配置值有:
targetOffsetMs:目标直播时延
minOffsetMs:最小直播时延
maxOffsetMs:最大直播时延
minPlaybackSpeed:最小播放速度
maxPlaybackSpeed:最大播放速度

播放速度调整

当播放一个低延时的直播流时,ExoPlayer通过稍微地改变
播放速度,来调整直播时延.播放器将匹配媒体或者是APP提供的
目标时延,但也将试图反馈要改善网络条件.

如果自动地调整播放速度不被允许,能通过设置参数minPlaybackSpeed和
maxPlaybackSpeed为1 .


定制播放速度的调整算法

如果播放速度的调整被启用,LivePlaybackSpeedControl定义了调整
做了什么.实现一个定制的LivePlaybackSpeedControl是可能的.

Kotlin

val player =
  ExoPlayer.Builder(context)
    .setLivePlaybackSpeedControl(
      DefaultLivePlaybackSpeedControl.Builder().setFallbackMaxPlaybackSpeed(1.04f).build()
    )
    .build()


DefaultLivePlaybackSpeedControl的相关的定制化的参数有:

fallbackMinPlaybackSpeed和fallbackMaxPlaybackSpeed: 可调整的最小和最大播放速度

proportionalControlFactor:比例控制系数,值越小,速度切换时更平滑.

直播窗口背后的异常和ERROR_CODE_BEHIND_LIVE_WINDOW

播放位置可能落后于直播窗口了,例如播放器被暂停了,或者是缓冲了太长的时间.
如果这种情况发生了,播放将失败,一个异常发生了,错误代码是
ERROR_CODE_BEHIND_LIVE_WINDOW将报告给Player.Listener.onPlayerError.
应用代码可能希望以在一个默认位置继续播放的方式,来处理这样的错误.
代码如下:

Kotlin

override fun onPlayerError(error: PlaybackException) {
  if (error.errorCode == PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW) {
    // Re-initialize player at the live edge.
    player.seekToDefaultPosition()
    player.prepare()
  } else {
    // Handle other errors
  }
}

相关推荐

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

    2024-04-20 15:28:01       16 阅读
  2. 手机APP开发__媒体开发部分__APK裁剪

    2024-04-20 15:28:01       16 阅读
  3. 手机APP开发__媒体开发部分__媒体

    2024-04-20 15:28:01       16 阅读
  4. 手机APP开发__媒体开发部分__媒体

    2024-04-20 15:28:01       14 阅读
  5. 手机APP开发__媒体开发部分__网络栈

    2024-04-20 15:28:01       18 阅读
  6. 手机APP开发__媒体开发部分__媒体投屏

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

    2024-04-20 15:28:01       13 阅读
  8. 手机APP开发__媒体开发部分__音轨的选择

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

    2024-04-20 15:28:01       13 阅读

最近更新

  1. TCP协议是安全的吗?

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

    2024-04-20 15:28:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

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

    2024-04-20 15:28:01       20 阅读

热门阅读

  1. web server apache tomcat11-02-setup 启动

    2024-04-20 15:28:01       12 阅读
  2. 基于python的pdf版本的PPT转换为office PPT

    2024-04-20 15:28:01       13 阅读
  3. mariadb 添加新用户,并给新用户对应权限

    2024-04-20 15:28:01       18 阅读
  4. 静默拷贝U盘里的ppt/pptx

    2024-04-20 15:28:01       18 阅读
  5. Tomcat 启动闪退问题解决方法

    2024-04-20 15:28:01       22 阅读
  6. Tomcat 启动闪退问题解决方法

    2024-04-20 15:28:01       25 阅读
  7. mmcv bug记录

    2024-04-20 15:28:01       13 阅读
  8. 什么是过滤器?

    2024-04-20 15:28:01       16 阅读
  9. Python爬虫入门

    2024-04-20 15:28:01       19 阅读
  10. 在Docker环境下部署GeneFace++项目

    2024-04-20 15:28:01       27 阅读