Media3 中 Window 的时间相关属性详解

AndroidX Media3 的 Timeline.Window 类中,与时间相关的属性描述了媒体播放窗口(window)在时间维度上的关键信息。这些属性帮助开发者理解媒体的播放范围、起始点、持续时间以及与设备时间或直播流的同步关系。

Timeline.Window 的时间相关属性如下:

属性名类型描述
presentationStartTimeMslong媒体可播放的最早时间(毫秒,相对于 Unix 纪元),通常用于直播,可能为 C.TIME_UNSET
windowStartTimeMslong窗口的实际开始时间(毫秒,相对于 Unix 纪元),通常用于直播,可能为 C.TIME_UNSET
elapsedRealtimeEpochOffsetMslong窗口开始时间与设备 elapsedRealtime() 的偏移量(毫秒),用于时间同步,可能为 C.TIME_UNSET
defaultPositionMslong默认播放起始位置(毫秒),相对于窗口开始,通常为 0 或上次播放位置。
durationMslong窗口总持续时间(毫秒),可能是 C.TIME_UNSET(如直播流)。
positionInFirstPeriodMslong窗口起始位置相对于第一个周期(period)的偏移量(毫秒)。

C.TIME_UNSET(值为 -9223372036854775807L)表示时间未设置,常用于直播或未完全加载的媒体。属性分为绝对时间(相对于 Unix 纪元,如 presentationStartTimeMs)和相对时间(相对于窗口内部,如 defaultPositionMs)。

presentationStartTimeMs
  • 类型long(毫秒)
  • 含义
    • 表示媒体内容可播放的最早时间,基于 Unix 纪元(1970-01-01 00:00:00 UTC)。
    • 通常用于直播流,定义直播内容的理论开始时间。
    • 如果未设置(C.TIME_UNSET),表示时间未知(常见于点播或未加载完成的直播)。
  • 用途
    • 帮助播放器确定直播流的有效时间范围。
    • 用于计算直播流的延迟(currentPosition - presentationStartTimeMs)。
  • 在窗口时间轴上的位置
    • 通常是时间轴的最左侧点,表示窗口可播放的最早时间。
    • 如果为 C.TIME_UNSET,在时间轴上可能是未定义的起点(用虚线或注释表示)。
  • 示例
    • 假设直播流在 2023-10-01 10:00:00 UTC 开始,presentationStartTimeMs 可能为 1696154400000(毫秒)。
windowStartTimeMs
  • 类型long(毫秒)
  • 含义
    • 表示窗口的实际开始时间,基于 Unix 纪元,可以落后presentationStartTimeMs一天或者更久,是window实际开播时间。
    • 通常用于直播流,表示播放器可以访问的直播内容的开始时间(可能比 presentationStartTimeMs 稍晚)。
    • 如果未设置(C.TIME_UNSET),表示时间未知(常见于点播或直播缓冲区未初始化)。
  • 用途
    • 确定直播窗口的实际可播放范围。
    • elapsedRealtimeEpochOffsetMs 结合,用于同步设备时间和直播时间。
  • 在窗口时间轴上的位置
    • 位于 presentationStartTimeMs 之后(或重叠),是时间轴的实际起点
    • 在直播场景中,它通常是播放器开始加载内容的时刻。
    • 如果为 C.TIME_UNSET,在时间轴上可能是未定义的起点。
  • 示例
    • 直播流可能在 presentationStartTimeMs 后几秒开始缓冲,windowStartTimeMs1696154405000(比 presentationStartTimeMs 晚 5 秒)。
elapsedRealtimeEpochOffsetMs
  • 类型long(毫秒)
  • 含义
    • 表示 windowStartTimeMs(Unix 纪元时间)与设备 elapsedRealtime()(设备启动后的毫秒数)之间的偏移量。
    • 公式:windowStartTimeMs = elapsedRealtime() + elapsedRealtimeEpochOffsetMs
    • 用于同步直播流的绝对时间与设备本地时间。
    • 如果未设置(C.TIME_UNSET),表示无法同步(常见于点播或直播未提供时间信息)。
  • 用途
    • 在直播场景中,帮助播放器将本地时间转换为直播流的绝对时间。
    • 用于精确计算直播流的当前播放位置(currentPositionMs + elapsedRealtimeEpochOffsetMs)。
  • 在窗口时间轴上的位置
    • 不在时间轴上的直接点,而是作为 windowStartTimeMs 的参考偏移。
    • 在图中通常标注为时间轴外的箭头或注释,指向 windowStartTimeMs,表示偏移关系。
  • 示例
    • 如果 windowStartTimeMs = 1696154405000,当前 elapsedRealtime() = 1000000,则 elapsedRealtimeEpochOffsetMs = 1696154405000 - 1000000
