Android中使用webRTC发送Dtmf信令

发送一个dtmf,搞了两天,我有什么办法,我也很绝望啊,sip与webrtc不可兼得

在建立PeerConnection 时,会创建一系列的RtpSender,可通过RtpSender.track().kind()方法来确认我们所需的RtpSender,dtmf的发送需要kind为audio的RtpSender,拿到后再通过RtpSender.dtmf()获取到我们需要的DtmfSender就可以了

public DtmfSender getDtmfSender() {
        for (RtpSender sender : peerConnection.getSenders()) {//只有kind为audio的RtpSender存在dtmf,所以这里随便判断一下就好
            if (sender.track() != null && sender.dtmf() != null) {
               return sender.dtmf();
            }
        }
        return null;
    }

拿到后的操作就更简单了

			DtmfSender dtmfSender = getDtmfSender();//一个信令对应一个sender

            if (dtmfSender != null && dtmfSender.canInsertDtmf()) {
                dtmfSender.insertDtmf(digits, 200, 50);//参数为信令、信令持续时间、音调间隙
            }

信令发送就这么简单,需要注意的是每发送一次dtmf信号,RtpSender都是会变化的,也就是说DtmfSender需要新获取

贴一下源码中的注释

/**
   * Queues a task that sends the provided DTMF tones.
   * <p>
   * If insertDtmf is called on the same object while an existing task for this
   * object to generate DTMF is still running, the previous task is canceled.
   *
   * @param tones        This parameter is treated as a series of characters. The characters 0
   *                     through 9, A through D, #, and * generate the associated DTMF tones. The
   *                     characters a to d are equivalent to A to D. The character ',' indicates a
   *                     delay of 2 seconds before processing the next character in the tones
   *                     parameter. Unrecognized characters are ignored.
   * @param duration     Indicates the duration in ms to use for each character passed in the tones
   *                     parameter. The duration cannot be more than 6000 or less than 70.
   * @param interToneGap Indicates the gap between tones in ms. Must be at least 50 ms but should be
   *                     as short as possible.
   * @return             true on success and false on failure.
   */
  public boolean insertDtmf(String tones, int duration, int interToneGap) {
          checkDtmfSenderExists();
          return nativeInsertDtmf(nativeDtmfSender, tones, duration, interToneGap);
  }

这是我们用到的核心方法,注释中写的很清楚,就不多做解释了
参考 webRTC android 官方文档

虽然webRTC已经出现很多年了,但资料不多,web还好,android这一块主要还是靠官方文档活着

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值