捕获类型 1 DV 文件

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

类型 1 DV AVI 文件包含单个交错流。 若要在预览时捕获类型 1 文件,请使用下图中显示的筛选器图。

使用预览版的 type-1 捕获

此图中的筛选器包括:

  • Smart Tee 筛选器将交错的 DV 拆分为捕获流和预览流。 这两个流都包含相同的交错数据。
  • AVI Mux文件编写器将交错流写入磁盘。
  • DV 拆分器将交错流拆分为 DV 视频流和音频流。 这两个流都呈现为预览版。
  • DV 视频解码器解码 DV 视频流用于预览。

生成此图,如下所示:

ICaptureGraphBuilder2 *pBuilder;  // Capture graph builder.
IBaseFilter           *pDV;       // DV capture filter (MSDV)
IBaseFilter           *pAviMux    // Avi Mux filter.

// Initialize pDV (not shown). 
// Create and initialize the Capture Graph Builder (not shown).

// Create the file-writing section of the graph.
hr = pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, 
    OLESTR("C:\\Example1.avi"), &pAviMux, 0);

// Render the capture stream.
hr = pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Interleaved, 
    pDV, 0, pAviMux);

// Render the preview stream.
hr = pBuilder->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Interleaved,
    pDV, 0, 0);

// Remember to release all interfaces.
  1. 调用 ICaptureGraphBuilder2::SetOutputFileName 将 AVI Mux 筛选器连接到文件编写器筛选器。
  2. 使用 固定类别调用 ICaptureGraphBuilder2::RenderStream PIN_CATEGORY_CAPTURE来呈现捕获流。 捕获图形生成器会自动插入 Smart Tee 筛选器。
  3. 再次调用 RenderStream,但使用固定类别PIN_CATEGORY_PREVIEW来呈现预览流。 如果不想预览视频,请跳过此调用。

对于对 RenderStream 的两次调用,媒体类型MEDIATYPE_Interleaved,这意味着交错的 DV 视频。 在此代码中,Capture Graph Builder 会自动添加所需的每个筛选器,MSDV 捕获筛选器除外。

DirectShow 中的数字视频