Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用fread在matlab中查找mpeg-2包_Matlab_Binary_Fread_Mpeg 2 - Fatal编程技术网

用fread在matlab中查找mpeg-2包

用fread在matlab中查找mpeg-2包,matlab,binary,fread,mpeg-2,Matlab,Binary,Fread,Mpeg 2,我用一个ts分析器来分析一个带有mpeg-2编解码器的.ts文件,发现它可以拆分成7311个数据包。 我试图通过matlab找到这一点,使用fopen以二进制形式打开ts文件,使用fread读取文件,但我得到的只是一个包含大量数字的列(远远超过数据包的数量)。有人知道如何确定哪些数据包是这些数据包吗?或者如果有人知道另一种方法来找到这些包,那会对我有很大帮助。 提前感谢您通过一些快速的谷歌搜索,MPEG-2传输流(“ts”)格式由188字节长的数据包组成,每个数据包都有一个4字节的头,后跟一个1

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

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

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

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