directshow - 如何捕获网络摄像头并附加到文件?
问题描述
我的应用程序需要录制能够暂停和恢复的视频采访,并将这些多个片段捕获到文件中。
我正在使用directshow.net将相机流捕获到预览窗口和 avi 文件,它可以工作,除了每当我开始录制新片段时,我会覆盖avi 文件而不是附加. 相关代码为:
captureGraphBuilder.SetOutputFileName( ref mediaSubType, Filename, out muxFilter, out fileWriterFilter )
如何创建捕获图,以便将捕获附加到文件而不是覆盖它?
解决方案
大多数媒体文件/格式,特别是 AVI,不假设或允许附加。录制时,您填充媒体文件,然后在完成时完成它。您通常没有“取消定稿”和恢复录制的选项。
您看到的覆盖症状是编写过滤器实现的副作用。没有可以轻松切换到的附加与覆盖模式。
您的选择基本上如下(按从少到多的顺序):
每次录制新的媒体文件,然后运行一个外部工具(如 FFmpeg),该工具能够连接媒体并从片段中生成新的连续文件。
实现一个插入到管道中的 DirectShow 过滤器(特别是在两个实例中,用于视频和音频),它能够实现暂停/恢复行为。一旦你暂停过滤器将丢弃新的媒体数据,一旦你恢复它就会再次开始传递它们分别修改时间戳以模拟连续流。捕获图将在所有段和暂停中处于运行状态。
实现一个自定义多路复用器和/或写入器过滤器,它能够读取现有文件并附加新媒体,以便文件本身在完成时再次完成新旧段,连续。
上面的第 3 项在技术上是可以实现的,但我认为根本不存在这样的实现:变通方法总是更容易实现。#2 是解决上述任务的一种假定方式,但由于您使用 DirectShow.NET 进行 C# 开发,我预计从这个角度解决挑战会有点困难。#1相对容易做到,所涉及的成本是使用外部工具。
推荐阅读
- javascript - JSON转换成对象
- javascript - 在 Vue 中将道具从一个步骤传递到另一个步骤(步进器)
- java - 如何使用 JDT 以编程方式编辑全局 Javadoc?
- java - 寻找示例代码以从 aws 参数存储中读取参数值
- excel - 在excel中查找截止日期减去周末的剩余天数
- python - 当未传入数据框时,为什么我能够在函数中更改 Pandas 数据框的值?
- regex - 正则表达式:处理包含嵌套 JSON 对象的 CSV(逗号地狱!)
- pine-script - 我们如何才能使我们的策略只适用于一对特定的货币对?
- javascript - 未捕获的 DOMException:无法从 mapbox-gl-csp-worker.js 构造“Worker”
- google-cloud-platform - 如何恢复存储桶的权限