xref: /aosp_15_r20/external/webrtc/pc/g3doc/rtp.md (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1<?% config.freshness.reviewed = '2021-06-03' %?>
2<?% config.freshness.owner = 'hta' %?>
3
4# RTP in WebRTC
5
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).
9
10## Allocation of payload types
11
12RTP 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.
18
19For 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).
27
28## Allocation of audio payload types
29
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
33
34## Allocation of video payload types
35
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.
44
45## Handling of payload type collisions
46
47Due 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.
52
53[1]: https://datatracker.ietf.org/doc/html/rfc3550#section-5.1
54[2]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/media/engine/payload_type_mapper.cc;l=25;drc=4f26a3c7e8e20e0e0ca4ca67a6ebdf3f5543dc3f
55[3]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/media/engine/webrtc_video_engine.cc;l=119;drc=b412efdb780c86e6530493afa403783d14985347
56[4]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/pc/used_ids.h;l=94;drc=b412efdb780c86e6530493afa403783d14985347
57