defaultPositionMs
  • 类型long(毫秒)
  • 含义
    • 表示播放器默认开始播放的位置,相对于窗口的逻辑起点(通常是 windowStartTimeMs 或窗口的 0 点)。
    • 对于点播,通常为 0(从头播放)或上次播放位置(续播)。
    • 对于直播,通常接近窗口的末端(最新可用内容)。
  • 用途
    • 确定播放器初始化时的播放位置。
    • 用户可以通过 seekTo(defaultPositionMs) 跳转到该位置。
  • 在窗口时间轴上的位置
    • 位于时间轴的起始段,通常接近窗口的逻辑起点(0mswindowStartTimeMs)。
    • 在点播中,它可能是时间轴的 0 点;在直播中,它可能靠近 durationMs 的末端。
  • 示例
    • 点播视频:defaultPositionMs = 0(从头开始)。
    • 直播流:defaultPositionMs = 30000(距离窗口末端 30 秒)。
durationMs
  • 类型long(毫秒)
  • 含义
    • 表示窗口的总持续时间(毫秒),从逻辑起点到结束。
    • 对于点播,是视频的总长度(如 3600000ms 表示 1 小时)。
    • 对于直播,可能是缓冲区长度,或 C.TIME_UNSET(表示未知,如无限直播)。
  • 用途
    • 确定播放器可播放的时间范围。
    • 用于进度条显示和 seek 操作(seekTo(positionMs < durationMs))。
  • 在窗口时间轴上的位置
    • 表示时间轴的整个长度,从逻辑起点(通常 defaultPositionMs 或 0)到结束点。
    • 如果为 C.TIME_UNSET,时间轴末端可能是开放的(用箭头或虚线表示)。
  • 示例
    • 点播:durationMs = 600000(10 分钟视频)。
    • 直播:durationMs = C.TIME_UNSET(无限直播)或 60000(60 秒缓冲区)。
positionInFirstPeriodMs
  • 类型long(毫秒)
  • 含义
    • 表示窗口的逻辑起点相对于第一个周期(Timeline.Period)的偏移量。
    • Timeline 由多个周期组成,每个周期可能代表媒体的一个片段(如 HLS 的分片)。
    • 该属性定义窗口的起始点在第一个周期内的具体位置。
  • 用途
    • 用于多周期媒体(如 DASH、HLS)中,确定窗口与周期的相对位置。
    • 帮助播放器在周期边界正确 seek 或切换。
  • 在窗口时间轴上的位置
    • 位于 defaultPositionMs 附近,通常是子偏移,表示窗口起点在第一个周期内的位置。
    • 如果窗口只有一个周期,positionInFirstPeriodMs 可能等于 defaultPositionMs
  • 示例
    • HLS 流,第一个周期为 10 秒,窗口从第 5 秒开始:positionInFirstPeriodMs = 5000

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

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

相关文章

【Python爬虫电商数据采集+数据分析】采集电商平台数据信息,并做可视化演示

前言 随着电商平台的兴起&#xff0c;越来越多的人开始在网上购物。而对于电商平台来说&#xff0c;商品信息、价格、评论等数据是非常重要的。因此&#xff0c;抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序&a…

工业相机的芯片CRA角度与镜头选型的匹配关系

工业相机的芯片CRA角度与镜头选型的匹配关系 Baumer工业相机​工业相机的芯片CRA角度的技术背景​工业相机的芯片CRA的信息CRA相差过大的具体表现怎样选择工业相机sensor的CRABaumer工业相机sensor的CRA工业相机的芯片CRA角度与镜头匹配好的优点 Baumer工业相机 工业相机是常用…

深度学习中常见的矩阵变换函数汇总(持续更新...)

1. 转置操作 (Transpose) 概念&#xff1a;将矩阵的行和列互换应用场景&#xff1a; 在卷积神经网络中转换特征图维度矩阵乘法运算前的维度调整数据预处理过程中的特征重排 原始矩阵 A [[1, 2, 3], 转置后 A^T [[1, 4],[4, 5, 6]] [2, 5],[3, 6]]代码…

day 14 SHAP可视化

一、原理——合作博弈论 SHAP&#xff08;SHapley Additive exPlanations&#xff09;是一种用于解释机器学习模型预测结果的方法&#xff0c;它基于合作博弈论中的 Shapley 值概念。Shapley 值最初用于解决合作博弈中的利益分配问题。假设有 n 个参与者共同合作完成一项任务并…

从0开始学习大模型--Day03--Agent规划与记忆

规划&#xff08;planning&#xff09; 规划&#xff0c;可以为理解观察和思考。如果用人类来类比&#xff0c;当我们接到一个任务&#xff0c;我们的思维模式可能会像下面这样: 1、首先会思考怎么完成这个任务。 2、然后会审视手头上所拥有的工具&#xff0c;以及如何使用这…

使用 Couchbase Analytics Service 的典型步骤

下面是使用 Couchbase Analytics Service 的典型步骤&#xff0c;包括部署、配置、创建数据集、运行查询以及监控优化等环节。 首先&#xff0c;您需要安装并启用 Analytics 服务&#xff1b;然后将节点加入集群并重平衡&#xff1b;接着在 Analytics 中映射数据服务的集合&am…

从零开始学习人工智能(Python高级教程)Day6-Python3 正则表达式

