Запись видео в файл Windows Media
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Чтобы записать видео и закодировать его в файл Windows Media Video (WMV), подключите закрепление захвата к фильтру модуля записи WM ASF , как показано на следующей схеме.
Самый простой способ создать этот граф — указать 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. Необходимо подключить все контакты, чтобы содержимое файла соответствовало профилю.
Связанные темы