在好久之前,我写过一篇关于等待音乐的文章。经过这么设置以后,用户能够能够在通话过程当中按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
而后咱们到媒体配置,选择上载一个音乐文件测试
选择一个以前弄好的WAV文件,这个文件大小仍是有要求的(UX 1000最大为1M,UX2000为4M),在格式方面须要文件的采样率为8KHz的单声道WAV文件。spa
而后再回到DSP信息处检查,这个时候就显示loaded了。.net
下面就是为针对Lync的SIP 中继打开MoH功能,咱们看到在这里能够打开,也能够关闭。咱们足额则Always Enabled就行了。blog
一切都OK了,使用Lync用户拨打一个3001测试看看。接通以后,而后点击下图所示的图标,这个时候对方立马就能够听到音乐的。
而Lync客户端也会以下同样显示,若是要恢复呼叫,只要点击Resume Call就OK。
到这里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 v=0 |
若是用户点击了Resume以后,咱们则会看到以下的数据包,其中的SDP变成了a=sendrecv,这个代表如今客户端是出于活动状态,又能够接受,又能够发送,网关在收到这个信息以后,就中止播放音乐,从新把两个端点的语音通道创建起来。
INVITE sip:192.168.1.223:5060;transport=TCP SIP/2.0 v=0 |
若是咱们采用的是Lync本身的Client-side MoH,经过抓包,咱们会发现Lync送过来的INVITE的里面的SDP为a=sendonly,这个则是代表,如今的Lync客户端是只发不收的,它只会把MoH的音乐传出来,而不会接受网关发过的媒体消息。
另外须要注意一点的是,若是Server side的MoH和客户端的MoH都设置的话,服务器端的设置会把客户端的设置覆盖。因此建议若是你启用了Server side的MoH,
能够以下的命令取消客户端的MoH。