媒体源扩展(MSE)需要碎片化的mp4才能在浏览器中播放。
分段 MP4 包含一系列片段,如果您的服务器支持字节范围请求,则可以单独请求这些片段。
所有 MP4 文件都使用面向对象的格式,其中包含盒子又名原子。
您可以使用在线工具(例如 MP4 Parser)查看 MP4 中框的表示,或者如果您使用的是 Windows,则使用 MP4 Explorer。让我们来比较一下普通 MP4 和碎片 MP4:
此屏幕截图(来自 MP4 Parser)显示了一个尚未分段的 MP4,并且非常简单地有一个巨大的
mdat
(电影数据)框。
如果我们正在构建一个支持自适应比特率的视频播放器,我们可能需要知道 0.5Mbps 和 1Mbps 文件中 10 秒标记的字节位置,以便此时在两个文件之间切换视频源。确定每个文件中一个巨大的
mdat
中的确切字节位置并非易事。
此屏幕截图显示了一个碎片 MP4,已使用 MP4Box 和
onDemand
配置文件进行分段。
您会注意到
sidx
和一系列 moof
+mdat
框。 sidx
是段索引,存储 moof
+mdat
段的精确字节范围位置的元数据。
本质上,您可以独立加载
sidx
(其字节范围将在随附的 .mpd
媒体呈现描述符文件中定义),然后选择您想要随后加载并添加到 MSE SourceBuffer 的片段.
重要的是,每个片段都是按照您选择的固定间隔(即每 5 秒)创建的,因此片段可以在不同比特率的文件之间进行时间对齐,从而可以在播放期间轻松调整比特率。
媒体文件格式
媒体数据流被包装在容器格式中。该容器包括媒体的物理数据以及播放所需的元数据。例如,它向视频播放器发出编解码器信号 使用,字幕轨道等。在视频流中有两种主要格式 用于存储和呈现多媒体内容:MPEG- 2 传输流 (MPEG-2 TS)[25] 和 ISO 基础媒体文件格式 (ISOBMFF)[24](MP4 和碎片 MP4).
MPEG-2 传输流由[25]指定,设计用于 通过卫星网络广播视频。不过,苹果采用了 它的自适应流协议使其成为一种重要的格式。在 MPEG-2 TS 音频、视频和字幕流复用在一起。 MP4 和分段 MP4 (fMP4) 都是 MPEG-4 的一部分,部分 涵盖 ISOBMFF 的 12 个标准。 MP4 是最知名的多媒体 容器格式,并在不同操作系统中得到广泛支持 和设备。 MP4 视频文件的结构如图 2.2a 所示。 如图所示,MP4由不同的盒子组成,每个盒子都有不同的功能—— 本质。这些盒子是 MP4 中每个容器的基本构建块。
例如文件类型框(‘ftyp’),指定兼容品牌(特别是 文件的说明)。 MP4 文件有一个 Movie Box ('moov'),其中包含 对计时很重要的媒体文件和示例表的元数据 并对媒体样本建立索引(‘stbl’)。还有一个媒体数据框 ('mdat') 包含相应的样本。在碎片化的情况下 tainer,如图2.2b所示,使用Movie来交错媒体样本 包含特定示例表的片段框(‘moof’) 片段(mdat 框)。
参考:https://repository.tudelft.nl/islandora/object/uuid%3Ae06cde4c-1514-4a8d-90be-7e10eee5aac1