我使用ts分析器作为一个.ts文件,我有一个mpeg-2编解码器,我发现它分裂成7311个数据包。我试图通过matlab找到这一点,使用fopen以二进制方式打开ts文件,并使用fread读取文件,但我得到的只是一个包含大量数字的列(远远超过数据包的数量)。有人知道如何确定这些数据中的哪一个是数据包吗?或者如果有人知道另一种找到包裹的方法会对我有很大帮助。提前谢谢你
发布于 2013-05-13 14:41:35
通过快速搜索,MPEG-2传输流('ts')格式由长度为188个字节的数据包组成,每个数据包有一个4字节的头,后面有一个184字节的有效负载。本质上,您可以通过计算找到的头数来计数数据包的数量--但是请注意,如果您只对流中的视频数据包的数量感兴趣,那么您将需要对头部进行更深入的分析,因为流可能包含任意数量的交错的“基本流”(可以是视频、音频或任意数据)。流中的每个基本数据包类型都由头中包含的唯一"PID“表示。
除此之外,您还必须处理同步-每个标头以“同步字节”开头,该字节的值为0x47 (或二进制值为01000111 )。根据这一资源,解码器从寻找这个同步字节开始;一旦他们找到一个字节,他们可能已经找到了一个数据包头。为了确保,他们试图找到三个连续的同步字节(流中有188个字节);如果找到三个同步字节,则可以进行同步,并且从那时起可以假定数据包边界为188个字节间隔。但是,请注意,应该检查每个假定的头的第一个字节,看看它是否是一个同步字节--如果不是,则称为“同步丢失”,而同步过程必须重新开始。
一旦您有了一些代码来同步到流,就应该很容易从每个数据包的头中提取PID,并计算与每个唯一PID关联的数据包数量。您可能还应该检查同步字节之后的第一位,因为如果设置为1,则表示传输错误,并且数据包的有效负载无效。有关数据包报头格式的详细信息可以找到这里。
https://stackoverflow.com/questions/16519480
复制相似问题