Исправление временных отметок IMFMediaSource

У меня есть две камеры, перечисленные ниже, которые я пытаюсь использовать в топологии 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.

Вдобавок к этому, я попробовал следующее, чтобы «исправить» выборочные временные метки:

  1. Пересчитал время выборки в моем пользовательском MFT, используя IMFSample::SetSampleTime,
  2. Создана оболочка для объектов IMFMediaSource и IMFMediaStream, которая перехватывает и исправляет отметки времени, связанные с MEMediaSample а также MEStreamTick События.

В обоих этих случаях сеанс медиа выдает ошибку 0xC00D4A44 (MF_E_SINK_NO_SAMPLES_PROCESSED), и результирующий файл MP4 внезапно заканчивается после объявления атома «mdat».


камеры

  • Logitech BCC950 ConferenceCam
  • Thinkpad W520 Встроенная камера

Используемые системы (обе имеют одну и ту же проблему):

  • Windows 7 Профессиональная x64
  • Windows 8 x86

Вопросы:

  1. Есть ли какая-то другая причина, которую я упустил из-за неправильной длительности видео / шкалы времени?
  2. Если нет, то существует ли правильный подход к тому, как повторно использовать временные метки выборки?

0

Решение

Попробуйте сбросить для каждого флага выборки MFSampleExtension_Discontinuity

pSample->SetUINT32( MFSampleExtension_Discontinuity, FALSE );
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]