Кадровая синхронизация файлов субтитров с видео MPEG с использованием DirectShow

Это проблема, с которой я сталкивался некоторое время, и не смог получить хороший ответ (даже от Microsoft). Я использую универсальный фильтр дампа для записи сжатых файлов MPEG на диск. На графике у меня также есть фильтр SampleGrabber, который вызывается для каждого кадра. Из обратного вызова SampleGrabber я получаю субтитры вместе с отметкой времени DirectShow и записываю их в файл субтитров SAMI (.smi). Кажется, все это работает, поскольку файл SAMI содержит правильные субтитры для каждого кадра. Однако у меня есть несколько проблем:

  1. Все первые (обычно 3 или 4) временные метки DirectShow равны 0. Если я получаю обратные вызовы от SampleGrabber, разве эти временные метки не должны увеличиваться?

  2. Когда я начинаю воспроизведение, первая отображаемая временная метка составляет около 10-20 субтитров в файле SAMI. Я предположил бы, что первый кадр покажет первую метку времени в файле.

  3. Вероятно, это связано с № 2, но субтитры не синхронизируются с соответствующими кадрами в файле. Иногда они могут быть до 40 кадров позже.

Я использую DirectShow через C ++, захватываю с Hauppauge HVR-1800 под Windows XP SP3 (с последними драйверами 09/08/2008) и воспроизводлю в Media Player Classic 6.4.9.0. Любые идеи приветствуются.

11.12.2008 20:06:30
1 ОТВЕТ

Используете ли вы получение входящего IMediaSample GetTime или GetMediaTime. GetTime - это то, что вам нужно, поскольку оно представляет время презентаций потоков.

Не забудьте также проверить входящую функцию IMediaSample isPreRoll . Предварительные сэмплы следует игнорировать, поскольку они будут выводиться снова во время воспроизведения. Еще одна вещь, которую я хотел бы сделать, - убедиться, что ваш образец захвата находится как можно ниже в вашем фильтре. Желательно после любого демьюксера и рендерера.

Также см. Статью о метках времени в документации DirectShow. Это обрисовывает в общих чертах другие предостережения использования временных меток.

Конечно, даже после всех приведенных выше советов все еще нет абсолютной гарантии того, как будет работать конкретный фильтр DirectShow.

2
12.12.2008 14:26:46