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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯2024年第十五届省赛真题-宝石组合

思路:参考博客,对Ha,Hb,Hc分别进行质因数分解会发现,S其实就等于Ha,Hb,Hc的最大公约数,不严谨推导过程如下(字丑勿喷): 找到此规律后,也不能枚举Ha&#xff…

OpenCV——Niblack局部阈值二值化方法

目录 一、Niblack算法1、算法概述2、参考文献二、代码实现三、结果展示OpenCV——Niblack局部阈值二值化方法由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、Niblack算法 1、算法概述 Niblack 算法是一种典型的局部阈值…

JavaWeb开发05-事务管理-AOP概述-AOP通知类型-通知顺序-切入点表达式-连接点-案例

一、事务管理 1.事务回顾 2.Spring事务管理 删除部门和删除部门下的员工应该绑定在一起,但是如果这两个操作之间出现错误,就会执行删除部门不删除员工,所以需要使用事务将两个任务绑定在一起,要么一起成功要么一起失败 Spring中如…

如何通过自动化采购管理软件解决 6 个采购挑战?

采购需要精确性、可预测性以及敏捷而自信地解决问题的能力。灵活采购流程可以帮助企业更快地适应市场变化和供应链中断。 借助正确的工具,团队可以实现这些目标。 采用流程自动化技术的主要好处 当被问及采用流程自动化工具带来的好处时,三分之二的高…

基础知识集合

https://blog.csdn.net/sheng_q/category_10901984.html?spm1001.2014.3001.5482 epoll 事件驱动的I/O模型,同时处理大量的文件描述符 内核与用户空间共享一个事件表:监控的文件描述符以它们的状态,当状态变化,内核将事件通知给…

2024年二级造价师(建设工程造价管理)考试题库及答案

一、选择题 6.关于工程量清单方式招标的工程合同价格风险及风险分担,下列说法中正确的是(  )。 A.人工费变化发生的风险全部由发包人承担 B.承包人管理费的风险一般由发承包双方共同承担 C.当出现的风险内容及幅度在招标文件规定的范围…

Docker(十):Redis三主三从(扩容、缩容)

一:启动6台Redis # privilegedtrue 获取宿主机root权限 # --cluster-enabled yes 开启redis集群 # --appendonly yes 开启持久化 docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/dataredis:6.0.8--cluster-en…

Mac上Maven的安装和环境变量配置保姆级教程(最新版实时更新)

目录 一、Maven的安装 1.进入官网(Maven官网)下载安装包并解压 2.这里我使用了Homebrew安装Maven 安装Homebrew: 安装Maven: 二、Maven配置环境变量 1.打开环境变量文档: 2.在弹出文档结尾加入配置&#xff1a…

SpringBoot常用20个注解及其作用

1、SpringBootApplication: 这是一个组合注解,包括了Configuration、EnableAutoConfiguration 和 ComponentScan。它标识了一个主程序类,用于启动 Spring Boot 应用。 2、RestController: 这个注解用于标识一个类,表示这个类中的所有方…

【Node.js】 fs模块全解析

🔥【Node.js】 fs模块全解析 📢 引言 在Node.js开发中,fs模块犹如一把万能钥匙,解锁着整个文件系统的操作。从读取文件、写入文件、检查状态到目录管理,无所不能。接下来,我们将逐一揭开fs模块中最常用的那…

Spring Boot 加载本地 JAR 包的技术实践

随着微服务架构的兴起,Spring Boot 因其快速构建、易于部署的特性,成为了众多开发者的首选框架。在开发过程中,我们有时需要引入一些不在公共 Maven 仓库中的 JAR 包作为依赖,这时候就需要加载本地的 JAR 包。本文将详细介绍在 Sp…

【HC32L110】华大低功耗单片机启动文件详解

本文主要记录华大低功耗单片机 HC32L110 的 汇编启动过程,包括startup_hc32l110启动文件详细注释 目录 1.启动文件的作用2.堆栈定义2.1 栈2.2堆 3.向量表4.复位程序5.中断服务程序6.堆栈初始化启动过程详解7.1从0地址开始7.2在Reset_Handler中干了啥? 8.…

PyTorch|保存及加载模型、nn.Sequential、ModuleList和ModuleDict

系列文章目录 PyTorch|Dataset与DataLoader使用、构建自定义数据集 PyTorch|搭建分类网络实例、nn.Module源码学习 pytorch|autograd使用、训练模型 文章目录 系列文章目录一、保存及加载模型(一)保存及加载模型的权重(二)保存及…

Rust 语言中的跨平台 GUI 库

在 Rust 社区中,Iced 是值得关注的跨平台 GUI (图形用户界面) 库之一。由 iced-rs 团队开发,Iced的设计灵感来源于 Elm 语言,它以简洁性和类型安全性为特色,旨在提供一个简单易用且功能丰富的 GUI 开发体验。本文将深入探讨 Iced&…

探究欧拉恒等式的美学与数学威力

正如老子所述,“道生一,一生二,二生三,三生万物”,数学作为人类认知自然法则的语言,其数系的不断发展象征着对世界理解的深化。从自然数经由分数、无理数至复数,复数虽看似反直觉,却…

MATLAB实现蚁群算法优化柔性车间调度(ACO-fjsp)

蚁群算法优化车间调度的步骤可以分为以下几个主要阶段: 1.初始化阶段: 设置算法参数,如信息素浓度、启发式因子等。这些参数将影响蚂蚁在选择路径时的决策过程。 确定车间调度的具体问题规模,包括工件数量、机器数量以及每个工件…

前端监控系统建设:错误收集、性能监控与用户体验优化

在前端开发过程中,建立一个监控系统是非常重要的,它可以帮助我们实时捕获错误、监控性能,并优化用户体验。下面是一些建设前端监控系统的关键部分。 错误收集:一个好的错误收集系统可以帮助我们迅速发现并修复代码中的错误。我们可…

AI:162-如何使用Python进行图像识别与处理深度学习与卷积神经网络的应用

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正…

Beckhoff倍福工业电脑C6240-1037-0030主板维修CB1051-0003 CPU深圳捷达工控维修

Installation and Operating instructions for Control Cabinet PC C6240 from -0060 PS/2 连接 PS/2 上部 PS/2 连接器 (X104) 允许使用 PS/2 鼠标,而 PC 键盘可连接至下部 PS/2 连接器 (X103)。 USB接口 USB1 – USB4 四个 USB 接口 (X108 – X111) 用于通过 US…

OpenHarmony GIF图像渲染库—ohos-gif-drawable

简介 本项目是OpenHarmony系统的一款GIF图像渲染库,基于Canvas进行绘制,主要能力如下: 支持播放GIF图片。支持控制GIF播放/暂停。支持重置GIF播放动画。支持调节GIF播放速率。支持监听GIF所有帧显示完成后的回调。支持设置显示大小。支持7种不同的展示…