我正在测试一个项目。我需要按来自用户的百分比来分解 MPEG-4 ts 数据包的有效负载数据(使某些字节为零)。我通过一个包(188字节)读取“.ts”文件包来做到这一点。但是视频在处理后变得非常泥泞。(顺便说一句,我正在用 C 编写程序)
所以我决定找到属于 I 帧的数据/数据包,然后不接触它们,而是按百分比对其他数据进行加扰。我可以在下面找到
(十六进制) 00 00 00 01 E0 视频 PES 数据包的开始 .. .. .. 00 00 01 B8 组图片头的开始 .. .. .. 00 00 01 00 图片起始码。这是 32 位。紧随其后的 10 位称为时间参考。因此,时间参考将包括图片起始码之后的字节和图片起始码之后第二个字节的前两位,即一个字节(8 位)+ 2 位。这些我们需要跳过。现在存在的三位(来自图片起始码的第二个字节的第 3、4 和第 5 位)将指示帧类型,即 I、B 或 P。因此,要获得这个简单的逻辑与和来自图片起始码的第二个字节使用 0x38 和右移 >> 使用 3。
例如数据是这样的;
00 00 01 00 00 0F FF F8 00 00 01 B5............
这里前四个字节 00 00 01 00 是图片起始码。第五个字节和第六个字节的前两位是时间参考。所以我们关心的是第六个字节 --> 0F
((0F & 38)>>3)
框架类型 = 1 ==> I 框架
帧类型 000 禁止
帧类型 001 内编码 (I) - iframe
帧类型 010 预测编码 (P) - p 帧
帧类型 011 双向预测编码 (B) - b 帧
但这是针对 MPEG-2 的。是否有一些这样的模式,所以我可以识别并获取具有 MPEG-4 传输流的按位运算的帧类型(扩展名为“.ts”)?
我需要得到多少字节或数据包属于该帧?
非常感谢你的帮助