计算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

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

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

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

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

  1. 找到您需要从MPEG TS中删除的程序。
  2. 查找流的PID
  3. 找到第一个有PID的TS包,并且payload_start_indicator设置为1;这将是一个PES帧的开始,它将包含一个PES报头。
  4. 解析PES报头以查找流的起始PTS。
  5. 从end向后解析文件,找到具有相同PID和payload_start_indicator集的数据包,其中将包含最后的PTS。找出它们的差异,除以90000将得到持续时间(秒)

最新更新