如何在android中静音PJSUA调用

时间:2016-06-20 18:48:10

标签: android pjsip

我正在使用PJSUA开发Android中的VOIP应用程序,这里我要静音调用

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

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

     pj_status_t pjsua_conf_adjust_rx_level (pjsua_conf_port_id slot,
    float level )   

通过使声音更大或更安静来调整从指定端口(到桥接器)接收的信号电平。

  

参数

     
      
  • slot:会议桥插槽号。
  •   
  • 级别:信号级别调整。值1.0表示没有级别调整,而值0表示静音端口。
  •   
     

返回

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

我希望像这样的解决方案使用PJSUA在Android中保持调用

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

谢谢

3 个答案:

答案 0 :(得分:2)

希望你做得很好。因为我在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。所以你可以看到代码。

享受您的代码时间:)

答案 1 :(得分:2)

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

find
顺便说一句,开启扬声器 - 同样的方式:

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

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

答案 2 :(得分:1)

我找到了使用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());
            }
        }