Рассчитать длительность файла 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 кГц. поэтому шаги могут включать в себя:
- найдите программу, которая вам нужна для демультиплексирования из MPEG TS.
- найти PID потока.
- найти первый пакет TS с найденным PID и значением payload_start_indicator, равным 1; это будет начало кадра PES, который будет содержать заголовок PES.
- Разобрать заголовок PES, чтобы найти начальный PTS потока.
- проанализируйте файл в обратном направлении от конца, чтобы найти пакет с тем же PID и набором payload_start_indicator, который будет содержать последний PTS. найди разницу, раздели ее на 90000 и получу продолжительность в секундах