0

我对 .ts 文件使用 ts 分析器和 mpeg-2 编解码器,我发现它分成 7311 个数据包。我试图通过matlab通过使用fopen以二进制打开ts文件并fread来读取文件来找到这个,但我得到的只是一个包含大量数字集合的列(远高于数据包的数量)。有谁知道我如何确定这些数据中的哪些是数据包?或者,如果有人知道另一种查找数据包的方法会对我有很大帮助。先感谢您

4

1 回答 1

0

通过一些快速的谷歌搜索,MPEG-2 传输流 ('ts') 格式由长度为 188 字节的数据包组成,每个数据包都有一个 4 字节的标头,后跟一个 184 字节的有效负载。本质上,您可以通过计算找到的标头数量来计算数据包的数量 - 但请注意,如果您只对计算流中的视频数据包的数量感兴趣,那么您将需要对数据包进行更深入的分析标头,因为流可能包含任意数量的交错“基本流”(可以是视频、音频或任意数据)。流中的每个基本数据包类型都由包含在标头中的唯一“PID”表示。

除了上述之外,您还必须处理同步 - 每个标头都以“同步字节”开头,其值为 0x47(或二进制的 01000111)。根据这个资源,解码器首先寻找这个同步字节;一旦他们找到一个,他们可能已经找到了一个数据包头。为了确保,他们尝试找到三个连续的同步字节(流中相隔 188 个字节);如果找到三个,则可以发生同步,并且从那时起可以假定数据包边界以 188 字节为间隔。但是请注意,应检查每个假定报头的第一个字节以查看它是否是同步字节 - 如果不是,则这称为“同步丢失”并且同步过程必须重新开始。

一旦你有一些代码可以同步到一个流,从每个数据包的头部提取 PID 并计算与你找到的每个唯一 PID 相关的数据包数量应该是相当容易的。您可能还应该检查同步字节之后的第一位,如果设置为 1,则表示传输错误,并且数据包的有效负载无效。可以在此处找到有关数据包标头格式的详细信息。

于 2013-05-13T14:41:35.823 回答