Рассчитать длительность файла TS

Я работаю над приложением для медиаплеера, которое воспроизводит аудио и видео ISDB-T. Я использую GStreamer для декодирования и рендеринга.

Чтобы AV Sync работал идеально, я должен отрегулировать чтение файлов: чтобы данные не передавались в Gstreamer ни слишком быстро, ни слишком медленно.

If I know the duration of TS file before hand, then I can regulate my reads. But how to calculate the TS file duration ?

Потому что мне нужно проверить приложение с несколькими файлами TS, я не могу рассчитать продолжительность с помощью какой-либо утилиты и постоянно меняю чтение файлов - Как этого можно достичь в программе?

Спасибо,

Kranti

2 ответа

Если вы обладаете достаточными знаниями в области кодирования и PES внутри транспортного потока, то вы можете прочитать временные метки в TS и рассчитать их самостоятельно. Требуется поиск до конца файла, поиск последней отметки времени и вычитание первой отметки времени той же программы в начале файла.

В большинстве случаев каждый заголовок PES содержит PTS и / или DTS, который измеряется на частоте 90 кГц. поэтому шаги могут включать в себя:

  1. найдите программу, которая вам нужна для демультиплексирования из MPEG TS.
  2. найти PID потока.
  3. найти первый пакет TS с найденным PID и значением payload_start_indicator, равным 1; это будет начало кадра PES, который будет содержать заголовок PES.
  4. Разобрать заголовок PES, чтобы найти начальный PTS потока.
  5. проанализируйте файл в обратном направлении от конца, чтобы найти пакет с тем же PID и набором payload_start_indicator, который будет содержать последний PTS. найди разницу, раздели ее на 90000 и получу продолжительность в секундах
Другие вопросы по тегам