Проблемы синхронизации аудио / видео при использовании фильтра samplegrabber

Я использую DirectShow для воспроизведения фильмов. Я изменяю видео / аудио данные и визуализирую все сам в своем приложении. Поэтому я использую фильтры SampleGrabber и NULL рендеры.

Проблема возникает, когда я перематываю фильм (используя интерфейс IMediaSeeking) — звук значительно отстает от видео (на несколько секунд).

График фильма с образцами фильтров граббера

Я понимаю основы и временные метки синхронизации аудио / видео. Я понимаю, что фильтры рендеринга могут отбрасывать кадры в зависимости от времени представления.

Но я думаю, что фильтры SampleGrabber просто получают все данные? Возможно ли получить аудио / видео данные, уже синхронизированные в моих обратных вызовах SampleCB?

0

Решение

На примере обратного вызова граббера вы получите данные с отметкой времени. Если вы сохраняете метки времени, которые вы получаете, и вы обеспечиваете синхронизацию воспроизведения данных с использованием этих меток времени с точки зрения воспроизведения данных с одинаковыми метками времени во всех потоках в любое время — тогда у вас будет хорошая синхронизация ,

Выборочные грабберы получают все данные, но это не означает, что эти данные достигают грабберов в синхронизированном порядке. Соответствие меткам времени абсолютно необходимо. Поскольку видео может быть сжато во времени, а аудио, как правило, нет, при поиске могут быть получены дополнительные предварительные данные на участке видео, которые могут обрабатываться неправильно.

1

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