Capturando vídeo em um arquivo de mídia do Windows

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Para capturar o vídeo e codificá-lo em um arquivo WMV (Vídeo de Mídia do Windows), conecte o pino de captura ao filtro Gravador ASF do WM , conforme mostrado no diagrama a seguir.

grafo de captura de mídia do Windows

A maneira mais fácil de criar esse grafo é especificando MEDIASUBTYPE_Asf no método ICaptureGraphBuilder2::SetOutputFileName :

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).

O valor MEDIASUBTYPE_Asf informa ao Construtor de Gráficos de Captura para usar o filtro Gravador ASF do WM como o coletor de arquivos. O Construtor de Grafo de Captura cria o filtro, adiciona-o ao grafo e chama IFileSinkFilter::SetFileName para definir o nome do arquivo de saída. Ele retorna um ponteiro para o filtro como um parâmetro de saída (

pASFWriter

no exemplo anterior).

Use a interface IConfigAsfWriter no Gravador ASF do WM para definir o perfil do Windows Media. Você deve fazer isso antes de conectar os pinos no Gravador ASF do WM.

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

Para obter mais informações sobre como definir o perfil, consulte Criando arquivos ASF no DirectShow.

Chame ICaptureGraphBuilder2::RenderStream para conectar o filtro de captura ao Gravador 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).

Cada pino de entrada no filtro Gravador do ASF do WM corresponde a um fluxo no perfil do Windows Media. Você deve conectar cada pino, para que o conteúdo do arquivo corresponda ao perfil.

Capturando vídeo em um arquivo