RTP传h264裸流, 如何传:
可能有几种情况:
1 一帧传一个NALU(NALU很小)
2 一帧传几个NALU(几个NALU很小)[STAP-A]
3 一帧连一个NALU都传不完(一个NALU很大)[FU-A]
如何解决这些问题??
单一NALU模式:一帧传一个NALU
[rtp帧头] + [nalu header] + [多媒体数据]
一帧传几个NALU: 组合帧封装模式>STAP-A组合类型
关注: STAP-A类型头 和nalu header是一样的, 只不过它的类型为24:
RTP包中, 标明是STAP-A类型后, 那么接下来就会有多个nal单元按上面的图组合在一起:
注: NALU SIZE: 比如0x0056那么字节流是这样: 先传0x00 再0x56(大端传送, 网络传送都这样)
分片封装模式FU-A: 一帧连一个NALU都传不完(一个NALU很大)
在rtp层来说: 就是一个普通的rtp包.而不是分包, 每一个都是完整包.
站在h264数据的角度: 实际一帧是传不完的, 要多次来传送.
所以就引出了FU 模式, 如下:
具体的FFMPEG编码代码:
libavformat/rtpenc_h264_hevc.c