2011-06-15 44 views
1

我正在使用一个简单的DirectShow图形将一些视频转换为WMV格式,该格式工作正常。我现在试图使用基于Synth Filter示例的过滤器为视频提供静音音轨,但我遇到了一些问题。生成静音音轨

本质上,我不知道如何在连接此滤波器(合成器滤波器)时停止图形。我猜是因为它只是提供样本,直到有人告诉它停止,通常在过滤器图上调用IMediaEvent :: WaitForCompletion的方法不起作用(图永远不会停止)。我希望它做的当然是视频源过滤器完成后立即停止。

我试着用IMediaSeeking :: GetPositions跟踪图的位置,然后在超过源文件的持续时间时手动停止图,但用这种方法停止时间的准确性并不好。

任何人都可以想到一个更好的方法来做到这一点?我是否需要另一个过滤器来监视视频源的输出,并且还有一个指向音频源的指针,以便在视频源提供EndOfStream后立即停止它?有没有办法从纯粹的应用程序代码完成此任务?

回答

1

我在过去做过的事情与我自己不太一样。我添加了对IMediaSeeking到静音生成器过滤器的支持,然后您需要确保设置转换的开始和停止时间(即使它只是0和持续时间),以便静音生成器可以生成适量的音频然后发送EOS。

G

+0

谢谢Geraint,我会试试看。顺便说一句,我们试图做到这一点的原因是我们可以用您的GMF Bridge播放结果文件,而不必担心在运行中添加/删除音频流。 – eodabash 2011-06-16 18:35:55