将非同步流复用到 Haali

Muxing non-synchronised streams to Haali

我有 2 个输入数据流正在传递给 Haali Muxer(mp4 格式)。

目前我在没有时钟的情况下直接在 DirectShow 图中将这些流式传输到 Haali。我想知道我是否应该尝试将这些同步写入多路复用器,或者它是否愉快地接受在视频数据流停止之前停止的音频数据流。 (我遇到了输出文件在搜索后无法播放音频的问题,我不确定为什么会出现这种情况)

我找不到太多关于使用 Haali 混合器进行混合的文档,有谁知道查找有关此过滤器的信息的最佳位置吗?

要将流多路复用到单个 MP4 文件中,您需要多路复用器的单个实例(Haali、GDCL、商业、mp4v2 库上的包装器、媒体基础接收器等),其上有两个(或更多)输入引脚连接到各自的来源,这些来源又将被写入曲目。

过滤图形时钟无关紧要。时钟用于表示,文件编写器接受传入数据并尽快写入。删除时钟更准确,因为您似乎已经在做,但是拥有标准时钟不会有什么不同。

使用各个媒体样本(媒体流的一部分)上的时间戳同步数据。多路复用器为每个流构建内部队列,然后使用流中的数据构建单个文件,以一种原始流数据交错的方式。如果一个流提供太多数据,也就是说,如果数据可用得太早而另一个流提供数据缓慢,则多路复用器通过不从相应的处理调用(IPin::Receive)返回来阻止对该特定流的进一步数据接收,期望在这个等待慢流提供了额外的输入。最终,多路复用器在匹配来自不同流的数据时看的是数据时间戳。

因此,要在生成的 MP4 文件中获取同步数据,您需要确保有效负载数据带有正确的时间戳。多路复用器会处理剩下的事情。

这也包括时间戳在一个流内单调递增,分别标明关键frames/splice点。否则一些多路复用器可能会立即发出故障,其他会产生输出文件但它可能有播放问题(尤其是寻找)。