根据RFC 4566 https://tools.ietf.org/html/rfc4566#page-22,sdp中的m =行包含一个端口:
m=audio 49170 RTP/AVP 0
ICE候选人已经确定了港口吗?它们也包含端口:
a=candidate:1 1 UDP 2130706431 10.0.1.1 8998 typ host
正如RFC 5245 https://tools.ietf.org/html/rfc5245#page-9所述,
“ICE是一个 提供/答案模型的扩展,并通过包括一个 SDP中的多种IP地址和端口提供和解答, 然后通过点对点连接测试连接性 检查“。
这是否意味着m =行中指定的端口已过时?
使用libjingle创建新的sdp商品时,它会显示IP地址0.0.0.0
以及端口9(即“丢弃”端口)。所以它显然没有看到m = line中的端口是相关的:
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 9 102 0 8 106 105 13 127 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
有人知道吗?
答案 0 :(得分:2)
m =行中的IP和候选者是来自候选前时代的遗留物,其中使用固定IP和端口进行通信。
至少使用WebRTC,如第33页的https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-15中所述,
“端口值设置为默认ICE候选端口 这个m =部分,但考虑到还没有候选人 聚集后,必须使用“虚拟”端口值9(丢弃),如 在[I-D.ietf-ice-trickle]第5.1节中指出。“和
“m =线必须紧跟一条”c =“线,如规定的那样 在[RFC4566]第5.7节中。再一次,因为还没有候选人 聚集后,“c =”行必须包含“虚拟”值“IN IP4 0.0.0.0“,如[I-D.ietf-ice-trickle]第5.1节中所定义。”,
用指定的简单词语表示,m = line包含一个虚拟IP和端口,只要没有收集候选者并且不需要媒体流,此后默认候选者的IP和端口。