SIP协议之RTP负载类型(payload type)

一、RTP负载类型介绍​

  在SIP 音视频通话中,媒体数据是由RTP包携带的, RTP包中的PT字段标识了负载媒体数据的类型。如下图:
SIP协议之RTP负载类型(payload type)_第1张图片
注: PT表示负载类型(Payload Type), 7 bits,即所传输的多媒体的类型

​  不同的媒体编码格式对应不同的整型数值,由RFC3551定义:0~95范围内,一部分已经被占用,如PCMU是0,PCMA是8等待,另一部分是未定义。 而96-127范围是由使用者动态定义的,可以动态用作未定义的音频和视频RTP包类型, 比如H264、VP8、Opus等。RFC3511中定义如下图:
SIP协议之RTP负载类型(payload type)_第2张图片

SIP协议之RTP负载类型(payload type)_第3张图片

二、类型使用说明

常用的固定类型:
0:G711 ulaw,也称为PCMA
8:G711 alaw,也称为PCMU
9:G722

常用的动态类型:
H264: 一般使用96,97,98,99等
telephone-event: 一般使用101
opus: 一般使用102
iLBC:一般使用97

三、关键说明

SIP协议之RTP负载类型(payload type)_第4张图片
SIP协议之RTP负载类型(payload type)_第5张图片

  1. 对于知名类型如0、8等,0表示PCMU, 8表示PCMA,采样频率固定是8000, 因此SDP媒体属性可以没有rtpmap项
  2. 使用96以上的动态类型,SDP媒体属性必须要有rtpmap项,有的还会有fmtp属性。其中rtpmap中的编码名称表示了是哪种编码
  3. 不同终端使用的H264的类型可以不同,有的终端使用96,有的终端使用98。在媒体协商时,要以rtpmap中的名称为准,而不是以数值96或98作为是否是同一媒体编码的依据。如上图中h264使用的是99数值。
    在这里插入图片描述
  4. 96以上的类型虽然是用户自定义使用的,但要注意同一个终端的不同媒体编码不能使用相同的动态类型。比如,h264占用了102,那么opus就不能使用102了,可以使用103等
  5. 96以上的动态编码虽然没有规范,但有的数值也是常用在某一种编码的,比如101常用于telephone-event,因此不要随意占用101
  6. h264编码有不同的分辨率和模式,因此当一个终端支持多种h264编码能力时,一般使用不同的数值代表不同的能力,比如720P使用96, VGA使用97等等
  7. 在网络抓包中,过滤负载类型报文时使用类型数值过滤
    SIP协议之RTP负载类型(payload type)_第6张图片
  8. 主叫终端和被叫终端对于同一编码使用不同的动态类型数值时,比如主叫h264使用96, 被叫h264使用97。 协商后在通话中可能出现一方的RTP使用96,而另一方的RTP使用97的情况,当终端兼容不好时,可能会识别不出h264数据而将其丢弃。当遇到这种情况时,可以将其中一方的h264类型值改为和对端一样来规避

你可能感兴趣的:(VOIP,sip,rtp,payload,type,负载类型,rfc3551)