SDP
- 在SDP里会包含媒体协议(比如接受什么编码格式、什么端口和地址收发rtp)
比如:这例SDP中包含的信息,可以接受这些媒体格式,用7078端口接收发送媒体流,这里的数字是payload type。最后可以看到发回的PT值确实是8,如果发送的rtp PT值和SDP中对方要求的不一样,那可能会造成无声或无画面情况(因为解析不出来)
NAT
-
如果客户端不知道自己在一个NAT后的私网地址上,可以用STUN的方法或者服务器开启NAT探测,当服务器端检测到它是一个私网地址(RFC1918,如10.x.x.x、 192.168.x.x等)时,即判定该私网地址是不可达的,转而使用其公网地址(因为服务器端收到的包的实际来源是 NAT 设备的公网地址)。
-
rport开启后,via上会附带客户端地址和端口。
RFC 规定 ACK 消息要发到 200 OK 消息的 Contact 指定的地址上。
客户端向服务器注册时,在 Contact 头域中指定自己的联系地址,后续服务器向客户端发送请求都会发送到该联系地址上。 -
freeswitch服务器端软交换软件具有“学习”功能,它通过一系列的判断发现 Bria 可能位于 NAT 后面(因为它没有收到来自192.168.7.6的包反而收到了来自27.216.184.13的包),转而开始将 RTP 流发往27.216.184.13,以便“穿越”NAT 设备,正常通信。
-
如果没有stun服务器,可以在本地路由器上开启UPnP,在UPnP上配置一下本地端口和公网端口映射关系。
RTP
-
如果音频不是以 PCMU 或 PCMA 格式编码的,则wireshark不能播放。如果语音编码不是
PCM 格式的话(如 G729),则音频流只能存成 raw 格式,然后再用其他工具去分析。 -
在rtp流那边选择find reverse,可以查找到对应的反向流
README
本文是对杜金房的《voip-freeswitch》一文的学习笔记,有兴趣可以去了解原作