【问题标题】:How to mute PJSUA call in android如何在android中静音PJSUA调用
【发布时间】:2016-06-20 18:48:09
【问题描述】:

我正在使用 PJSUA 在 android 中开发 VOIP 应用程序,这里我想静音呼叫

我正在阅读与 PJSUA 相关的文档,我找到了用于此目的但无法在 android APP 中实现的方法,请任何可以帮助我将呼叫设置为静音模式的人

这里我提供了来自 PJSUA 文档的详细信息,

     pj_status_t pjsua_conf_adjust_rx_level (pjsua_conf_port_id slot,
    float level )   

调整从指定端口(到桥接器)接收的信号电平,使其更响或更安静。

参数

  • slot:会议桥槽号。
  • level:信号电平调整。值 1.0 表示不进行电平调整,值 0 表示将端口静音。

返回

  • PJ_SUCCESS 成功,或相应的错误代码。

我想要这样的解决方案来使用 PJSUA 在 android 中保持通话

public void holdCall() {
    CallOpParam prm = new CallOpParam(true);
    try {
        currentCall.setHold(prm);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

谢谢

【问题讨论】:

    标签: android pjsip


    【解决方案1】:

    希望你做得很好。因为我也是 android 中 PJSUA 的新手。我阅读了更多有关使通话静音的文档。但我找到了一种可能的最佳解决方案,它在我的环境中完美运行,这些在下面给出

     public void setMute(boolean mute) {
        // return immediately if we are not changing the current state
        CallInfo info;
        try {
            info = getCurrentCall().getInfo();
        } catch (Exception exc) {
            return;
        }
    
        for (int i = 0; i < info.getMedia().size(); i++) {
            Media media = getCurrentCall().getMedia(i);
            CallMediaInfo mediaInfo = info.getMedia().get(i);
    
            if (mediaInfo.getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO
                    && media != null
                    && mediaInfo.getStatus() == pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE) {
                AudioMedia audioMedia = AudioMedia.typecastFromMedia(media);
    
                // connect or disconnect the captured audio
                try {
                    AudDevManager mgr = MyApp.ep.audDevManager();
    
                    if (mute) {
                        mgr.getCaptureDevMedia().stopTransmit(audioMedia);
                    } else {
                        mgr.getCaptureDevMedia().startTransmit(audioMedia);
                    }
    
                } catch (Exception exc) {
                }
            }
        }
    }
    

    对于 pjsip 的支持,我们中的一个好人做得非常出色here。这样你就可以看到代码了。

    享受你的代码时间:)

    【讨论】:

    • 您也发布了相同的答案,但无论如何感谢提及 pjsip 支持的链接
    【解决方案2】:

    我也在开发一个 pjsua 应用程序。我在 OS 层设置了静音,它运行良好。

    AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
    audioManager.setMicrophoneMute(true);
    

    顺便说一句,打开扬声器 - 方法相同:

    audioManager.setSpeakerphoneOn(true);
    

    即使我建议在每次通话前关闭扬声器并取消静音,因为其他一些拨号器应用在通话结束后不会关闭它们。

    【讨论】:

      【解决方案3】:

      我找到了使用 PJSUA 将呼叫静音和取消静音的解决方案 要了解 pjsua 功能,请访问该链接 enter link description here

        CallInfo info;
          try {
              info = currentCall.getInfo();
          } catch (Exception e) {
              Log.e("Exception caught while getting call info.", e.toString());
              return;
          }
      
          for (int i = 0; i < info.getMedia().size(); i++) {
              Media media = currentCall.getMedia(i);
              CallMediaInfo mediaInfo = info.getMedia().get(i);
              if (mediaInfo.getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO && media != null
                      && mediaInfo.getStatus() == pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE) {
                  AudioMedia audioMedia = AudioMedia.typecastFromMedia(media);
                  try {
                      AudDevManager mgr = MyApp.ep.audDevManager();
                      if (isMute) {
                          mgr.getCaptureDevMedia().stopTransmit(audioMedia);
                      } else {
                          mgr.getCaptureDevMedia().startTransmit(audioMedia);
                      }
                  } catch (Exception e) {
                      Log.e("Exception caught while connecting audio media to sound device.", e.toString());
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        相关资源
        最近更新 更多