我是 sip/sdp 世界的新手。
根据我对 SDP 协议(protocol)的理解,如果我们定义 a=sendonly 从 sip 服务器到客户端软电话,软电话应该打开一个 RTP session 进行监听,但它不应该向目的地发送任何 RTP 数据包。我对么?
在我的例子中,我听不到任何声音,并且有一个 RTP 流来上传音频。注意:我使用的是多播地址。
这是一个 SIP/SDP 转储(从服务器到客户端软件电话):
SIP/2.0 200 OK Via: SIP/2.0/UDP 192.168.8.219:5060;branch=z9hG4bK-d8754z-b394381274917501-1---d8754z-;rport=5060 From: ;tag=d67855ee To: ;tag=KQQHgQ93Sjg1F Call-ID: YTExMzkwZDdhMGM1NTJmMDJlMGFiYjgxMGI1ZDNmMDI. CSeq: 2 INVITE Contact: User-Agent: FreeSWITCH-mod_sofia/1.2.0-rc2+git~20120623T054003Z~65b2f2d2e7+unclean~20120623T083401Z Accept: application/sdp Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE Supported: timer, precondition, path, replaces Allow-Events: talk, hold, presence, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer Content-Type: application/sdp Content-Disposition: session Content-Length: 265 v=0 o=FreeSWITCH 1340907341 1340907343 IN IP4 224.168.168.168 s=FreeSWITCH c=IN IP4 224.168.168.168 t=0 0 a=sendonly m=audio 34567 RTP/AVP 0 101 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-16 a=silenceSupp:off - - - - a=ptime:20
我使用另一个软电话在该地址和端口上多播声音(通过 wireshark 验证)。 为什么我听不到声音?
顺便说一下,软电话我用的是xlite,服务器是freeswitch。
最佳答案
a=sendonly
如您所料,是单向流。服务端说要发送数据,不会接收数据,所以客户端必须开启一个监听端口。你做对了。
如果您收不到音频,可能是时候使用像 Wireshark 这样的分析工具了。查看服务器是否实际发送任何 RTP 数据。
关于sip - 在这种情况下,SDP sendonly 意味着打开一个 RTP 音频流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11256362/