最近更新了M89代码,看了下Release Notes,有几个需要关心的地方。 Plan B SDP语法后续处理计划 WebRTC 1.0已经正式成为W3C标准,推荐使用标准SDP格式:Unified Plan,主流浏览器基本都支持Unified Plan SDP。Plan B SDP后续将会不赞成使用,直到移除掉。官方后续时间计划如下: M89 (2021.02):在开发者控制台增加不赞成使用警告 M93 (2021.08): Plan B被移除掉, 但是增加了选项,可以延长移除的截止日期 M96 (2022.01): 不再允许延长截止日期,Plan B将彻底移除 rtp payload类型增加新范围 M89中RTP payload类型增加了新的值范围:35-65。 首先根据RFC3551,回顾下目前用于标准音视频编码器的RTP payload类型。 音频编码器的payload类型 [crayon-69bce1ecb3392689383656/] 视频编码器的payload类型 [crayon-69bce1ecb3397478892044/] 原有动态RTP payload类型范围局限性 RFC 3551中定义的动态RTP payload类型范围[96,127]只能表示32种payload类型。由于Chrome支持的音视频编解码器越来越多,而且像DTMF,FEC,RTX机制,冗余编码,H264不同profile/打包模式等都需要占用一个RTP payload类型。原先的范围已经不够使用了。 这里我们看下某个默认生成的Offer SDP中的内容(有点长),a=rtpmap后面跟着就是某种RTP payload类型。 [crayon-69bce1ecb339a861392565/] 根据m-line,可知,音频用到的RTP payload类型有:111 103 104 9 0 8 106 105 13 110 112 113 126。视频用到的RTP payload类型有:96 97 98 99 100 101 102 121 127 120 125 107 108 109 124 119 123 118 114 115 116。 在动态RTP payload类型[96,127]范围内,用到了31个取值,如果稍微再复杂些,[96,127]确实不够用了。 新增RTP payload类型范围 RFC3551中,section-3中提到,当需要定义的动态payload类型超过32个时,推荐优先使用unassigned payload类型这个范围的值。 为了兼容旧版Chrome,所以M89中增加了新的RTP payload类型范围:35-65。由前面视频编码器的payload类型可知[35,65]位于[35,71]这个Unassigned payload类型范围内。 在webrtc_video_engine.cc中相关说明代码如下: [crayon-69bce1ecb339b333263973/] 总结 针对前面提到的两点重要更新,我觉得后续我们WebRTC服务器开发的得注意下,需要完全支持Unified Plan,同时需要能正确识别[35,65]这个范围表示的RTP payload类型。 参考 [1] WebRTC M89 Release Notes.https://groups.google.com/g/discuss-webrtc/c/Zrsn2hi8FV0/m/7Y4RLluHAQAJ. [2] RFC3551.https://tools.ietf.org/html/rfc3551. 本文已收录到大话WebRTC专栏,更多精彩请访问《大话WebRTC》。