Summary本说明通过允许javascript生成可以播放的流媒体来扩展HTMLMediaElement[HTML51]对象。允许javascript生成流有利于许多用途,例如自适应流和带时移的实时流。1.引言本部分是非规范性的。此功能允许JavaScript为和动态创建媒体流。它定义了一个MediaSource对象来为HTMLMediaElement提供媒体数据的来源。MediaSource对象具有一个或多个SourceBuffer对象。浏览器应用向SourceBuffer对象添加数据段(datasegments),然后根据系统性能等因素适配后续不同质量的数据。SourceBuffer对象中的数据被组织成轨道缓冲区格式,用于需要编码和播放的音频、视频和文本信息。用于扩展的二进制流格式结构如下图所示:1.1目标是让js创建一个媒体流,独立于正常的拉取播放方式。定义拆分和缓存模式以加速自适应流、广告插入、时间戳转换、视频编辑。尽量减少js中的媒体解析,尽量管理浏览器的播放缓存。提供二进制流格式操作。没有必要支持特定的媒体格式和编解码器(codec)。该规范定义了浏览器和网络应用程序如何处理媒体数据。1.2特定行为的一些定义媒体格式的其他定义ActiveTrackBuffers一种轨道缓冲区,它为活动音轨、选定的视频轨道以及正在显示或隐藏的字幕轨道提供编码帧的集合。这些轨道与activeSourceBuffers列表中的SourceBuffer对象相关。AppendWindow用于在添加缓冲区时过滤编码帧的点范围。追加窗口表示具有单一开始和结束时间的连续时间间隔。只有在这个时间间隔内有pts的编码帧才允许添加到SourceBuffer中,其余的将被过滤掉。附加窗口的开始和结束时间分别由两个属性appendWindowStart和appendWindowEnd控制。编码帧具有呈现时间戳(pts)、解码时间戳(dts)和编码帧持续时间的媒体数据单元。编码帧持续时间编码帧的持续时间。对于视频和文本,持续时间是指视频帧或文本需要显示的时间长度。对于音频,持续时间是指此帧中包含的样本的总和。例如:采样率为@44100Hz且包含441个样本的音频帧的持续时间为10毫秒。编码帧组一组振铃、dts单调递增的编码帧集合,没有间隙。如果编码帧处理算法检测到不连续片段,将触发abort方法从新的编码帧组开始播放。DecodeTimestamp解码时间戳(通常称为dts)表示最新一帧,任何一个独立的帧都需要解码(假设可以立即解码渲染,应该等于这个呈现顺序中最先渲染的帧pts)。如果帧无法按渲染顺序解码或没有dts,则dts等于pts。初始化段一系列二进制数据,包含解码媒体段序列所需的初始化信息。包括编解码器初始化信息、多通道段TrackID映射和时间戳偏移量等。MediaSegment媒体数据二进制数据序列,包括封装信息和时间戳信息。MediaSegment始终与新添加的初始化段相关。MediaSource对象URLMediaSource对象URL是由createObjectURL()方法生成的唯一BlobURI。用于将MediaSource对象绑定到HTMLMediaElement元素。父媒体源SourceBuffer对象的父媒体源是创建它的媒体源对象。呈现开始时间呈现开始时间呈现间隔编码帧的呈现间隔是从pts到pts+编码帧的持续时间的时间间隔。例如,如果一帧的pts为10s,编码帧持续时间为100ms,则呈现间隔为[10-10.1)。注:开始时间为闭区间,结束时间为开区间。PresentationOrder编码帧渲染顺序。呈现顺序是根据单调递增的pts排列编码帧得到的。PresentationTimestamp视频帧显示的具体时间,表示该帧应该在什么时候被播放器渲染。RandomAccessPoint一个媒体片段可以不依赖于先前数据解码的位置而连续播放。对于视频,就是I帧的位置,对于音频,大部分帧都可以作为随机访问点。因为videotrack的随机接入点分布比较稀疏,所以这些位置通常被认为是multiplexedstream的随机接入点(multiplexedstreams,我的理解是音视频混合的流)。SourceBuffer字节流格式规范字节流格式规范属性描述了SourceBuffer实例允许的二进制流格式。它基于传递给addSourceBuffer()方法的类型。SourceBuffer配置MediaSource实例下一个或多个SourceBuffer对象中的轨道集合。MediaSource对象必须至少支持以下设置之一:一个带有音频和/或视频的SourceBuffer两个SourceBuffer,一个用于音轨,一个用于视频轨TrackDescription提供单个轨道所需的TrackID的二进制流数据结构,编解码器设置和其他元数据。初始化段的每个轨道描述都需要一个唯一的轨道ID。如果它不是唯一的,则浏览器必须实施追加错误算法。TrackID用于标识二进制流数据属于哪个轨道。每个轨道描述中的轨道ID标识媒体段所属的轨道。
OfficialMediaSourceExtensionDocumentation(Part1)相关文章