Freeswitch监听功能--单向监听

1.监听函数:eavesdrop

   lua脚本中调用监听:

   local cmd = "originate loopback/3333 &eavesdrop("..uuid..")"
   api:executeString(cmd)

2、监听变量设置

  参考C代码:mod_dptools.c   875行

        const char *require_group = switch_channel_get_variable(channel, "eavesdrop_require_group");
        const char *enable_dtmf = switch_channel_get_variable(channel, "eavesdrop_enable_dtmf");
        const char *bridge_aleg = switch_channel_get_variable(channel, "eavesdrop_bridge_aleg");
        const char *bridge_bleg = switch_channel_get_variable(channel, "eavesdrop_bridge_bleg");
        const char *whisper_aleg = switch_channel_get_variable(channel, "eavesdrop_whisper_aleg");
        const char *whisper_bleg = switch_channel_get_variable(channel, "eavesdrop_whisper_bleg");

   从代码中可以看出设置eavesdrop_bridge_aleg和eavesdrop_bridge_bleg来决定监听a通道还是b通道,freeswitch默认是同时监听双向通话的语音。

3、监听功能实现代码理解

   mod_dptools.c   根据设置的的变量设置通道的标记位。

     if (switch_true(bridge_bleg)) {
    flags |= ED_BRIDGE_WRITE;
    }

    但是这获取到的bridge_bleg变量指针为空。

    所以下面代码也不起作用,具体原因还要进一步研究。

    问题已经定位:loopback方式设置通道变量失败,采用下面的方法设置成功

               originate loopback/lp123456  'set:eavesdrop_bridge_aleg=true,eavesdrop:1234567890' inline

    switch_ivr_async.c  

 if (flags & ED_BRIDGE_WRITE) {
     write_flags = SMBF_WRITE_STREAM | SMBF_WRITE_REPLACE;
}

 4、解决办法:屏蔽switch_ivr_async.c  2103行的代码重新编译,实现只监听通道中输入的声音,不监听对通道的放音。

status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值