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