如何使用时间戳在 .m2ts 文件中查找?

How to use timestamps for seeking in .m2ts files?

我有 .m2ts 视频文件(VBR,时长 = 1 小时)。
如果我想从 20 分钟开始播放这个文件,我需要知道我应该从哪个字节读取这个文件。
M2TS 是标准的 TS,在同步字节 (0x47) 之前有一个 4 字节的时间戳,但我不明白如何使用它。请在我的视频文件中查看同步字节之前的以下时间戳:
0D 9E E2 02
35 8B 62 28
1D 77 E2 4F
05 64 62 76
2D 50 E2 9C
15 3D 62 C3
3D 29 E2 E9
25 16 63 10
有人可以解释如何使用时间戳在 .m2ts 文件中查找吗?

M2TS 没有 4 字节时间戳。

它有一个 4 字节 TP_extra_header,由 2-bit 复制许可指示符和 30-bit 分辨率为 [=15= 的到达时间戳 (ATS) 组成].

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | C |                         ATS                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                       TS [188 bytes]                          |
   |                                                               |
   | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |

由于 BDAV 格式用于存储,它使用可变速率 (VBR) 传输流而不是广播中发现的典型恒定速率 (CBR) 流来保存 space。记录到达时间是为了能够 convert the variable stream into a constant rate 和 T-STD 兼容的播放。

此时间戳将每 (2^30 - 1) / 27000000 ~= 39.768 秒更新一次。

例如:1D77E24F ∧ 3FFFFFFF 是十进制的 494395983 / 27000000 ~= 18.32 秒。

我不太熟悉 BD,但我认为有关 m2ts 文件的更多信息保存在 clpimpls 随附文件中。如果您只有 m2ts 文件,则必须通过 PCR 查找。