WEBRTC 接收H264 RTP数据流小结
这篇文章是对webrtc 中,接收H264 RTP包的一个总结,主要分为两个部分: 第一部分,介绍H264打包成RTP包的规范,以及WEBRTC中目前正在使用的几种格式。 第二部分,介绍WEBRTC的数据流,从接收RTP包,到拼装成H264 Frame,最终送入Decoder,获取YUV数据。
1、第一部分:RTP Payload Format for H.264 Video阅读笔记
参考链接:rfc6184
RTP Payload Format
具体RTP 的协议格式,可以参考RFC 3550。
1.1 RTP Header
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 1. RTP header according to RFC 3550
1.2 Payload Structures
定义了三种不同的Playload结构类型
-
Single NAL Unit Packet
在一个RTP Playload中,只包含一个Nal Unit 。
-
Single NAL Unit Packet
在一个RTP Playload中,聚合了多个Nal Unit。大致包含以下几种:
-
STAP-A:
-
STAP-B
-
MTAP-16
-
MTAP-24
-
-
Fragmentation Unit
把一个Nal Unit 进行拆分,打包到多个RTP 包中。
-
FU-A
-
FU-B
-
Table 1. Summary of NAL unit types and the corresponding packet
types
NAL Unit Packet Packet Type Name Section
Type Type
-------------------------------------------------------------
0 reserved -
1-23 NAL unit Single NAL unit packet 5.6
24 STAP-A Single-time aggregation packet 5.7.1
25 STAP-B Single-time aggregation packet 5.7.1
26 MTAP16 Multi-time aggregation packet 5.7.2
27 MTAP24 Multi-time aggregation packet 5.7.2
28 FU-A Fragmentation unit 5.8
29 FU-B Fragmentation unit 5.8
30-31 reserved -
1.2.1 NAL Unit Header
-- +---------------+ |0|1|2|3|4|5|6|7| +-+-+-+-+-+-+-+-+ |F|NRI| Type | +---------------+
-
F:0表示payload 内容没有错误,1表示payload中的内容可能有错误内容或语法错误。
-
NRI:00表示没有参考帧。
-
Type:1-23
1.2.2 Packetization Modes
-
Single Nal unit mode:
-
Non-interleaved mode:
-
Interleaved mode:
--
Table 3. Summary of allowed NAL unit types for each packetization
mode (yes = allowed, no = disallowed, ig = ignore)
Payload Packet Single NAL Non-Interleaved Interleaved
Type Type Unit Mode Mode Mode
-------------------------------------------------------------
0 reserved ig ig ig
1-23 NAL unit yes yes no
24 STAP-A no yes no
25 STAP-B no no yes
26 MTAP16 no no yes
27 MTAP24 no no yes
28 FU-A no yes