Я пытаюсь закодировать видео с помощью MediaFoundation в Windows 8.1, выходной файл должен быть контейнером avi с необработанным потоком NV12.
Видео генерируется, и я могу его воспроизвести, но когда я открываю его с помощью VLC, я обнаруживаю поврежденный индекс (с возможностью проигрывания как есть или временного исправления). Если я нажимаю кнопку play как есть, она воспроизводится нормально. Но это порождает проблему в других программах.
Я попытался исследовать это и заметил, что AVI поддерживает 2 типа индексации
https://msdn.microsoft.com/en-us/library/windows/desktop/dd318189(v=vs.85).aspx
Но это для DirectShow, и я использую MediaFoundation, и я не могу найти ничего связанного с этим внутри MediaFoundation.
Любая помощь или предложение будут оценены.
Благодарю.
Редактировать:
Вот как я создаю IMFMediaSink:
hr = MFCreateAttributes(&sinkAttributes, 5);
assert(SUCCEEDED(hr));
sinkAttributes->SetUnknown(MF_SINK_WRITER_ASYNC_CALLBACK, this);
sinkAttributes->SetGUID(MF_TRANSCODE_CONTAINERTYPE, MFTranscodeContainerType_AVI);
if (SUCCEEDED(hr)){
hr = MFCreateSinkWriterFromURL(videoURL, NULL, sinkAttributes, (IMFSinkWriter**)&sinkWriter);
}
Задача ещё не решена.
Других решений пока нет …