matlab读取.ts流数据问题

文章讲述了在处理TS流文件时遇到的问题,即使用fileread读取文件后,数据不匹配且同步字节位置错误。作者通过切换到fread的二进制模式rb,成功找到每188字节出现的同步字节,验证了文件读取的正确性。问题在于fileread可能不适用于这种特定格式的二进制数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说结论:

一定要用fread 'rb' 二进制的形式读取!
fid=fopen(filename,'rb');

因为要做gnuradio,然后TS流的包比较稳定,都是188bytes(第一个字节为0x47 = 71D),固首先研究单TS流的传输,这个时候找了一个github上的ts流文件http://www.w6rz.net/overflowqpsk_276_45.ts
这个文件大概200M左右,然后读取,首先用fileread进行读取,
读取.ts流文件
可以看到a的大小大概160M
检验一下是不是对的,首先a大概只有170M的数据,而且我们来看同步字节的位置, 0x47 = 71D 对应ASCII里面的“G”;
利用find查找
可以发现不对,按道理应该在189、377的位置上发现“G”,但是差了几个,具体原因不知道为啥,因为这个视频是可以播放的,所以他本身肯定没有问题,就只能怀疑读取文件的过程出了问题。
这个时候本来想到单纯读取二进制文件看一看会不会成功,
故使用

fid=fopen('overflowqpsk_276_45.ts','rb');
c = fread(fid);
 b = find(c(1:2000)==71)

结果如下图:
可以看到这个数据是对的
c大概是200M的数据
因为0x47=71D。可以看到1+188*i的地方都出现了71(其他地方出现了是数据中刚好也是),而且此次数据c的大小为200M左右符合文件大小。故得出结论,使用fread二进制方法读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值