【问题标题】:Calculate TS File Duration计算 TS 文件持续时间
【发布时间】:2013-04-15 14:51:25
【问题描述】:

我正在开发一个媒体播放器应用程序:播放 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 文件验证应用程序,无法使用某些实用程序计算持续时间并不断更改文件读取 - 如何在程序中实现?

谢谢,

克兰蒂

【问题讨论】:

    标签: gstreamer duration mpeg transport-stream


    【解决方案1】:

    如果您对传输流内部的编码和PES层有足够的了解,那么您可以读取TS中的时间戳并自行计算。 它需要寻找到文件末尾,寻找最后一个时间戳,并在文件开头减去同一程序的第一个时间戳。

    编辑:除了上述方法之外,您还需要包括最后一帧的持续时间。
    ((last_pts - first_pts) + frame_duration) / pts_resolution

    假设您有一个持续时间为 6.006 秒的 30 fps 片段
    ((1081080 - 543543) + 3003) / 90000 = 6.006

    【讨论】:

      【解决方案2】:

      在大多数情况下,每个 PES 标头都包含一个 PTS 和/或 DTS,以 90kHz 频率测量。所以这些步骤可能包括:

      1. 找到从 MPEG TS 解复用所需的程序。
      2. 找到流的 PID。
      3. 找到第一个带有PID的TS包,并且payload_start_indicator设置为1;这将是一个 PES 帧的开始,其中将包含一个 PES 标头。
      4. 解析 PES 标头以查找流的起始 PTS。
      5. 从末尾向后解析文件,以找到具有相同 PID 和 payload_start_indicator 集的数据包,该数据包将包含最后一个 PTS。 找到他们的差异,将其除以 90000 将给出持续时间(以秒为单位)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 2022-08-06
        • 2016-01-18
        • 2013-03-07
        相关资源
        最近更新 更多