服务质量

最后,我们来看一下媒体描述中的服务质量描述,它们是由 “a=rtcp-fb” 属性描述的。实际上,在 WebRTC 中,rtcp-fb(rtcp feedback)有两层含义:一是指 RTCP 消息中专门反馈信息的一类消息,将在第 9 章中做详细介绍;二是指 SDP 中使用的 “a=rtcp-fb” 属性,该属性可以用来设置 WebRTC 终端支持哪些 rtcp feedback 消息,也就是本节要介绍的内容。

为了更好地说明 SDP 是如何使用 “a=rtcp-fb” 属性支持的 rtcp feedback 消息来影响服务质量的,我们举一个例子,如代码 7.10 所示。

代码7.10 RTC feedback
...
m=audio ...
...
a=rtcp-fb:111 transport-cc
...
m=video ...
...
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
...

在上述代码中,第4行代码指明PT=111的编解码器(Opus)支持Transport-CC这种类型的rtcp feedback消息。这里有必要简要介绍一下Transport-CC。在WebRTC中有两种拥塞控制算法:一种是Goog-REMB;另一种是Transport-CC,它是WebRTC用来代替Goog-REMB的。所以第4行代码的含义是,在使用PT类型为111的编解码器时,支持Transport-CC类型的rtcp feedback报文,同时也说明WebRTC使用Opus编解码器时开启了Transport-CC拥塞控制算法。

同理,第8∼9行代码指明WebRTC使用VP8编码器时,既支持Goog-REMB的RTCP报文,也支持Transport-CC的RTCP报文。第10行代码的ccm(codec con trol message)和fir(full intra refresh)指明WebRTC支持RTCP的FIR指令(即申请关键帧指令)。第11行代码指明WebRTC支持NACK报文。第12行代码指明支持NACK报文的同时,还支持PLI报文。以上这些RTCP指令将会在第9章中详细介绍。