freeswitch笔记(7)-放音控制

来电时,播放音乐是一个很常用的功能,下面是一些相关的命令:

一、单次播放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

posted @ 2020-03-16 16:01  菩提树下的杨过  阅读(6211)  评论(5编辑  收藏  举报