首页 > 解决方案 > 如何捕获网络摄像头并附加到文件?

问题描述

我的应用程序需要录制能够暂停和恢复的视频采访,并将这些多个片段捕获到文件中。

我正在使用directshow.net将相机流捕获到预览窗口和 avi 文件,它可以工作,除了每当我开始录制新片段时,我会覆盖avi 文件而不是附加. 相关代码为:

captureGraphBuilder.SetOutputFileName( ref mediaSubType, Filename, out muxFilter, out fileWriterFilter )

如何创建捕获图,以便将捕获附加到文件而不是覆盖它?

标签: directshowdirectshow.net

解决方案


大多数媒体文件/格式,特别是 AVI,不假设或允许附加。录制时,您填充媒体文件,然后在完成时完成它。您通常没有“取消定稿”和恢复录制的选项。

您看到的覆盖症状是编写过滤器实现的副作用。没有可以轻松切换到的附加与覆盖模式。

您的选择基本上如下(按从少到多的顺序):

  1. 每次录制新的媒体文件,然后运行一个外部工具(如 FFmpeg),该工具能够连接媒体并从片段中生成新的连续文件。

  2. 实现一个插入到管道中的 DirectShow 过滤器(特别是在两个实例中,用于视频和音频),它能够实现暂停/恢复行为。一旦你暂停过滤器将丢弃新的媒体数据,一旦你恢复它就会再次开始传递它们分别修改时间戳以模拟连续流。捕获图将在所有段和暂停中处于运行状态。

  3. 实现一个自定义多路复用器和/或写入器过滤器,它能够读取现有文件并附加新媒体,以便文件本身在完成时再次完成新旧段,连续。

上面的第 3 项在技术上是可以实现的,但我认为根本不存在这样的实现:变通方法总是更容易实现。#2 是解决上述任务的一种假定方式,但由于您使用 DirectShow.NET 进行 C# 开发,我预计从这个角度解决挑战会有点困难。#1相对容易做到,所涉及的成本是使用外部工具。


推荐阅读