一、Python3 正则表达式 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 在 Python 中&#xff0c;使用 re 模块来处理正则表达式。 re 模块提供了一组函数&#xff0c;允许你在字符串中进行模式匹配、搜索和替换操作。 r…

MATLAB导出和导入Excel文件表格数据并处理

20250507 1.MATLAB使用table函数和writetable函数将数据导出Excel表格文件 我们以高斯函数为例子&#xff0c;高斯函数在数学和工程领域有着广泛的应用&#xff0c;它的一般形式为&#xff1a; 其中是均值&#xff0c;决定了函数的中心位置&#xff1b; 是标准差&#xff0c;决…

推荐一组WPF自定义控件开源项目

.Net Core从零学习搭建权限管理系统教程 推荐一组WPF自定义控件开源项目。 项目简介 这是基于WPF开发的&#xff0c;为开发人员提供了一组方便使用自定义组件&#xff0c;并提供了各种常用的示例。 包含组件&#xff1a;数据表格、属性列表、树形列表、选色器、单选框列表、…

allegro出gerber时,单击Artwork并没有弹窗的问题

使用allegro出gerber时&#xff0c;有时点击 Artwork图标并未如愿以偿的弹出窗口。。。 可按下面尝试恢复&#xff0c;注&#xff0c;删除前可先备份该两支文件。。。 看时间戳&#xff0c;删除最近的下面标红两支文件即可。

常用设计模式在 Spring Boot 项目中的实战案例

引言​ 在当今的软件开发领域&#xff0c;Spring Boot 以其高效、便捷的特性成为构建 Java 应用程序的热门框架。而设计模式作为软件开发中的宝贵经验总结&#xff0c;能够显著提升代码的可维护性、可扩展性和可复用性。本文将深入探讨几种常用设计模式在 Spring Boot 项目中的…

《饶议科学》阅读笔记

《饶议科学》 《偷窃的生物学机制&#xff1a;&#xff08;有些&#xff09;小偷有药可治》阅读笔记 核心内容&#xff1a;探讨偷窃狂&#xff08;kleptomania&#xff09;的生物学机制及相关研究。具体要点 偷窃狂的特征&#xff1a;患者不可抑制地反复偷窃个人不需要、与金钱…

从零开始搭建第一个Spring Boot应用:从入门到精通

1. Spring Boot简介与核心概念 1.1 什么是Spring Boot&#xff1f; Spring Boot是Spring框架的一个扩展&#xff0c;它简化了基于Spring的应用程序的初始搭建和开发过程。通过自动配置和约定优于配置的原则&#xff0c;Spring Boot让开发者能够快速启动和运行项目。 通俗理解…

c# LINQ-Query01

文章目录 查询数据源标准查询分两类即时查询已推迟流式处理非流式处理分类表聚合Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)Aggregate<TSour…

AI恶魔之眼使用说明书

AI恶魔之眼使用说明书 产品简介 1.1 产品介绍 AI恶魔之眼是一款具备动态视觉效果与仿生眼睛模拟功能的智能显示产品&#xff0c;可实现以下特性&#xff1a; 真实人眼模拟&#xff1a;支持虹膜样式变换、眨眼动画、瞳孔缩放等动态特效&#xff0c;仿真度高自定义内容上传&am…

CAN报文逆向工程

在没有DBC文件的情况下解析CAN报文获取物理信息需要逆向工程和系统分析。以下是详细步骤&#xff1a; 1. 数据采集与基础分析 采集原始数据&#xff1a; 使用CAN分析工具&#xff08;如PCAN-Explorer、SavvyCAN或USB-CAN适配器配套软件&#xff09;记录车辆在不同状态下的CAN数…

KL散度(Kullback-Leibler Divergence):概率分布差异的量化利器

目录 1. 什么是KL散度?关键特点:2. KL散度的数学公式离散分布的KL散度公式:连续分布的KL散度公式:3. KL散度的计算示例示例1:离散分布示例2:连续分布(高斯分布)4. KL散度的核心性质1. 非对称性2. 非负性3. 与熵的关系5. KL散度与相关性的关系1. KL散度 ≠ 相关性2. 间接…

二叉树的遍历与构造

唉&#xff0c;好想回家&#xff0c;我想回家跟馒头酱玩&#xff0c;想老爸老妈。如果上天再给我一次选择的机会&#xff0c;我会选择当一只小动物&#xff0c;或者当棵大树也好&#xff0c;或者我希望自己不要有那么多多余的情绪&#xff0c;不要太被别人影响&#xff0c;开心…

leetcode 141. Linked List Cycle

题目描述&#xff1a; 代码&#xff1a; 用哈希表也可以解决&#xff0c;但真正考察的是用快慢指针法。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Soluti…

AI辅助DevOps与自动化测试:重构软件工程效率边界

随着AI技术渗透至软件开发生命周期&#xff0c;DevOps与自动化测试领域正经历颠覆性变革。本文系统性解析AI在需求分析、测试用例生成、部署决策、异常检测等环节的技术实现路径&#xff0c;结合微软Azure DevOps、Tesla自动驾驶测试等典型场景&#xff0c;探讨AI如何突破传统效…