media - 碎片mp4(fMP4)到底是什么?和普通mp4有什么区别?

标签 media mp4 media-source fmp4

媒体源扩展 (MSE) 需要分段 mp4 才能在浏览器中播放。

最佳答案

分段 MP4 包含一系列片段,如果您的服务器支持字节范围请求,则可以单独请求这些片段。

盒子又名原子

所有 MP4 文件都使用面向对象的格式,其中包含 boxes aka atoms .

您可以使用在线工具(例如 MP4 Parser)查看 MP4 中的方框表示。或者如果您使用的是 Windows,MP4 Explorer 。让我们来比较一下普通 MP4 和碎片 MP4:

无碎片 MP4

此屏幕截图(来自 MP4 Parser)显示了一个尚未 splinter 的 MP4,并且非常简单地有一个巨大的 mdat(电影数据)框。

Representation of boxes within a normal, non fragmented MP4, generated using MP4 Parser

如果我们正在构建一个支持自适应比特率的视频播放器,我们可能需要知道 0.5Mbps 和 1Mbps 文件中 10 秒标记的字节位置,以便此时在两个文件之间切换视频源。确定每个文件中的大量 mdat 中的确切字节位置并非易事。

MP4碎片

此屏幕截图显示了一个碎片化的 MP4,它已使用 MP4Box 进行分段。使用 onDemand 配置文件。

Representation of boxes within a fragmented MP4, generated using MP4 Parser

您会注意到 sidxmoof+mdat 系列盒子。 sidx 是段索引,存储 moof+mdat 段的精确字节范围位置的元数据。

本质上,您可以独立加载sidx(其字节范围将在随附的.mpd媒体呈现描述 rune 件中定义),然后选择您要加载的片段我希望随后加载并添加到 MSE SourceBuffer .

重要的是,每个片段都是按照您选择的固定间隔(即每 5 秒)创建的,因此片段可以在不同比特率的文件之间进行时间对齐,从而可以在播放期间轻松调整比特率。

关于media - 碎片mp4(fMP4)到底是什么?和普通mp4有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177797/

相关文章:

ffmpeg - 有没有办法使用 ffmpeg 和附带的编解码器 AAC 到 AAC 来精确获取 1 秒的剪辑

gstreamer - 如何形成 gstreamer 管道来从 tiff 文件编码 mp4 视频?

html - Firefox 和 IE 上的媒体源扩展

HTML5 MediaSource 适用于某些 mp4 文件而不适用于其他文件(相同的编解码器)

java - Android:捕获的图像未显示在图库中(媒体扫描器 Intent 不起作用)

python - 一个非常简单的轻量级视频编辑器

silverlight - Silverlight Media Framework 中 Windows Phone 7 的全屏控制

video - FFmpeg 视频过滤器损坏 mp4 文件

video-streaming - 当用户寻找另一个时间时,计算 HTML5 视频流中的 .m4s 段文件后缀

android 媒体编解码器 : real time decoding h264 nals