webrtc / samples

WebRTC Web demos and samples
https://webrtc.github.io/samples
BSD 3-Clause "New" or "Revised" License
13.77k stars 5.69k forks source link

can not gather reflex candidate and relay candidate in chrome #1552

Closed remainfox closed 2 years ago

remainfox commented 2 years ago

chrome version: 99.0.4844.84 stun server: stun:stun.l.google.com:19302 websocket server: send right offer sdp problem: i can not gather reflex candidate and relay candidate, but stun server is test ok

code as follow:

<head>

    <video id="video_id" width="480" height="320"  autoplay></video>
    <br>
    <button id="start_btn">start</button>
    </br>
    <script src="adapter.js"></script>
    <script>

        'use strict';

        var rtcPeerConns = null;
        var conn = null;
        var remoteStream = null;
        var desc = null;
        var video_id = document.getElementById('video_id');
        var start_btn_id = document.getElementById('start_btn');

        start_btn_id.addEventListener('click', start);

        async function start()
        {
            if (window["WebSocket"]) 
            {
                var addr = "ws://" + "wslhost" + ":5050";
                conn = new WebSocket(addr);
                conn.onopen = function(evt) 
                {
                    console.log('1111 websocket open')
                }

                conn.onclose = function(evt) 
                {
                    console.log('websocket close')
                }

                conn.onmessage = function(evt) 
                {               
                    gotoffer(evt.data)
                }
            }

            const servers = {'iceServers': [{'urls':'stun:stun.l.google.com:19302'}]};  
            // const offerOptions = {offerToReceiveAudio: 1,offerToReceiveVideo: 1};
            rtcPeerConns = new RTCPeerConnection(servers);
            console.log('Created remote peer connection object rtcPeerConns');
            rtcPeerConns.onicecandidate = e => onIceCandidate(rtcPeerConns, e);
            rtcPeerConns.ontrack =  gotRemoteStream;
            rtcPeerConns.onicegatheringstatechange = gatheringStateChange;
        }

        async function gotoffer(offer)
        {
            var desc = new RTCSessionDescription();
            desc.sdp = offer;
            desc.type = 'offer';
            rtcPeerConns.setRemoteDescription(desc)

            await rtcPeerConns.createAnswer().then(
                getLocalSdpSuccess,
                getLocalSdpFailed
            );
        }

        async function onIceCandidate(pc, event) {
            try {
                onAddIceCandidateSuccess(pc);
            } catch (e) {
                onAddIceCandidateError(pc, e);
            }
            console.log(`ICE candidate:\n${event.candidate ? event.candidate.candidate : '(null)'}`);
        }

        function onAddIceCandidateSuccess(pc)
        {
        }

        function onAddIceCandidateError(pc, err)
        { 
        }

        function gotRemoteStream(event) {
            console.log('222 Received remote stream');
            if (video_id.srcObject !== event.streams[0]) {
                video_id.srcObject = event.streams[0];
                remoteStream = event.streams[0];
                console.log('222 rtcPeerConns received remote stream');
            }
        }

        function gatheringStateChange() {
            console.log(rtcPeerConns.iceGatheringState);
            if (rtcPeerConns.iceGatheringState === 'complete') {
                console.log('333 ICE Complete');
            }
        }

        function getLocalSdpSuccess(desc){
            rtcPeerConns.setLocalDescription(desc);
            console.log('444 get local sdp: \n' + desc.sdp);
        }

        function getLocalSdpFailed(sdp){

        }

        function onAddIceCandidateError(pc, error) {
            console.log(`failed to add ICE Candidate: ${error.toString()}`);
        }

    </script>
</head>

offer sdp from websocket server:

v=0
o=- 1495799811084970 1495799811084970 IN IP4 172.30.131.63
s=Streaming Test
t=0 0
a=group:BUNDLE video
a=msid-semantic: WMS janus
m=video 1 RTP/SAVPF 96
c=IN IP4 172.30.131.63
a=mid:video
a=sendonly
a=rtcp-mux
a=ice-ufrag:UkRM
a=ice-pwd:F2gO3W5mhbG0JF/j9itdoZ
a=ice-options:trickle
a=fingerprint:sha-256 A9:07:34:CA:F8:6F:12:21:98:12:C9:D1:90:49:90:93:54:E6:6F:08:01:73:2C:81:F8:43:4B:75:BC:89:8D:3C
a=setup:actpass
a=connection:new
a=rtpmap:96 H264/90000
a=ssrc:12345678 cname:janusvideo
a=ssrc:12345678 msid:janus janusv0
a=ssrc:12345678 mslabel:janus
a=ssrc:12345678 label:janusv0
a=candidate:1 1 udp 2015363327 172.30.131.63 51582 typ host
a=candidate:2 1 udp 1679819007 116.30.142.158 17040 typ host raddr 172.30.131.63 rport 51582
a=candidate:3 1 udp 505413887 8.129.221.3 62911 typ host raddr 172.30.131.63 rport 51582

web local sdp

444 get local sdp: 
v=0
o=- 4923735182377979798 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE video
a=msid-semantic: WMS
m=video 9 RTP/SAVPF 96
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:zBeL
a=ice-pwd:nbmBVvpH0cRuw918NPiAMGMT
a=ice-options:trickle
a=fingerprint:sha-256 41:C5:21:B7:B6:A3:86:F8:E6:39:44:A6:85:81:3A:F8:59:8C:7E:56:C2:1A:CE:05:90:43:20:B7:2C:77:34:6D
a=setup:active
a=mid:video
a=recvonly
a=rtcp-mux
a=rtpmap:96 H264/90000
a=fmtp:96 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f

gather_local_sdp_websocket.html:125 gathering
gather_local_sdp_websocket.html:104 ICE candidate:
candidate:1840965416 1 udp 2113937151 192.168.0.103 64288 typ host generation 0 ufrag zBeL network-cost 999
gather_local_sdp_websocket.html:125 complete
gather_local_sdp_websocket.html:127 333 ICE Complete
gather_local_sdp_websocket.html:104 ICE candidate:
(null)
fippo commented 2 years ago

Please use the discuss-webrtc list (or possibly the janus group) for asking general questions as was suggested in the deleted issue template.