再谈Lync的MoH

在好久之前,我写过一篇关于等待音乐的文章。经过这么设置以后,用户能够能够在通话过程当中按Hold键,这样对方就能够听到等待音乐。并且咱们都知道这个音乐是从客户端发送到服务器上,而后再传给对方的。这样的client-side MoH在实际的操做中存在这么两个小问题:服务器

第一:在客户端点击了Hold以后,配置不是很高的电脑上可能会出现一段时间的假死,大概在4秒只以后,对方才会听到音乐。估计这段时间内应该是本地启动什么播放模块,而后再发送这个音乐的流媒体到服务器。网络

第二:若是用户是经过Edge登陆拨打电话的话,在网络状况不是很好的状况下,对端所听到的音乐音质降低得厉害session

 

今天咱们来看看Server-side的MoH是如何实现的。目前Lync尚未本身的Server Side的功能,只能借助于外部设备。如今借助于NET的UX 1000,咱们看看MoH整个过程是如何来实现的。在这里的呼叫流程是Lync把全部的呼叫发送给UX 1000,而后UX 1000再把呼叫发送给PSTN,最终达到用户端。app

 

咱们先看看UX 1000上如何设置MoHtcp

首先检查UX 1000上是否加载了音乐文件,经过下图咱们看到如今系统里面并无文件。ide

p_w_picpath

而后咱们到媒体配置,选择上载一个音乐文件测试

p_w_picpath

选择一个以前弄好的WAV文件,这个文件大小仍是有要求的(UX 1000最大为1M,UX2000为4M),在格式方面须要文件的采样率为8KHz的单声道WAV文件。spa

p_w_picpath

而后再回到DSP信息处检查,这个时候就显示loaded了。.net

p_w_picpath

下面就是为针对Lync的SIP 中继打开MoH功能,咱们看到在这里能够打开,也能够关闭。咱们足额则Always Enabled就行了。blog

p_w_picpath

 

一切都OK了,使用Lync用户拨打一个3001测试看看。接通以后,而后点击下图所示的图标,这个时候对方立马就能够听到音乐的。

 

p_w_picpath

而Lync客户端也会以下同样显示,若是要恢复呼叫,只要点击Resume Call就OK。

p_w_picpath

 

到这里MoH就已经实现了,并且咱们发现,如今一点击hold,对方立刻就听到音乐,没有任何的延迟,并且客户端也不会有任何的假死。同时这个音质就很是好,和用户所在的网络没有任何关系。

可是咱们固然不知足这点了,咱们想看看在用户点击了Hold以后,到底Lync发送了什么消息给网关。

 什么?Lync竟然发送了一个INVITE给网关?确实是这样一个包,不过咱们注意到在SDP里面有这么一句话a=inactive,这句就是告诉网关,如今Lync客户端要进入inactive状态了,请不要发送任何的RTP过来,Lync客户端也不会发送任何的RTP给网关。在网关收到这个INVITE以后,它就开始给对方播放音乐了

INVITE sip:192.168.1.223:5060;transport=TCP SIP/2.0
FROM: <sip:+216@lync2010.ucdemo.net;user=phone>;epid=225A1702DD;tag=901872914a
TO: <sip:3001@192.168.1.223;user=phone>;tag=c0a801df-32
CSEQ: 177 INVITE
CALL-ID: 7b914bb2-4361-4b83-a33c-20bfb3f03eb2
MAX-FORWARDS: 70
VIA: SIP/2.0/TCP 192.168.1.82:49880;branch=z9hG4bK543e4d6f
CONTACT: <sip:Lync2010.ucdemo.net:5068;transport=Tcp;maddr=192.168.1.82;ms-opaque=49ed7dd110f0a17a>
CONTENT-LENGTH: 278
SUPPORTED: 100rel
USER-AGENT: RTCC/4.0.0.0 MediationServer
CONTENT-TYPE: application/sdp

v=0
o=- 14 2 IN IP4 192.168.1.82
s=session
c=IN IP4 192.168.1.82
b=CT:1000
t=0 0
m=audio 50932 RTP/AVP 101 13 0
c=IN IP4 192.168.1.82
a=rtcp:50933
a=label:Audio
a=inactive
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=rtpmap:13 CN/8000
a=rtpmap:0 PCMU/8000

 

若是用户点击了Resume以后,咱们则会看到以下的数据包,其中的SDP变成了a=sendrecv,这个代表如今客户端是出于活动状态,又能够接受,又能够发送,网关在收到这个信息以后,就中止播放音乐,从新把两个端点的语音通道创建起来。

INVITE sip:192.168.1.223:5060;transport=TCP SIP/2.0
FROM: <sip:+216@lync2010.ucdemo.net;user=phone>;epid=225A1702DD;tag=901872914a
TO: <sip:3001@192.168.1.223;user=phone>;tag=c0a801df-32
CSEQ: 178 INVITE
CALL-ID: 7b914bb2-4361-4b83-a33c-20bfb3f03eb2
MAX-FORWARDS: 70
VIA: SIP/2.0/TCP 192.168.1.82:49880;branch=z9hG4bKb33556
CONTACT: <sip:Lync2010.ucdemo.net:5068;transport=Tcp;maddr=192.168.1.82;ms-opaque=49ed7dd110f0a17a>
CONTENT-LENGTH: 278
SUPPORTED: 100rel
USER-AGENT: RTCC/4.0.0.0 MediationServer
CONTENT-TYPE: application/sdp

v=0
o=- 14 3 IN IP4 192.168.1.82
s=session
c=IN IP4 192.168.1.82
b=CT:1000
t=0 0
m=audio 50932 RTP/AVP 101 13 0
c=IN IP4 192.168.1.82
a=rtcp:50933
a=label:Audio
a=sendrecv
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=rtpmap:13 CN/8000
a=rtpmap:0 PCMU/8000

 

若是咱们采用的是Lync本身的Client-side MoH,经过抓包,咱们会发现Lync送过来的INVITE的里面的SDP为a=sendonly,这个则是代表,如今的Lync客户端是只发不收的,它只会把MoH的音乐传出来,而不会接受网关发过的媒体消息。

另外须要注意一点的是,若是Server side的MoH和客户端的MoH都设置的话,服务器端的设置会把客户端的设置覆盖。因此建议若是你启用了Server side的MoH,

能够以下的命令取消客户端的MoH。

p_w_picpath

相关文章
相关标签/搜索