一、RTP负载类型介绍
在SIP 音视频通话中,媒体数据是由RTP包携带的, RTP包中的PT字段标识了负载媒体数据的类型。如下图:
注: PT表示负载类型(Payload Type), 7 bits,即所传输的多媒体的类型
不同的媒体编码格式对应不同的整型数值,由RFC3551定义:0~95范围内,一部分已经被占用,如PCMU是0,PCMA是8等待,另一部分是未定义。 而96-127范围是由使用者动态定义的,可以动态用作未定义的音频和视频RTP包类型, 比如H264、VP8、Opus等。RFC3511中定义如下图:
二、类型使用说明
常用的固定类型:
0:G711 ulaw,也称为PCMA
8:G711 alaw,也称为PCMU
9:G722
常用的动态类型:
H264: 一般使用96,97,98,99等
telephone-event: 一般使用101
opus: 一般使用102
iLBC:一般使用97
三、关键说明
- 对于知名类型如0、8等,0表示PCMU, 8表示PCMA,采样频率固定是8000, 因此SDP媒体属性可以没有rtpmap项
- 使用96以上的动态类型,SDP媒体属性必须要有rtpmap项,有的还会有fmtp属性。其中rtpmap中的编码名称表示了是哪种编码
- 不同终端使用的H264的类型可以不同,有的终端使用96,有的终端使用98。在媒体协商时,要以rtpmap中的名称为准,而不是以数值96或98作为是否是同一媒体编码的依据。如上图中h264使用的是99数值。
- 96以上的类型虽然是用户自定义使用的,但要注意同一个终端的不同媒体编码不能使用相同的动态类型。比如,h264占用了102,那么opus就不能使用102了,可以使用103等
- 96以上的动态编码虽然没有规范,但有的数值也是常用在某一种编码的,比如101常用于telephone-event,因此不要随意占用101
- h264编码有不同的分辨率和模式,因此当一个终端支持多种h264编码能力时,一般使用不同的数值代表不同的能力,比如720P使用96, VGA使用97等等
- 在网络抓包中,过滤负载类型报文时使用类型数值过滤
- 主叫终端和被叫终端对于同一编码使用不同的动态类型数值时,比如主叫h264使用96, 被叫h264使用97。 协商后在通话中可能出现一方的RTP使用96,而另一方的RTP使用97的情况,当终端兼容不好时,可能会识别不出h264数据而将其丢弃。当遇到这种情况时,可以将其中一方的h264类型值改为和对端一样来规避