Android 在使用后退按钮退出应用后,webrtc 仍然 运行

Android webrtc still running after app exited with back button

我是 Webrtc 的新手,我正在使用带有 Android 导航组件的 AWS Webrtc 演示。当我使用后退按钮退出应用程序时,我可以看到 Webrtc 仍然是 运行 或者我可以看到以下日志:

EglRenderer: cameraSurfaceViewDropping frame - No surface

在我的 onStop 方法片段中,我的代码如下:

        Thread.setDefaultUncaughtExceptionHandler(null)

        if (rootEglBase != null) {
            rootEglBase!!.release()
            rootEglBase = null
        }

        if (remoteView != null) {
            remoteView!!.release()
            remoteView = null
        }

        if (localPeer != null) {
            localPeer!!.dispose()
            localPeer = null
        }

        if (videoSource != null) {
            videoSource!!.dispose()
            videoSource = null
        }

        if (videoCapturer != null) {
            try {
                videoCapturer?.stopCapture()
                videoCapturer?.dispose()
            } catch (e: InterruptedException) {
                Timber.e("Failed to stop webrtc video capture. $e ")
            }
            videoCapturer = null
        }

        if (client != null) {
            this.client!!.disconnect()
            this.client = null
        }
        peerConnectionFoundMap.clear()
        pendingIceCandidatesMap.clear()

但是,只有当我通过后退按钮退出应用程序时,我才能看到问题,如果我终止了应用程序,我不会得到日志。有人经历过吗?

谢谢。

这是您在 onDestroy()onStop() 上销毁 WebRTC 会话的方式。

    if (videoCaptureAndroid != null) {
        videoCaptureAndroid?.stopCapture()
        videoCaptureAndroid = null
    }
    if (localPeer != null) {
        localPeer?.close()
        localPeer = null
    }
    if (videoSource != null) {
        videoSource?.dispose()
        videoSource = null
    }
    if (audioSource != null) {
        audioSource?.dispose()
        audioSource = null
    }
    if (localAudioTrack != null) {
        localAudioTrack?.dispose()
        localAudioTrack = null
    }
    if (currentRemoteMediaStream != null) {
        currentRemoteMediaStream?.dispose()
        currentRemoteMediaStream = null
    }
    if (localVideoView != null) {
        localVideoView?.release()
        localVideoView = null
    }
    if (remoteVideoView != null) {
        remoteVideoView?.release()
        remoteVideoView = null
    }
    rootEglBase.release();