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

embedded/2024/10/17 21:17:33/

安卓手机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/embedded/4062.html

相关文章

ansible-playbook角色roles使用实例及遇到的问题排除记录

目录 1、角色roles的概念和作用 2、角色roles的目录层级结构 3、ansible-play使用角色roles部署服务实例 3.1 实例-使用ansible-playbook部署安装htttpd服务,且配置文件修改后会被触发启动。 3.2 遇到的问题记录 1、角色roles的概念和作用 角色roles是ansible自…

04 MySQL --DQL 专题--Union、exists

1. UNION、UNION ALL UNION 关键字的作用? 合并两个或多个 SELECT 语句的结果。发挥的作用与 or 非常相似 UNION关键字生效的前提? 每个 SELECT 语句必须拥有相同数量的列。每个 SELECT 语句中的列的顺序必须相同。列必须拥有相似的数据类型。 SELEC…

Java接口

1 接口的概念 笔记本上的USB口,电源插座等都是接口 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型 …

最小生成树算法的实现c++

最小生成树算法的实现c 题目链接:1584. 连接所有点的最小费用 - 力扣(LeetCode) 主要思路:使用krusal算法,将边的权值进行排序(从小到大排序),每次将权值最小且未加入到连通分量中…

【Python基础】线程

文章目录 [toc]线程与进程的区别与联系同步任务示例 并行任务示例线程调度的“随机性” 线程方法thread_object.start()thread_object.join()thread_object.setDaemon()没有设置守护线程的情况设置守护线程的情况 thread_object.current_thread() 目前爬虫的三种实现单线程爬虫…

如何通过drissionpage以及js逆向过字符/滑块/点选/九宫格验证码文章/视频学习案例

目录 零、各种关于drissionpage文章视频案例解决方案合集一、过字符类验证码反爬实战(自动化和逆向两种解法)二、过滑块类验证码反爬实战(自动化和逆向两种解法)三、过点选类验证码反爬实战(自动化和逆向两种解法)四、过九宫格验证码反爬实战(自动化和逆向两种解法)仅供…

SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出

介绍 EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。它能让你在不用考虑性能、内存的等因素的情况下,快速完成 Excel 的读、写等功能。 EasyExcel文档地址:https://easyexcel.opensource.alibaba.com/ 快速开始 …

PySpark预计算ClickHouse Bitmap实践

1. 背景 ClickHouse全称是Click Stream,Data WareHouse,是一款高性能的OLAP数据库,既使用了ROLAP模型,又拥有着比肩MOLAP的性能。我们可以用ClickHouse用来做分析平台快速出数。其中的bitmap结构方便我们对人群进行交并。Bitmap位…