Следующий код хорош при визуализации файла MPG без звука:поведения AddSourceFilter
IBaseFilter *pRenderer;
CoCreateInstance(CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pRenderer)));
IFileSourceFilter *pSourceFilter;
IBaseFilter *pBaseFilter;
CoCreateInstance(CLSID_AsyncReader, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pSourceFilter));
pSourceFilter->QueryInterface(IID_PPV_ARGS(&pBaseFilter));
pGraphBuilder->AddFilter(pRenderer, L"Renderer Filter");
pSourceFilter->Load(filename, NULL);
pGraphBuilder->AddFilter(pBaseFilter, L"File Source Filter");
Но терпит неудачу с Файловой WMV со звуком. Сбой происходит при следующем вызове, когда я подключаю единственный выход видеоисточника с единственным входом видеообъектива.
pGraphBuilder->Connect(pOutPin[0], pInPin[0])
Который возвращает -2147220969. Если я заменить код выше со следующим:
IBaseFilter *pRenderer;
CoCreateInstance(CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pRenderer));
IBaseFilter *pBaseFilter;
pGraphBuilder->AddSourceFilter(filename, L"Renderer Filter", &pBaseFilter);
pGraphBuilder->AddFilter(pRenderer, L"Renderer Filter");
то MPG играет хорошо с:
pGraphBuilder->Connect(pOutPin[0], pInPin[0])
в то время как WMV приводит ту же ошибку, как указано выше, но вместо этого он играет с ног на голову с:
pGraphBuilder->Connect(pOutPin[1], pInPin[0])
Все это означает, что второй тип кодирования создает источник с двумя выходными штырями, и, возможно, аудио отображается на первой. Или, может быть, сплиттер A/V автоматически вставлен DirectShow.
- Я понимаю, что AddSourceFilter может создать сплиттер прозрачно. Правильно ли это?
- Если я хочу сделать это вручную, какой компонент использовать?
- Почему видео WMV воспроизводится в обратном порядке?