将视频捕获到 Windows 媒体文件

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

若要捕获视频并将其编码为 Windows Media Video (WMV) 文件,请将捕获引脚连接到 WM ASF 编写器 筛选器,如下图所示。

windows 媒体捕获图

生成此图的最简单方法是在 ICaptureGraphBuilder2::SetOutputFileName 方法中指定MEDIASUBTYPE_Asf:

IBaseFilter* pASFWriter = 0;
hr = pBuild->SetOutputFileName(
    &MEDIASUBTYPE_Asf,   // Create a Windows Media file.
    L"C:\\VidCap.wmv",   // File name.
    &pASFWriter,         // Receives a pointer to the filter.
    NULL);  // Receives an IFileSinkFilter interface pointer (optional).

值MEDIASUBTYPE_Asf告知捕获图形生成器使用 WM ASF 编写器筛选器作为文件接收器。 捕获图形生成器创建筛选器,将其添加到图形,并调用 IFileSinkFilter::SetFileName 来设置输出文件的名称。 它将返回指向筛选器的指针作为传出参数 (

pASFWriter

在上一个示例中) 。

使用 WM ASF 编写 器上的 IConfigAsfWriter 接口设置 Windows Media 配置文件。 在连接 WM ASF 编写器上的任何固定之前,必须执行此操作。

IConfigAsfWriter *pConfig = 0;
hr = pASFWriter->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
if (SUCCEEDED(hr))
{
     // Configure the ASF Writer filter.
    pConfig->Release();
}

有关设置配置文件的详细信息,请参阅 在 DirectShow 中创建 ASF 文件

调用 ICaptureGraphBuilder2::RenderStream 将捕获筛选器连接到 ASF 编写器:

hr = pBuild->RenderStream(
    &PIN_CATEGORY_CAPTURE,   // Capture pin.
    &MEDIATYPE_Video,        // Video. Use MEDIATYPE_Audio for audio.
    pCap,                    // Pointer to the capture filter. 
    0, 
    pASFWriter);             // Pointer to the sink filter (ASF Writer).

WM ASF 编写器筛选器上的每个输入引脚对应于 Windows 媒体配置文件中的一个流。 必须连接每个引脚,以便文件内容与配置文件匹配。

将视频捕获到文件