blob: 6dd7b99b09dd39ae5b0b237aa3cd7574f0cb9728 [file] [log] [blame] [view]
Artem Titova6178672023-01-30 10:51:011<!-- go/cmark -->
2<!--* freshness: {owner: 'hta' reviewed: '2021-06-03'} *-->
Philipp Hancked25af8ce2021-06-04 04:58:533
4# RTP in WebRTC
Artem Titova2a073b2021-06-16 14:36:485
6WebRTC uses the RTP protocol described in
7[RFC3550](https://datatracker.ietf.org/doc/html/rfc3550) for transporting audio
8and video. Media is encrypted using [SRTP](./srtp.md).
Philipp Hancked25af8ce2021-06-04 04:58:539
10## Allocation of payload types
Philipp Hancked25af8ce2021-06-04 04:58:5311
Artem Titova2a073b2021-06-16 14:36:4812RTP packets have a payload type field that describes which media codec can be
13used to handle a packet. For some (older) codecs like PCMU the payload type is
14assigned statically as described in
15[RFC3551](https://datatracker.ietf.org/doc/html/rfc3551). For others, it is
16assigned dynamically through the SDP. **Note:** there are no guarantees on the
17stability of a payload type assignment.
Philipp Hancked25af8ce2021-06-04 04:58:5318
Artem Titova2a073b2021-06-16 14:36:4819For this allocation, the range from 96 to 127 is used. When this range is
20exhausted, the allocation falls back to the range from 35 to 63 as permitted by
21[section 5.1 of RFC3550][1]. Note that older versions of WebRTC failed to
22recognize payload types in the lower range. Newer codecs (such as flexfec-03 and
23AV1) will by default be allocated in that range.
24
25Payload types in the range 64 to 95 are not used to avoid confusion with RTCP as
26described in [RFC5761](https://datatracker.ietf.org/doc/html/rfc5761).
Philipp Hancked25af8ce2021-06-04 04:58:5327
28## Allocation of audio payload types
Artem Titova2a073b2021-06-16 14:36:4829
30Audio payload types are assigned from a table by the [PayloadTypeMapper][2]
31class. New audio codecs should be allocated in the lower dynamic range [35,63],
32starting at 63, to reduce collisions with payload types
Philipp Hancked25af8ce2021-06-04 04:58:5333
34## Allocation of video payload types
Artem Titova2a073b2021-06-16 14:36:4835
36Video payload types are allocated by the
37[GetPayloadTypesAndDefaultCodecs method][3]. The set of codecs depends on the
38platform, in particular for H264 codecs and their different profiles. Payload
39numbers are assigned ascending from 96 for video codecs and their
40[associated retransmission format](https://datatracker.ietf.org/doc/html/rfc4588).
41Some codecs like flexfec-03 and AV1 are assigned to the lower range [35,63] for
42reasons explained above. When the upper range [96,127] is exhausted, payload
43types are assigned to the lower range [35,63], starting at 35.
Philipp Hancked25af8ce2021-06-04 04:58:5344
45## Handling of payload type collisions
Philipp Hancked25af8ce2021-06-04 04:58:5346
Artem Titova2a073b2021-06-16 14:36:4847Due to the requirement that payload types must be uniquely identifiable when
48using [BUNDLE](https://datatracker.ietf.org/doc/html/rfc8829) collisions between
49the assignments of the audio and video payload types may arise. These are
50resolved by the [UsedPayloadTypes][4] class which will reassign payload type
51numbers descending from 127.
Philipp Hancked25af8ce2021-06-04 04:58:5352
Philipp Hanckec7695a52023-06-05 11:59:0253# Bitrate probing
54
55Bandwidth estimation sometimes requires sending RTP packets to ramp up the
56estimate above a certain treshold. WebRTC uses two techniques for that:
57
58* Packets that only consist of RTP padding
59* RTX packets
60
61At the receiving end, both types of probing packets do not interfere with media processing.
62After being taken into account for bandwidth estimation, probing packets only consisting
63of padding can be dropped and RTX packets act as redundancy.
64
65Using RTX for probing is generally preferred as padding probes are limited to 256 bytes
66of RTP payload which results in a larger number of packets being used for probing which
67is a disadvantage from a congestion control point of view.
68
69## Padding probes
70
71Padding probes consist of RTP packets with header extensions (either abs-send time or
72the transport-wide-cc sequence number) and set the RTP "P" bit. The last byte of the
73RTP payload which specifies the amount of padding is set to 255 and preceeded by 255
74bytes of all zeroes. See [section 5.1 of RFC3550][1].
75Padding probes use the RTX RTP stream (i.e. payload type, sequence number and timestamp)
76when RTX is negotiated or share the same RTP stream as the media packets otherwise.
77
78Padding probes are used either when
79* RTX is not negotiated (such as for audio, less commonly for video) or
80* no suitable original packet is found for RTX probing.
81
82Padding probes should not be interleaved with packets of a video frame.
83
84## RTX probes
85
86RTX probes are resends of previous packets that use RTX retransmissions specified in
87[RFC4588](https://www.rfc-editor.org/rfc/rfc4588) as payload format when negotiated with
88the peer. These packets will have a different abs-send-time or transport-wide-cc sequence
89number and use the RTX RTP stream (i.e. RTX payload type, sequence number and timestamp)
90associated with the media RTP stream.
91
92RTX probing uses recently sent RTP packets that have not yet been acknowledged by
93the remote side. Sending these packets again has a small chance of being useful when the
94original packet is lost and will not affect RTP processing at the receiver otherwise.
95
Philipp Hancked25af8ce2021-06-04 04:58:5396[1]: https://datatracker.ietf.org/doc/html/rfc3550#section-5.1
97[2]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/media/engine/payload_type_mapper.cc;l=25;drc=4f26a3c7e8e20e0e0ca4ca67a6ebdf3f5543dc3f
98[3]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/media/engine/webrtc_video_engine.cc;l=119;drc=b412efdb780c86e6530493afa403783d14985347
99[4]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/pc/used_ids.h;l=94;drc=b412efdb780c86e6530493afa403783d14985347