海康码流分析

先取一些数据,在这之前的数据为海康的头,即NET_DVR_SYSHEAD分支,不作描述,直接取NET_DVR_STREAMDATA分支的码流数据,开始如下:

00 00 01 BA 46 E6 6C A1 14 01 00 00 03 FE FF FF00 00 00 01 00 00 01 BC 00 5A E0 FF 00 24 40 0E 48 4B 00 01 0E 30 C2 0D A0 07 FF FF FF FF 41 12 48 4B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2C 1B E0 00 10 42 0E 00 00 A0 21 01 60 01 20 12 1F FF 00 3A 99 91 C0 00 0C 43 0A 00 00 FE 00 7D 03 03 E8 03 FF BD BD 00 00 BF BF 00 00 00 00 00 00 00 00 01 E0 00 1A 8C 80 0A 21 B9 9B 28 45 FF FF FF FF FC 00 00 00 01 67 42 00 14 95 A8 58 25 9000 00 01 E0 00 0E 8C 00 03 FF FF FC 00 00 00 01 68 CE 3C 8000 00 01 E0 13 FA 8C 00 02 FF FD 00 00 00 01 65 B8 00。。。

海康使用ps流来封装h.264数据,这里使用的解码器无法识别ps流,因此需要将h264数据从ps流里提取出来

对于ps流的规定可以参考13818-1文档

根据文档规定前14个字节,即00 00 01 BA 44 73 26 B8 34 01 00 00 03 FE为PS流(节目流)包头,第14个字节的最后3位,即1111 1110为包头后填充数据的长度,表明这里有6字节的填充数据,即FF FF 00 00 00 01,海康用最后一个字节01说明是第1帧数据。

之后是以00 00 01 BC开始的一个包,BC说明在这个包为Program Stream map。PSM包的第5,6字节,即00 5A表明其后的数据长度为0x00 5A即90个字节;E0 FF含义不明,有待分析;00 24即36,从00 24后开始跳过36个字节即00 2C 1B E0...,其中1B表示码流编码格式为H.264。

之后是以00 00 01 E0开始的一个包,E0说明这个包就是pes包了。00 1A表示pes包的长度,为26,即从00 1A之后跨过26个字节将是下一个包;8C是标准数据,如果这个字节不是8C,则表明数据不正确;其后一个字节用于判别是pts还是dts,80表示pts;0A表示附加数据长度,即0A之后的10个字节为该pes包的附加数据,即21 B9 9B 28 45 FF FF FF FF FC,其中前5个字节数据用于计算pts;附加数据之后就是264数据了,该pes包的视频数据为00 00 00 01 67 42 00 14 95 A8 58 25 90。

 

猜你喜欢

转载自blog.csdn.net/yunlianglinfeng/article/details/81214346
今日推荐