定義了語(yǔ)音等待的規(guī)范。IPPBX的功能熱鍵可啟用MoH功能。
音樂(lè)等待具體的實(shí)現(xiàn)方式是,當(dāng)呼叫方(Alice)呼叫被呼叫方(Bob)后,接聽(tīng)以后,被呼叫方用戶(Bob)設(shè)置此呼叫為等待狀態(tài),在等待狀態(tài)時(shí),通過(guò)媒體服務(wù)器對(duì)呼叫方播放音樂(lè),或者其他的自定義的語(yǔ)音流。被呼叫方通過(guò)對(duì)媒體服務(wù)器或者音樂(lè)播放服務(wù)器發(fā)送一個(gè)REFER消息,攜帶呼叫方信息。然后媒體服務(wù)器對(duì)呼叫方發(fā)起INVITE,替換已經(jīng)創(chuàng)建的會(huì)話中的被呼叫方。然后,媒體服務(wù)器對(duì)被呼叫方(Alice)發(fā)送音樂(lè)媒體流服務(wù)。一定時(shí)間后,Bob重新設(shè)置等待的呼叫,對(duì)呼叫方(Alice)發(fā)送INVITE消息,然后替換會(huì)話中的媒體服務(wù)器,變成Bob和Alice之間的通話。注意,這里仍然使用了渲染功能,但是在F5流程中實(shí)現(xiàn),表示其等待狀態(tài)開(kāi)啟。如果Alice拒絕對(duì)端的音樂(lè)播放,則Alice仍然會(huì)處于等待功能,但是會(huì)是靜音狀態(tài)(無(wú)聲音)。

通過(guò)以上呼叫流程我們知道,完成音樂(lè)等待流程處理需要23個(gè)flow。其中,F(xiàn)5開(kāi)啟音樂(lè)等待功能,F(xiàn)12開(kāi)始媒體服務(wù)器替換了Bob,媒體服務(wù)器對(duì)Alice發(fā)送音樂(lè)數(shù)據(jù)流確認(rèn)。在F12的流程中使用了渲染功能,增加了對(duì)automation和byeless功能標(biāo)簽的支持。關(guān)于automation tag 的功能在rfc3840中定義,關(guān)于byeless tag 的支持在rfc4235中定義。rfc3840定義了媒體服務(wù)器的能力支持,rfc4235定義了自動(dòng)對(duì)話事件包管理機(jī)制。具體的細(xì)節(jié)讀者可以參考鏈接資源。以下是一個(gè)完整的音樂(lè)等待的呼叫流程,配合了SIP消息。我們根據(jù)此圖例來(lái)進(jìn)一步說(shuō)明具體的呼叫流程。

首先是Alice對(duì)Bob發(fā)送INVITE消息(F1),表示要對(duì)Bob進(jìn)行呼叫。

Bob對(duì)Alice發(fā)送180 振鈴消息(F2):

緊接著,Bob對(duì)Alice發(fā)送200 ok消息(F3):

Alice對(duì)Bob發(fā)送確認(rèn)ACK(F4),開(kāi)始語(yǔ)音流傳輸通話。

之后,Bob把Alice呼叫設(shè)置為語(yǔ)音等待。Bob重新發(fā)送一個(gè)新的INVITE攜帶了SDP,并且包含了一個(gè)a=sendonly,表示等待開(kāi)啟。執(zhí)行F5流程。

然后,Alice回復(fù)Bob 200 OK消息(F6),在SDP中增加了a=reconly 表示接受等待。

Bob回復(fù)Alice確認(rèn)ACK,無(wú)RTP語(yǔ)音流。此時(shí),Bob準(zhǔn)備開(kāi)始執(zhí)行音樂(lè)媒體流服務(wù)。

Bob對(duì)媒體服務(wù)器發(fā)送REFER消息,通知媒體服務(wù)器使用Alice替換Bob。

媒體服務(wù)器對(duì)Bob發(fā)送202 消息,表示接受這個(gè)請(qǐng)求(F9)。

然后媒體服務(wù)器發(fā)送Notify消息(F10):

Bob發(fā)送200 OK(F11):

接下來(lái),媒體服務(wù)器對(duì)Alice發(fā)送INVITE消息,替換Bob(F12),注意這里的SIP消息中增加了渲染功能的支持,包括automation和byeless功能標(biāo)簽,需要啟用事件包處理,媒體服務(wù)器能力支持等渲染功能。

以上圖例中沒(méi)有顯示contact中的渲染功能標(biāo)簽,但是在RFC5359中的音樂(lè)等待(F12)中的消息細(xì)節(jié)是:
F12 INVITE Music Server -> Alice
INVITE sips:a8342043f@atlanta.example.com;gr SIP/2.0
Via: SIP/2.0/TLS server.example.com:5061
;branch=z9hG4bK74rf
Max-Forwards: 70
From: <sips:music@server.example.com>;tag=0111
To: <sips:a8342043f@atlanta.example.com;gr>
Call-ID: a5-75-34-12-76@server.example.com
CSeq: 1 INVITE
Referred-By: <sips:bob@biloxi.example.com> Contact: <sips:music@server.example.com>;automaton
;+sip.byeless;+sip.rendering="no"
Require: replaces
Replaces: 12345600@atlanta.example.com
;from-tag=23431;to-tag=1234567
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Type: application/sdp
Content-Length: …
Alice接受媒體服務(wù)器的請(qǐng)求,對(duì)媒體服務(wù)器發(fā)送200 OK(F13):

