【发布时间】:2011-12-11 22:03:07
【问题描述】:
我正在尝试将 GDCL MP4 Muxer 与我的 RTSP 源过滤器一起使用。它们一起工作得很好,除非在停止图形之后,muxer 不会完成文件并通过文件写入器将所需的表写入文件末尾(某些部分是从 moov 而不是时间表值开始写入的)。当我尝试另一个 RTSP 源过滤器(我没有它的源代码)时,表值是使用 GDCL MP4 Muxer 创建的。
但是当我尝试使用 Elecard 的 MP4 Muxer 时,它可以很好地与我的 RTSP 源过滤器配合使用。所以,存在不兼容。我检查了 GDCL 的源代码,但找不到它对我的期望。我已经使用SetTime 方法计算并将时间戳值设置为样本。但是 GDCL 仍然没有完成文件。是图表停止时缺少信息还是缺少信号造成的?可能是什么问题,有什么想法吗?
【问题讨论】:
-
您可能需要向 muxer 发送 EOS 通知,以使其最终确定输出文件。
-
我同意并且已经用 DeliverEndOfStream() 尝试过,但它没有用。奇怪的是,“moov”部分正在最后创建(大约 600 字节长),但只有表值丢失。因此,muxer 知道流式传输已经结束,但并未完成工作。由于这些表是帧时间戳值等,我怀疑这是由于缺少时间信息造成的。我添加了 SetTime,其他一些复用器开始工作。我也尝试发送媒体时间。这次 GDCL mp4 muxer 在流开始时崩溃,其他 muxer 工作。
-
我想我会调试 GDCL mp4 muxer 看看有什么问题。我问了我是否遗漏了一些明显的问题。
-
我在 GDCL Mux 中遇到的另一件事:您必须提供样本停止时间。仅将开始时间附加到视频帧可能听起来仍然不错,但这会使多路复用器感到困惑。或者,您需要在 mux 中解决此问题。然而,这更有可能留下一个空的 .MP4 文件而不是不完整的文件,但它仍然值得检查。
-
终于!!! :) 请将此作为答案写下来,以便我接受。 :D
标签: streaming directshow mp4 rtsp multiplexing