У меня есть две камеры, перечисленные ниже, которые я пытаюсь использовать в топологии Media Foundation. Вот краткое изложение моей топологии:
Веб камера -> Декодер MJPG -> Пользовательский MFT -> Кодер H264 -> MP4 File Sink
Проблема заключается в том, что сгенерированный файл MP4 имеет неверные теги длительности и масштаба времени как для контейнера MP4, так и для потока H264. Я легко могу исправить это с помощью такого инструмента, как MP4Box или YAMB, но моя конечная цель — потоковое видео.
Одна потенциальная причина, которую я определил, заключается в том, что образцы, сгенерированные источниками камеры, не запускаются в момент времени 0. Согласно п. 2 в http://msdn.microsoft.com/en-us/library/windows/desktop/ms700134(v=vs.85).aspx#live_sources, временные метки живого источника должны начинаться с 0.
Вдобавок к этому, я попробовал следующее, чтобы «исправить» выборочные временные метки:
IMFSample::SetSampleTime
,MEMediaSample
а также MEStreamTick
События.В обоих этих случаях сеанс медиа выдает ошибку 0xC00D4A44
(MF_E_SINK_NO_SAMPLES_PROCESSED
), и результирующий файл MP4 внезапно заканчивается после объявления атома «mdat».
камеры
Используемые системы (обе имеют одну и ту же проблему):
Вопросы:
Попробуйте сбросить для каждого флага выборки MFSampleExtension_Discontinuity
pSample->SetUINT32( MFSampleExtension_Discontinuity, FALSE );
Других решений пока нет …