WebRTC Android зависает правильно - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь создать приложение WebRTC, основанное на webrtc-android-codelab .У меня есть WebView, и когда я хочу сделать видеозвонок, я запускаю упражнение и устанавливаю видеозвонок, он работает, но я не могу повесить видеозвонок и вернуться к предыдущему действию.Если я закрываю или удаляю одноранговое соединение, я получаю следующую ошибку:

"Выход из нативного потока без вызова DetachCurrentThread (может быть, он будет использовать деструктор pthread_key_create?)".

И если я вызовуЗавершая () в Hangup (), чтобы выйти из действия, приложение вылетает со следующей ошибкой:

«E / UncaughtException: java.lang.RuntimeException: Невозможно уничтожить действие. Этот объект был освобожден».

Это мой код зависания:

private void hangup() {
    if (peerConnectionFactory != null) {
        peerConnectionFactory.stopAecDump();
    }
    if(stream !=null) {
        while(stream.audioTracks.size() > 0) {
            AudioTrack audioTrack = stream.audioTracks.get(0);
            stream.removeTrack(audioTrack);
        }
        while(stream.videoTracks.size() > 0) {
            VideoTrack videoTrack = stream.videoTracks.get(0);
            stream.removeTrack(videoTrack);
        }
    }
    if (audioSource != null) {
        audioSource.dispose();
        audioSource = null;
    }
    if (videoCapturerAndroid != null) {
        try {
            videoCapturerAndroid.stopCapture();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        videoCapturerAndroid.dispose();
        videoCapturerAndroid = null;
    }
    if (videoSource != null) {
        videoSource.dispose();
        videoSource = null;
    }
    if(localPeer!=null) {
        localPeer.close();
        localPeer = null;
    }
    SignallingClient.getInstance().isInitiator=false;
    SignallingClient.getInstance().isChannelReady=false;
    SignallingClient.getInstance().isStarted=false;
}

1 Ответ

0 голосов
/ 03 марта 2019

Теперь работает с этим кодом:

private void hangup() {
    try {
        localPeer.close();
        localPeer = null;
        updateVideoViews(false);
        SignallingClient.getInstance().isInitiator=false;
        SignallingClient.getInstance().isChannelReady=false;
        SignallingClient.getInstance().isStarted=false;
        finish();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...