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

时间:2021-06-06 21:00:57

标签: android kotlin webrtc

我是 Webrtc 的新手,我正在使用带有 Android Nav 组件的 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()

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

谢谢。

1 个答案:

答案 0 :(得分:0)

这是您在 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();