我的应用程序需要录制具有暂停和恢复功能的视频采访,并将这些多个片段捕获到文件中。
我正在使用directshow.net将摄像机流捕获到预览窗口和avi文件中,并且可以正常工作,除了每当我开始记录新片段时,我都会覆盖文件,而不是附加。相关代码为:
captureGraphBuilder.SetOutputFileName( ref mediaSubType, Filename, out muxFilter, out fileWriterFilter )
如何创建捕获图,以便将捕获附加到文件而不是覆盖文件?
答案 0 :(得分:1)
大多数媒体文件/格式,尤其是AVI,都不假定或不允许附加。录制时,将填充媒体文件,然后在完成时对其进行最终确定。通常,您无法选择“取消最终确定”并继续录制。
您看到的覆盖症状是编写过滤器实现的副作用。您可以轻松切换到没有附加vs覆盖模式。
基本上,您的选择如下(按照从小到大的发展顺序):
每次记录新的媒体文件,然后运行一个外部工具(例如FFmpeg),该工具可以连接媒体并根据片段生成新的连续文件。
实施一个DirectShow过滤器,该过滤器可以插入管道(尤其是在两种情况下,用于视频和音频)插入管线,该过滤器可以实现暂停/恢复行为。一旦暂停,过滤器将丢弃新的媒体数据,一旦恢复,它将再次开始传递它们,分别修改时间戳以模仿连续流。捕获图将在所有段和暂停处处于运行状态。
实施一个自定义的多路复用器和/或写入器过滤器,该过滤器能够读取现有文件并追加新媒体,以便文件本身在完成时始终以旧段和新段连续完成。
< / li>上面的项目#3在技术上可以实现,但我认为根本不存在这样的实现:解决方法总是更容易实现。 #2是解决上述任务的一种假定方法,但是由于您正在使用DirectShow.NET进行C#开发,因此我认为从这个角度解决挑战将有些困难。 #1相对容易实现,所涉及的成本是外部工具的使用。