一 概述
Media Source Extension允许 JavaScript 动态构造用于 <音频> 和 <视频> 的媒体流。它定义了一个 MediaSource 对象,该对象可以用作 HTMLMediaElement 的媒体数据源。MediaSource 对象具有一个或多个源缓冲区
对象。应用程序将数据段追加到SourceBuffer
对象,并可以根据系统性能和其他因素调整附加数据的质量。来自SourceBuffer 对象
的数据作为解码和播放的音频、视频和文本数据的跟踪缓冲区进行管理。这些扩展使用的字节流规范可在字节流格式注册表中提供 [MSE-REGISTRY]。
1.1目标
此规范的设计符合以下目标:
- 允许 JavaScript 构造媒体流,与获取媒体进行访问时无关。
- 定义拼接和缓冲模型,以方便自适应流、广告插入、时间转换和视频编辑等用例。
- 最大限度地减少 JavaScript 中对媒体分析需求。
- 尽可能多地利用浏览器缓存。
- 提供字节流格式规范的要求。
- 不需要支持任何特定的媒体格式或编解码器。
此规范定义:
- 用户代理的规范行为,用于在处理媒体数据时实现用户代理和 Web 应用程序之间的互操作性。
- 使其他规范能够定义要在此规范中使用的媒体格式的规范要求。
1.2定义
活动轨道缓冲区
为 提供和 的编码帧的轨道缓冲区。所有这些轨道都与列表中的源缓冲区
对象关联。enabled
audioTracks
selected
videoTracks
"showing"
"hidden"
textTracks
activeSourceBuffers
追加窗口
用于在追加时筛选出编码帧的表示时间戳范围。追加窗口表示单个连续时间范围,具有单个开始时间和结束时间。允许将具有此范围内的表示时间戳的编码帧追加到 SourceBuffer 中,
而筛选出此范围外的编码帧。追加窗口的开始和结束时间分别由 和 属性控制。appendWindowStart
appendWindowEnd
编码框架
编码帧持续时间
编码框架的持续时间。对于视频和文本,持续时间指示视频框架或文本的显示时间。对于音频,持续时间表示编码帧中包含的所有样本的总和。例如,如果音频帧包含 441 个@44100Hz帧持续时间为 10 毫秒。
编码帧结束时间戳
编码帧表示时间戳及其编码帧持续时间的总和。它表示紧跟编码帧的表示时间戳。
编码帧组
一组相邻且具有单调增加解码时间戳且没有任何间隙的编码帧。编码帧处理算法检测到的不连续性和调用将触发新的编码帧组的开始。abort()
解码时间戳
解码时间戳指示帧需要解码的最新时间,假设此帧和任何相关帧的瞬时解码和渲染(这等于最早帧的表示时间戳,按表示顺序,取决于此帧)。如果帧可以按表示顺序解码,则解码时间戳必须存在于字节流中或可从字节流派生。如果情况并非如此,用户代理必须运行追加错误算法。如果帧无法按表示顺序解码,并且字节流中不存在解码时间戳,则解码时间戳等于表示时间戳。
初始化段
包含解码一系列媒体段所需的所有初始化信息的字节序列。这包括编解码器初始化数据、多路复用段的轨道 ID 映射和时间戳偏移(例如编辑列表)。
媒体细分
包含部分媒体时间线的分组和时间戳媒体数据的字节序列。媒体段始终与最近追加的初始化段关联。
媒体源对象 URL
MediaSource 对象 URL 是 创建的唯一Blob URI [FILE-API]。它用于将MediaSource 对象
附加到 HTMLMediaElement。createObjectURL()
这些 URL 与 Blob URI 相同,只不过该功能定义中引用文件和 Blob 对象的内容特此扩展为也应用于MediaSource
对象。
MediaSource对象 URL 的源是调用 期间的相关设置对象。thiscreateObjectURL()
父媒体源
源缓冲区对象的父媒体源
是创建该对象的 MediaSource
对象。
演示文稿开始时间
演示文稿开始时间是演示文稿中最早的时间点,并指定初始播放位置和最早可能的位置。使用此规范创建的所有演示文稿的演示文稿开始时间为 0。
演示间隔
编码帧的表示间隔是从其表示时间戳到表示时间戳以及编码帧的持续时间的时间间隔。例如,如果编码帧的表示时间戳为 10 秒,编码帧持续时间为 100 毫秒,则表示间隔为 +10-10.1)。请注意,范围的开始是包含的,但范围的末尾是独占的。
演示顺序
在演示文稿中呈现编码帧的顺序。表示顺序是通过按其表示时间戳单调地增加顺序来订购编码帧实现的。
演示文稿时间戳
对演示文稿中特定时间的引用。编码框架中的表示时间戳指示应渲染帧的时间。
随机接入点
媒体段中无需依赖段中任何先前数据即可开始解码和连续播放的位置。对于视频,这往往是 I 帧的位置。对于音频,大多数音频帧可以被视为随机访问点。由于视频轨道往往具有更稀疏的随机访问点分布,因此这些点的位置通常被视为多路复用流的随机访问点。
源缓冲区字节流格式规范
描述SourceBuffer 实例接受的字节流的格式的特定字节流格式
规范。SourceBuffer 对象的字节流格式
规范是根据传递给创建对象的调用的来选择。typeaddSourceBuffer()
源缓冲器配置
分布在单个MediaSource
实例拥有的一个或多个SourceBuffer
对象上的特定轨道集。
实现必须支持至少 1个 MediaSource
对象,具有以下配置:
- 具有 1 个音轨和/或 1 个视频轨道的单个源缓冲区。
- 两个源缓冲区,一个处理单个音轨,另一个处理单个视频轨道。
MediaSource对象必须支持上述每个配置,但它们一次只需要支持一个配置。一次支持多个配置或附加配置是实现质量问题。
曲目描述
为单个轨道提供轨道 ID、编解码器配置和其他元数据的字节流格式特定结构。单个初始化段内的每个轨道描述都有一个唯一的轨道 ID。如果跟踪id 在初始化段中不唯一,则用户代理必须运行追加错误算法。
轨道 ID
轨道 ID 是一个字节流格式特定标识符,它将字节流的部分标记为特定轨道的一部分。轨道描述中的"轨道 ID"标识媒体段的哪些部分属于该轨道。
文章源自 https://www.w3.org/TR/media-source/#mediasource