gpt4 book ai didi

c++ - MPEG2 演示时间戳 (PTS) 计算

转载 作者:可可西里 更新时间:2023-11-01 18:06:48 26 4
gpt4 key购买 nike

我有一个 MPEG2 TS 文件,现在我有兴趣从每个图片帧中提取 PTS 信息。我知道 PTS 是用 33 位描述的,包括 3 个标记位。但是我不知道如何将这个位域转换为更容易理解的形式(秒,毫秒)。谁能帮帮我

最佳答案

MPEG2 传输流时钟(PCR、PTS、DTS)的单位都是 1/90000 秒。 PTS 和 DTS 有三个标记位,您需要跳过它们。模式总是(从最高有效位到最低有效位)3 位,标记,15 位,标记,15 位,标记。标记必须等于 1。在 C 中,删除标记将像这样工作:

uint64_t v; // this is a 64bit integer, lowest 36 bits contain a timestamp with markers
uint64_t pts = 0;
pts |= (v >> 3) & (0x0007 << 30); // top 3 bits, shifted left by 3, other bits zeroed out
pts |= (v >> 2) & (0x7fff << 15); // middle 15 bits
pts |= (v >> 1) & (0x7fff << 0); // bottom 15 bits
// pts now has correct timestamp without markers in lowest 33 bits

它们还有一个9bits的扩展字段,组成一个42bit的整数,其中扩展是最低位。基础+扩展的单位是 1/27000000 秒。许多实现将扩展名保留为全零。

关于c++ - MPEG2 演示时间戳 (PTS) 计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13606023/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com