如何在 android 中静音 PJSUA 调用

How to mute PJSUA call in android

我正在 android 使用 PJSUA 开发 VOIP 应用程序,在这里我想静音通话

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

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

     pj_status_t pjsua_conf_adjust_rx_level (pjsua_conf_port_id slot,
    float level )   

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

Parameters

  • slot: The conference bridge slot number.
  • level: Signal level adjustment. Value 1.0 means no level adjustment, while value 0 means to mute the port.

Returns

  • PJ_SUCCESS on success, or the appropriate error code.

我想要这样的解决方案来使用 PJSUA

在 android 中保持通话
public void holdCall() {
    CallOpParam prm = new CallOpParam(true);
    try {
        currentCall.setHold(prm);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

谢谢

我找到了使用 PJSIP 静音和取消静音的解决方案 要了解有关 pjsip 功能的信息,请访问 link 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());
            }
        }

希望你一切顺利。因为我也是 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。这样你就可以看到代码了。

享受你的代码时间:)

我也在开发 pjsua 应用程序。我在 OS 图层上设置静音并且效果很好。

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

顺便说一下,打开扬声器 - 同样的方法:

audioManager.setSpeakerphoneOn(true);

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