【发布时间】:2011-12-20 15:16:12
【问题描述】:
我正在尝试基于 DirectShow SDK 中的 pushsource 示例创建 DirectShow 源过滤器。这实际上将一组位图输出到视频。我已经设置了一个过滤器图,它使用 Async_reader 和 Wave Parser 用于音频和我的新过滤器来推送视频(过滤器是 CSourceStream,我在 FillBuffer 函数中填充我的帧)。它们都连接到 WMASFWriter 以输出 WMV。
每个位图可以持续几秒钟,因此在 FillBuffer 函数中,我在传递的 IMediaSample 上调用 SetTime,开始和结束时间相隔几秒钟。这在渲染到屏幕时效果很好,但写入磁盘会导致文件持续时间太短。在编写 WMV 时,似乎最后一个位图被忽略了(它显示为视频结束而不是持续到预期的持续时间)。我的过滤器和修改后的 pushsource 过滤器都是这种情况(其中帧长度已增加)。
我看到了其他奇怪的行为,因为在我尝试制作时,不可能有一个长度不是 10 秒倍数的视频。我不确定这是什么,但我会提到它以防万一。
【问题讨论】:
标签: c++ directshow