Кадровая синхронизация файлов субтитров с видео MPEG с использованием DirectShow - PullRequest
1 голос
/ 11 декабря 2008

Это проблема, с которой я некоторое время сталкивался и не смог получить хорошего ответа (даже от 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. Любые идеи приветствуются.

1 Ответ

2 голосов
/ 12 декабря 2008

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

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

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

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

...