建材网站建设成都,企业门户网站建设方案后台管理,自己制作logo免费 生成器,app网站怎么制作h264 RTP头解析流程 结合NALDecoder.c分析 协议分析 #xff1a;每一个RTP数据报都由头部#xff08;Header#xff09;和负载#xff08;Payload#xff09;两个部分组成#xff0c;其中头部前 12 个字节的含义是固定的#xff0c;而负载则可以是音频或者视频数据。 一… h264 RTP头解析流程 结合NALDecoder.c分析 协议分析 每一个RTP数据报都由头部Header和负载Payload两个部分组成其中头部前 12 个字节的含义是固定的而负载则可以是音频或者视频数据。 一个活动顺序参数集在一个编码视频序列中保持不变,一个活动图像参数集在一个编码图像里保持不变。 H.264编码器必须根据H.264规范设置NRI值(subclause 7.4.1)当nal_unit_type 范围的是1到12. 特别是,H.264规范 要求对于nal_unit_type为69101112的NAL单元的NRI的值应该为0。 对于nal_unit_type等于78 (指示顺序参数集或图像参数集)的NAL单元,H.264编码器应该设置NRI为11 (二进制格式对于nal_unit_type等于5的主编码图像的编码片NAL单元(指示编码片属于一个IDR图像), H.264编码器应设置NRI为11。 打开H264文件读取流 找到 NALU 标致startcode即00 00 01 或 00 00 00 01 串 判断UALU单元数据段大小UDP一次能发送最大数据为64K字节 使用何种发送方式单一发送、聚合发送、分片发送 如果UALU数据1500自己设定使用单一包发送 填充RTP头12 BYTEpayload(7 bit)96 marker(1 bit)0 seq_no(16 bit)随机取 timestamp(32 bit) 第13字节填充NALU头startcode 的下一个字节 如果NALU数据1500使用分片发送分三种情况设备第一次RTP中间的RTP最后一次RTP 填充RTP头类似单一包发送发送整个NALUtimestamp只曾加一次。 不同的是第13字节填FU INDICATOR它的type要成28第14字节才填FU HEADER 第一次RTP第13 BYTE 是FU INDICATOR 其中它的TYPE设置成 28 第14 BYTE 是 FU HEADER SER 100之后才是视频数据。中间的RTP第13 BYTE 是FU INDICATOR其中它的TYPE设置成 28 第14 BYTE 是 FU HEADER SER 000之后才是视频数据。最后一次RTP第13 BYTE 是FU INDICATOR其中它的TYPE设置成 28 第14 BYTE 是 FU HEADER SER 010之后才是视频数据。 NALU数据很小时用组合封装 组合封装NALU payload NALU payload size NALU payload header NALU payload data 如有一个 H.264 的 NALU 是这样的: [00 00 00 01 67 42 A0 1E 23 56 0E 2F ... ] [00 00 00 01 67 42 A0 1E 23 56 0E 2F ... ] 这是一个序列参数集 NAL 单元. [00 00 00 01] 是四个字节的开始码, 67 是 NALU 头, 42 开始的数据是 NALU 内容. 封装成 RTP 包可能如下: [ RTP Header ] [78, STAP-A NAL HDR, 一个字节 ] [长度, 两个字节] [ 67 42 A0 1E 23 56 0E 2F ...] [长度, 两个字节] [ 67 42 A0 1E 23 56 0E 2F... ] 读rfc 3984搞混了的几个TYPE RTP 中的PT 负载类型 Payload type (PT) : 7 bits 发送H264视频此值固定设成 96NALU 中的TYPE 描述了NALU的属性如7指示顺序参数集8指示图像参数集RTP之后的TYPE即13 BYTE开始单一打包的TYPE与NALU中的TYPE一样FU 分片打包方式TYPE设成28 参考 http://bbs.chinavideo.org/viewthread.php?tid2451highlightrtp%2Bh264 http://www.cppblog.com/czanyou/archive/2010/02/09/67940.html#107573