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


Запись видео в файл 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 в качестве приемника файлов. Построитель захвата графов создает фильтр, добавляет его в граф и вызывает IFileSinkFilter::SetFileName , чтобы задать имя выходного файла. Он возвращает указатель на фильтр в качестве исходящего параметра (

pASFWriter

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

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

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:

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

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