Поделиться через


Запись видео в файл Windows Media

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Для того чтобы записать видео и закодировать его в файл Windows Media Video (WMV), подключите контакт для захвата к фильтру записи WM ASF , как показано на следующей схеме.

Windows Media граф захвата мультимедиа

Самый простой способ построения этого графа заключается в спецификации MEDIASUBTYPE_Asf в методе 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).

Значение MEDIASUBTYPE_Asf сообщает построителю графов захвата использовать фильтр WM ASF Writer в качестве файла-выхода. Построитель графов записи создает фильтр, добавляет его в граф и вызывает IFileSinkFilter::SetFileName, чтобы задать имя выходного файла. Он возвращает указатель на фильтр в качестве исходящего параметра (

pASFWriter

в предыдущем примере).

Используйте интерфейс IConfigAsfWriter в модуле записи WM ASF для установки профиля Windows Media. Это необходимо сделать, прежде чем подключать какие-либо пины на WM ASF Writer.

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

Дополнительные сведения о настройке профиля см. в Создание файлов ASF в DirectShow.

Вызовите ICaptureGraphBuilder2::RenderStream для подключения фильтра захвата к ASF Writer:

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 Media. Необходимо соединить каждый пин, чтобы содержимое файла соответствовало профилю.

Захват видео в файл