源码地址:
http://rtmpdump.mplayerhq.hu/
拷贝:librtmp源码到cpp中
设置不适用OpenSSL
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_CRYPTO")
加入rtmp源码编译
src/main/cpp/librtmp/amf.c
src/main/cpp/librtmp/hashswf.c
src/main/cpp/librtmp/log.c
src/main/cpp/librtmp/parseurl.c
src/main/cpp/librtmp/rtmp.c
H.264
H.264,同时也是MPEG-4第十部分,… 通常被称之为H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)
H264协议
H.264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)
VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列,在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进NAL单元中。NAL定义片级以上的语法级别(如序列参数集和图像参数集,针对网络传输)
解析NALU
每个NAL单元是一个一定语法元素的可变长字节字符串,包括包含一个字节的头信息(用来表示数据类型),以及若干整数字节的负荷数据。
NALU头信息(一个字节):
其中:T为负荷数据类型,占5bit;R为重要性指示位,占2个bit;最后的F为禁止位,占1bit
H.264 草案指出,当数据流是储存在介质上时,在每个NALU 前添加起始码:0x000001 或 0x00000001,用来指示一个NALU 的起始和终止位置。在这样的机制下,在码流中检测起始码,作为一个NALU得起始标识,当检测到下一个起始码时,当前NALU结束。3字节的0x000001只有一种场合下使用,就是一个完整的帧被编为多个slice(片)的时候,包含这些slice的NALU 使用3字节起始码。其余场合都是4字节0x00000001的。
0x00 00 00 01 67
67 (十六进制)
0110 0111(二进制)
00111 = 7(十进制)