如何创建可流式传输和可搜索的 MP4?

如何创建可流式传输和可搜索的 MP4?

我想创建一个支持搜索和流式传输的 MP4。DASH 似乎是我想要的,但段搜索点存储在外部文件 (MPD) 中,这对我的应用程序不起作用;我需要搜索元数据包含在 MP4 中。

下一个最接近的似乎是使用 mfra 盒的碎片化 MP4。我认为这会起作用,但似乎没有得到很好的支持(mplayer 和 totem 无法定位,最近的 ffplay 可以)。虽然主要应用程序是流媒体(具有定位功能),但我不愿意放弃在“标准”播放器上播放文件中的视频的能力。

有什么方法可以制作可流式传输、可搜索且可在标准视频播放器中播放的 MP4 吗?

如果我放弃在标准视频播放器上播放的能力,mfra 是最好的选择吗?

编辑:我所说的流式传输是指 HTTP 渐进式下载。

答案1

通过 HTTP 搜索任何 MP4 文件都或多或少很简单。

如果文件没有碎片,所有搜索信息都位于“moov”框中,因此没有问题。这就是mp4box.js演示。如果数据组织得不好,就必须进行多个 HTTP 字节范围请求。如果标头框在前(ftyp、moov ...),并且媒体数据交错,则更容易。MP4盒可以用来生成这样的文件:

MP4Box -add file.mp4 output.mp4

如果文件是碎片化的,那么搜索信息确实会分散在整个文件中,虽然可以使用“mfra”框,但它得不到很好的支持并且不可靠。

如果操作得当,分段(如 DASH 中所用)也可用于制作 HTTP 可查找文件。如果您对文件进行分段,强制使用单个分段文件,则所有数据将位于单个文件中(而不是多个分段文件中)。如果您添加“sidx”框,则文件中将包含索引信息(无需 MPD)。要同时实现两者,您可以使用 DASH 按需配置文件和 MP4Box 来对文件进行分段:

MP4Box -dash 1000 -profile ondemand file.mp4 

相关内容