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

news/2024/10/18 1:32:19/

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


http://www.ppmy.cn/news/1425409.html

相关文章

PCB---Editor 输出光绘

选择一个层*(正面走线层和过孔) 选择一个文件复制命名(最后删除初始的那2个文件,下图是删除过后的): 隐藏全部开始重复以上步骤: 大致的层: Art01(正面走线层和过孔&…

ceph osd分组

一、前言 使用分组可以更好的管理osd,将不同类型的磁盘,分到不同的组中,例如hhd类型的osd分配到hhd组,ssd类型的osd分配到ssd组,将io要求不高的分配到hhd组做存储,io要求高的分配到ssd组做存储 二、配置 查…

Unity 中(提示框Tweet)

using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System; public class Message : MonoBehaviour {public float dropDuration 0.5f; // 掉落持续时间public float persisterDuration 1f; // 持续显示时间public float dorpHeight;public static Message…

endnote21从安装到使用!文献引用!Mac版

视频学习和资源获取 新建库 选择上方导航栏处的File下的New 软件 软件界面可以分成四个部分 2是个人图书馆 3是对某一分类中文献的展示 最右侧是对具体一篇文献的摘要、编辑以及PDF 有回形针标志意味着这篇有全文,也就是有pdf 如果没有回形针代表它只有引文信…

@CrossOrigin的使用

CrossOrigin的使用 1.使用场景2.用法3.示例3.1 标注在方法上3.2 标注在类上 3.属性配置 1.使用场景 前后端分离应用:当前端应用和后端服务部署在不同的域或端口上时,前端应用尝试向后端服务发起请求时,可能会遇到同源策略的限制。这时&#…

微博聚类文本分析和可视化

本文使用python抓取微博数据并对微博文本分析和可视化,LDA(树图)、关系图、词云、时间趋势(折线图)、热度地图、词典情感分析(饼图和3D柱状图)、词向量神经网络情感分析、tfidf聚类、词向量聚类…

基于Springboot的社区待就业人员信息管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区待就业人员信息管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三…

RedisHttpSession反序列化UID问题跟踪

1.RedisHttpSession配置 package com.visy.configure;import org.springframework.context.annotation.Configuration; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;Configuration EnableRedisHttpSession(maxInactive…