來電時,播放音樂是一個很常用的功能,下面是一些相關的命令:
一、單次播放playback
originate user/1000 &playback(ivr/8000/ivr-welcome_to_freeswitch.wav)
二、指定次數的循環播放loop_playback
注:這個方式,直接用命令在freeswitch控制台中,一直沒嘗試成功
originate user/1000 &loop_playback(+2 ivr/8000/ivr-welcome_to_freeswitch.wav)
總是報錯缺少文件數據參數,另外發現一個可以讓freeswitch瞬間崩潰的方法: originate user
/1000
&loop_playback +2 ivr
/8000/ivr-welcome_to_freeswitch
.wav,把括號去掉,在Freeswitch Console中輸入 ,馬上就崩了(windows 10環境+freeswitch 1.6.18)
官方用diaplan xml配置的方式如下:
<action application="loop_playback" data="+3 ivr/8000/ivr-welcome_to_freeswitch.wav"/>
如果使用esl-client,可以這樣寫:
SendMsg msg = new SendMsg(); msg.addCallCommand("execute"); msg.addExecuteAppName("loop_playback"); msg.addExecuteAppArg("+2 " + prompt); CommandResponse resp = context.sendMessage(msg);
三、無限循環播放endless_playback
originate user/1000 &endless_playback(ivr/8000/ivr-welcome_to_freeswitch.wav)
四、多個文件依次順序播放file_string
originate user/1000 &playback(file_string://ivr/8000/ivr-welcome_to_freeswitch.wav!ivr/8000/welcome_to.wav)
注:file_string:// 這個開頭不能省略,后面的文件用!拼起來即可
五、暫停/重頭開始播放
循環播放過程中,可以用uuid_break將音樂強制從頭開始播放(注:這個命令的命名方式很玄學,明明叫break,但是並不能中斷播放,叫restart_playback或許更適合)
真正要暫停,可以用pause命令,恢復暫停繼續播放用restart
這些命令可以在esl中直接調用。
注意:一旦音樂播放起來,沒有方法可以讓音樂徹底停止,又不影響通話(除非把當前Leg,bridge到其它leg之類),有一個uuid_kill方法,這個方法會中斷該Channel上的所有事件,包括通話,也不滿足要求.
六、監聽播放開始/結束事件
PLAYBACK_START
PLAYBACK_STOP
這2個事件對應音樂的開始播放/播放完成,值得一提的是,對於循環播放endless_playback,這一組事件,會重復一直不停的觸發,直到電話掛斷。
參考文章:
1、https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools:+playback
2、https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools%3A+loop_playback
3、https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools%3A+endless_playback
4、https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools%3A+file_string