sound_port.c EC приостановлено из-за неактивности PjSip 2.8 на Android - PullRequest
1 голос
/ 14 мая 2019

Мы разрабатываем Voip-приложение для Android с использованием Pjsip-Framework (версия 2.8 с openssl). На некоторых устройствах мы сталкиваемся со следующей проблемой: После успешного установления глотка участники не могут слышать друг друга. Всякий раз, когда это происходит, в журнале появляется следующее сообщение:

sound_port.c  EC suspended because of inactivity

На устройствах, где участники могут слышать друг друга, за этим сообщением следует:

sound_port.c  EC activated

Это сообщение не появляется на затронутых устройствах или оно появляется, но с задержкой на минуту или даже больше.

Для активации звукового порта мы используем следующий код, который является тем же кодом, который используется в PjSip Sampleapp:

@Override
public void onCallMediaState(OnCallMediaStateParam prm) {
    CallInfo ci;
    try {
        ci = getInfo();
    } catch (Exception e) {
        return;
    }

    CallMediaInfoVector cmiv = ci.getMedia();

    for (int i = 0; i < cmiv.size(); i++) {
       CallMediaInfo cmi = cmiv.get(i);
       if (cmi.getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO &&
           (cmi.getStatus() ==  pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE || cmi.getStatus() ==  pjsua_call_media_status.PJSUA_CALL_MEDIA_REMOTE_HOLD)) {
                // unfortunately, on Java too, the returned Media cannot be
                // downcasted to AudioMedia
                Media m = getMedia(i);
                AudioMedia am = AudioMedia.typecastFromMedia(m);

                // connect ports
                try {
                    MyApp.ep.audDevManager().getCaptureDevMedia().
                            startTransmit(am);
                    am.startTransmit(MyApp.ep.audDevManager().
                            getPlaybackDevMedia());
                } catch (Exception e) {
                    continue;
                }
        } else if (cmi.getType() == pjmedia_type.PJMEDIA_TYPE_VIDEO &&
                    cmi.getStatus() ==  pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE && cmi.getVideoIncomingWindowId() != pjsua2.INVALID_ID) {
                vidWin = new VideoWindow(cmi.getVideoIncomingWindowId());
                vidPrev = new VideoPreview(cmi.getVideoCapDev());
        }
    }
    MyApp.observer.notifyCallMediaState(this);
}

Как я уже говорил, этот код, похоже, работает на некоторых устройствах, а на других - к сожалению, не работает (надежно). Любая помощь приветствуется !!

...