媒體服務(wù)器收到200 OK以后,對(duì)Alice發(fā)送確認(rèn)ACK消息(F14),然后對(duì)Alice發(fā)送音樂(lè)媒體流,Alice現(xiàn)在可以聽(tīng)到媒體服務(wù)器對(duì)Alice播放的音樂(lè)文件。

因?yàn)橐呀?jīng)播放媒體流流程開(kāi)始,Alice對(duì)Bob發(fā)送BYE消息(F16):

Bob接受來(lái)自于Alice的BYE消息,對(duì)Alice發(fā)送200 OK(F16)。

媒體服務(wù)器對(duì)Bob發(fā)送NOTIFY消息(F17),表示媒體播放成功,并且包含一個(gè)200 OK的響應(yīng)消息。

Bob對(duì)媒體服務(wù)器響應(yīng)了一個(gè)200 OK(F18),表示收到此提示,同時(shí)包含了dialog的確認(rèn)內(nèi)容,包括了REFER需要的call-id,to tga和from tag。

到此為止,Alice被完全駐留在媒體服務(wù)器的會(huì)話中。接下來(lái),Bob可能需要重新接聽(tīng)Alice的電話,那么,Bob就會(huì)重新對(duì)Alice發(fā)送INVITE請(qǐng)求消息(F19),然后替換會(huì)話中的媒體服務(wù)器。

Alice對(duì)Bob回復(fù)200 OK消息,表示接受替換,重新恢復(fù)到通話狀態(tài)(F20)。

Bob最后對(duì)Alice回復(fù)確認(rèn)ACK(F21),可以恢復(fù)正常通話狀態(tài)。

雙方通話以后,因?yàn)槊襟w服務(wù)器仍然和Alice有會(huì)話的綁定關(guān)系,因此為了結(jié)束媒體播放,Alice仍然需要對(duì)媒體服務(wù)器發(fā)送一個(gè)BYE消息,表示音樂(lè)等待播放結(jié)束(F22):

媒體服務(wù)器收到200 OK以后,對(duì)Alice發(fā)送一個(gè)最后的200 OK(F23),告知媒體服務(wù)器已經(jīng)收到Alice的響應(yīng),媒體服務(wù)器正式釋放被駐留在媒體服務(wù)器的會(huì)話,解除Alice對(duì)媒體服務(wù)器的綁定關(guān)系。Bob和Alice的正常通話才算成功完成,雙方開(kāi)始正式的通話過(guò)程。

在音樂(lè)等待的處理流程中使用了REFER的method來(lái)幫助處理音樂(lè)等待,具體的RFER規(guī)范在RFC3515中定義,讀者可以查閱學(xué)習(xí)。
我們的討論中使用了一般的IPPBX媒體服務(wù)器來(lái)替換音樂(lè)媒體服務(wù)器,用戶也可以通過(guò)第三方的音樂(lè)服務(wù)的服務(wù)器端來(lái)處理音樂(lè)文件,用戶使用過(guò)程中可能可以獲得更多的體驗(yàn)。另外,很多媒體服務(wù)器也可以對(duì)其播放文件實(shí)現(xiàn)自定義處理。例如,在Asterisk/FreePBX或者FreeSWITCH開(kāi)源平臺(tái)都可以通過(guò)修改配置文件來(lái)實(shí)現(xiàn)自定義的MoH文件支持。
在上面的討論中,我們僅根據(jù)呼叫流程的正常狀態(tài)說(shuō)明的整個(gè)MoH的處理過(guò)程。事實(shí)上,在MOH的實(shí)際部署過(guò)程中,讀者會(huì)遇到很多的其他的技術(shù)問(wèn)題。例如,播放文件的格式支持問(wèn)題,終端兼容性問(wèn)題,語(yǔ)音播放的帶寬消耗問(wèn)題,音樂(lè)播放的服務(wù)會(huì)話的管理問(wèn)題,回復(fù)消息失敗問(wèn)題,安全問(wèn)題等。所以,一般的MoH功能僅在內(nèi)網(wǎng)環(huán)境下使用一般不會(huì)出現(xiàn)問(wèn)題,如果通過(guò)第三方的媒體平臺(tái)提供所謂的比較靈活的媒體播放業(yè)務(wù),讀者一定要注意以上問(wèn)題。
參考資料:
https://www.rfc-editor.org/rfc/rfc5359.txt
https://tools.ietf.org/html/rfc7088
https://www.rfc-editor.org/rfc/rfc3515.txt
https://tools.ietf.org/html/rfc3840
https://tools.ietf.org/html/rfc3891
https://support.sonus.net/display/SBXDOC51/GRUU+Support
www.freepbx.org.cn
https://svn.resiprocate.org/viewsvn/resiprocate/main/resip/recon/MOHParkServer/doc/MOHParkServer_User_Documentation.pdf?revision=8937&view=co
http://ijsetr.com/uploads/463152IJSETR13872-273.pdf
https://tools.ietf.org/html/rfc3665
https://tools.ietf.org/html/rfc3265
https://tools.ietf.org/html/rfc3515
https://tools.ietf.org/html/rfc4317
關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的Asterisk行業(yè)分享
Asterisk freepbx 中文官方論壇:http://bbs.freepbx.cn/forum.php
Asterisk freepbx技術(shù)文檔: www.freepbx.org.cn
融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
Asterisk/FreePBX中國(guó)合作伙伴,官方qq技術(shù)分享群(3000千人):589995817