如何使用DirectShow文件写入器将多个段输出到同一文件?

时间:2014-04-08 16:19:19

标签: directshow

我创建了一个DirectShow图,基本上是:

      Mp4 file->mp4 demux->mp4 mux->file writer

在graphedit中,我的图表运行并完美地将源复制到目标文件。

在我的代码中,我使用IMediaSeeking在我想要导出的剪辑之间移动。只要我在每次搜索操作完成后更改文件名,这一切都可以正常工作。我从图中收到EC_COMPLETE消息的通知。

如果我不更改文件名,则只会在文件中显示最后一个剪辑。

对于任何大型输入文件,我可以提取多达100个五秒的剪辑,所以如果我可以避免它,我不希望在我的文件夹中有100个文件。看起来好像文件写入器每次使用IMediaControl.stop时都会将其内部文件指针重置为起始位置。

我尝试过使用EC_END_OF_SEGMENT和IMediaControl.Pause但是当我这样做时,我根本没有得到剪辑。我得到了EC_COMPLETES或EC_END_OF_SEGMENT通知的正确序列,但就好像过滤器刚刚停止工作一样。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:2)

当您停止图表时,多路复用器会将索引和元数据写出到文件中。最好的方法是使用GMFBridge之类的东西将源图与多路复用器/编写器图分开,以链接两个图。然后,您可以在不停止多路复用器的情况下更改,搜索或停止源。