如何捕获网络摄像头并附加到文件?

How can I capture a webcam and append to a file?

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

我正在使用 directshow.net 将相机流捕获到预览 window 和一个 avi 文件,并且它有效,除了每当我开始录制新片段时,我 覆盖 avi 文件而不是附加。相关代码为:

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

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

大多数媒体 files/formats,特别是 AVI,不假定或不允许附加。录制时,您会填充媒体文件,然后在完成时将其定稿。您通常没有 "unfinalize" 和恢复录制的选项。

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

你的选择基本上有以下几种(按照由少到多的发展顺序):

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

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

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

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