【发布时间】:2011-05-16 11:48:34
【问题描述】:
我想从视频源捕获视频并使用 DirectShow 将其编码为 MPEG 格式。如何设计 Capture Graph 以及如何设置 MPEG 格式的视频属性(例如比特率、帧率、分辨率等)
【问题讨论】:
标签: c++ directshow video-capture directshow.net
我想从视频源捕获视频并使用 DirectShow 将其编码为 MPEG 格式。如何设计 Capture Graph 以及如何设置 MPEG 格式的视频属性(例如比特率、帧率、分辨率等)
【问题讨论】:
标签: c++ directshow video-capture directshow.net
我的方法(我在 VideoPhill recorder 的制作中使用)是使用 DirectShow.net 仅用于捕获帧,然后使用 SampleGrabber 过滤器创建帧队列,然后将其馈入编码器 - 我使用 @987654323 @为此。
我的愿望是大部分时间都保持管理状态 - 并且使用这种方法我能够做到。
稍后 - 这似乎是正确的方法,因为现在我可以将各种编码器直接连接到一个捕获设备。以前只有使用SimulStream (tm) 才有可能。不仅如此,您还可以使用不能用作 DS 过滤器的编码器。
关于使用样本采集器(来自 DirectShow.net 站点 - faq section):
Q9:我在哪里可以找到 BaseClass?如何在 C# 中编写过滤器?
基类尚未转换为可从 .NET 使用。经过两次尝试后,好吧,让我们说它们在设计时并未考虑托管代码。
不过,您仍然有选择。首先,您可以使用样本采集器来捕获视频帧。在让它们继续到图表中的下一个过滤器之前,可以随意编辑这些帧。请参阅 DxLogo 示例(以及其他示例)了解这是如何完成的。
其次,您可以编写 DirectX 媒体对象 (DMO)。库中包含两个示例,显示了这是如何完成的。虽然 DMO 存在常规过滤器没有的限制,但您可能会发现这些限制对您来说不是问题。有大量文档(包括 CHM 文件)讨论了如何执行此操作。
第三,有一个名为 GSSF 的样本。如果要创建源过滤器(即图中生成流的过滤器),可以使用它。
【讨论】: