WebRT C android: Как установитьRemoteDescription после сбора всех ледяных кандидатов - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь получить звук с сервера за пределами моей локальной сети. Мне нужно установить локальное описание, затем подождать, пока соберутся все кандидаты на лед, и установить удаленное описание. Есть функция onIceGatheringChange, которая возвращает 'COMPLETE' состояние, когда все ледяные кандидаты соберутся, но она завершается, когда соединение закрывается.

Конфигурация:

val rtcConfig = PeerConnection.RTCConfiguration(getIceServersList())
    // TCP candidates are only useful when connecting to a server that supports ICE-TCP.
    rtcConfig.enableDtlsSrtp = true
    rtcConfig.enableRtpDataChannel = true
    rtcConfig.tcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.DISABLED
    rtcConfig.bundlePolicy = PeerConnection.BundlePolicy.MAXCOMPAT
    rtcConfig.rtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIRE
    rtcConfig.iceTransportsType = PeerConnection.IceTransportsType.ALL
    rtcConfig.continualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLY

    // Use ECDSA encryption.
    rtcConfig.keyType = PeerConnection.KeyType.ECDSA

    localPeer = peerConnectionFactory?.createPeerConnection(
        rtcConfig, object : PeerConnectionObserverAdapter() {
            override fun onAddStream(mediaStream: MediaStream) {
                super.onAddStream(mediaStream)
                gotRemoteStream(mediaStream)
            }

            override fun onIceCandidate(iceCandidate: IceCandidate) {
                super.onIceCandidate(iceCandidate)
                localPeer?.addIceCandidate(iceCandidate)
            }

            override fun onIceGatheringChange(iceGatheringState: PeerConnection.IceGatheringState) {
                super.onIceGatheringChange(iceGatheringState)
                if (iceGatheringState == PeerConnection.IceGatheringState.COMPLETE) {
                    sendRemoteOffer()
                }
            }
        })
}

Есть много ответов о том, как ждать кандидатов в JS, а в android их различие в реализации. Буду рад, если вы мне объясните, что я сделал не так?

...