WebRTC Trickle ICE中sdpMid与sdpMLineIndex的含义及区别
WebRTC ICE候选中sdpMid与sdpMLineIndex字段说明
你的理解完全准确,两个字段的实际作用和你推测的规则完全一致。
你调用RTCIceCandidate.toJSON()输出的结构是Trickle ICE流程里标准的信令传输格式,两个字段的定义如下:
sdpMid:是对应媒体流在SDP中a=mid行的字符串标识。如果SDP中音频媒体段声明为a=mid:audio,那么该音频流关联的所有ICE候选的sdpMid取值一定是"audio";如果是视频段声明a=mid:video,对应候选的该字段值就是"video"。sdpMLineIndex:是媒体流对应m=描述行在整个SDP中从0开始计数的顺序索引。如果音频是SDP中第一个出现的媒体段,该字段固定为0;视频是第二个媒体段则固定为1,和a=mid具体写什么值没有关联。
你调试时看到二者取值总是呈0/"0"、1/"1"的对应关系,只是主流浏览器(Chrome、Firefox等)默认生成SDP的惯例:直接把a=mid的值设置为和媒体行索引相同的数字字符串。这不是WebRTC标准的强制要求,部分实现或者自定义SDP场景下,sdpMid完全可以是任意非数字的字符串值,不要在业务逻辑里硬编码假设二者数值相等。
实际信令交互过程中,两个字段只要传其中一个,接收端就可以定位到ICE候选对应的媒体流,不过标准要求所有WebRTC实现必须兼容两个字段同时存在、任意一个缺失的场景。
内容的提问来源于stack exchange,提问作者selbie
相关产品推荐
相关产品推荐

