将非同步流复用到Haali

时间:2016-04-06 16:09:52

标签: directshow mp4

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

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

我找不到与Haali muxer进行多路复用的文档方式,有没有人知道在这个过滤器上查找信息的最佳位置?

1 个答案:

答案 0 :(得分:2)

要将流复用到单个MP4文件中,您需要单个多路复用器实例(Haali,GDCL,商用,通过mp4v2库封装,通过Media Foundation接收器等),其上有两个(或更多)输入引脚连接到各自的源,反过来将被写成曲目。

过滤器图形时钟无关紧要。时钟用于演示,文件编写者接受传入的数据并尽快写入。正如您似乎已经在做的那样,移除时钟更准确,但标准时钟不会有所不同。

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

要在生成的MP4文件中获取同步数据,您需要确保有效负载数据已正确加盖时间戳。多路复用器将负责其余部分。

这还包括时间戳应该在流内单调增加,并且分别指示关键帧/拼接点。否则,某些多路复用器可能会立即发出故障,其他多路复用器会产生输出文件,但可能会出现播放问题(特别是寻找)。