MPEG2 ts 同步字节和连续性错误

jmf*_*fel 1 byte synchronization mpeg2-ts continuity

我有一个项目,我必须编写一个 ts 文件解析器。解析器应该读取 ts 文件并从文件的每个数据包的标头中输出一些数据。我必须打印的两个输出是,是否存在同步错误(以及有多少)和数字连续性计数器错误。

首先关于同步错误。我知道数据包的第一个字节是指同步字节。那么,如果数据包的同步字节没有应有的 0x47 值,我们就会遇到同步错误?那么,如果文件中有 100 个数据包,并且 30 个同步字节是“坏”的,那么是否存在 30 个同步错误?

关于连续性计数器错误,我希望有人用简单的语言解释如何查找是否存在连续性错误,因为我阅读的 mpeg2 标准没有多大帮助。谢谢

and*_*llr 5

同步字节错误是指 TS 数据包的第一个字节不包含值 0x47。在这种情况下,支持不同的 TS 数据包长度可能是明智的。通常,TS 数据包的长度为 188 字节,但您可能会遇到不同的数据包长度,例如,如果添加了 Reed-Solomon 错误保护,则 TS 数据包的长度为 204 字节。
ISO 13818-1 标准对于什么是连续性计数 (CC) 错误非常清晰且明确。简单来说,每个TS包包含一个13位的PID(包标识符)字段和一个4位的CC(连续性计数)字段。如果数据包包含有效负载(可以从adjustment_field_control标志确定),则同一 PID的连续数据包必须包含递增的 CC 值(模 16,因此 CC = 15 之后是 CC = 0)。因此,您需要单独跟踪每个 PID 的 CC 值。如果 CC 值之间存在间隙,例如 CC = 5 之后是 CC = 7,则这是 CC 错误。必须特别注意重复的 CC 值。CC值可以重复一次,例如在两个连续的TS包(具有相同的PID)中CC=5。如果 CC 值重复两次以上,也会构成 CC 错误。 请注意,空数据包 (PID = 0x1FFF = 8191) 不会导致 CC 错误,因为其 CC 字段的值未定义(标准允许在空数据包的情况下使用任意 CC 值)。 另一个例外是当discontinuity_indicator

标志时,CC 值可能会更改为任意值,并且这不会算作 CC 错误事件。

您可能需要查看 ETSI ETR 290,它定义了 DVB 系统的一些测量指南。其中有一些关于如何计算 CC 错误的提示。