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.
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.
Tópicos relacionados