先说结论:
一定要用fread 'rb' 二进制的形式读取!
fid=fopen(filename,'rb');
因为要做gnuradio,然后TS流的包比较稳定,都是188bytes(第一个字节为0x47 = 71D),固首先研究单TS流的传输,这个时候找了一个github上的ts流文件http://www.w6rz.net/overflowqpsk_276_45.ts
这个文件大概200M左右,然后读取,首先用fileread进行读取,
检验一下是不是对的,首先a大概只有170M的数据,而且我们来看同步字节的位置, 0x47 = 71D 对应ASCII里面的“G”;
可以发现不对,按道理应该在189、377的位置上发现“G”,但是差了几个,具体原因不知道为啥,因为这个视频是可以播放的,所以他本身肯定没有问题,就只能怀疑读取文件的过程出了问题。
这个时候本来想到单纯读取二进制文件看一看会不会成功,
故使用
fid=fopen('overflowqpsk_276_45.ts','rb');
c = fread(fid);
b = find(c(1:2000)==71)
结果如下图:
因为0x47=71D。可以看到1+188*i的地方都出现了71(其他地方出现了是数据中刚好也是),而且此次数据c的大小为200M左右符合文件大小。故得出结论,使用fread二进制方法读取