Visualizzazione dei risultati da 1 a 4 su 4

Discussione: RTCPeerConnection

  1. #1

    RTCPeerConnection

    Salve a tutti sto facendo un paio di esperimenti per implementare un sistema P2P.
    Sto cercando di capire meglio come funziona il RTCPeerConnection, ma non riesco a farlo funzionare!!!


    Spero che il codice risulti leggibbile!!!!


    codice:
    
    // settaggi
    var signalingChannel;
    var myCandidate;
    
    
    var servers = {
        iceServers: [
            {url: "stun:stun.l.google.com:19302"}
        ]};
    
    
    var option = {
        optional: [{
            RtpDataChannels: true
        }]
    };
    
    
    var RTCPeerConnection   = window.mozRTCPeerConnection       || window.webkitRTCPeerConnection;
    var IceCandidate        = window.mozRTCIceCandidate         || window.RTCIceCandidate;
    var SessionDescription  = window.mozRTCSessionDescription   || window.RTCSessionDescription;
    
    
    var peer;
    var myCandidate;
    
    
    function init(){
        signalingChannel = new SignalingChannel();
        peer = new RTCPeerConnection(servers, option);
    
    
        peer.onicecandidate = function( evt ){
            if( evt.candidate ){
                 console.log(evt.candidate);
                signalingChannel.send({
                    candidate : JSON.stringify(evt.candidate)
                });
            }
        }
    
    
        peer.createOffer(function(offer) {
                peer.setLocalDescription(offer, function(evt){
                    console.log(evt);
                },
                function(err){
                    console.log('err');
                    console.log(err);
                });
            },
            function(err) {
                console.log('errore');
                console.log(err);
            }
        );
    
    
        signalingChannel.onmessage = function( evt ){
            var message = evt.data;
            if( message.sdp ){
                peer.setRemoteDescription( new SessionDescription( message.sdp ), function(){
                    if( peer.remoteDescription.type == 'offer' ) peer.createAnswer( localDescrCreated, logError );
                }, logError);
            }
            else peer.addIceCandidate(new IceCandidate( message.candidate ));
        }
    
    
    	peer.oniceconnectionstatechange = function() {
    		console.log(peer.iceConnectionState);
    	};
    	
    	peer.onopen = function(evt){
    		console.log(evt);
    	}
    
    
    };
    
    
    
    
    function localDescrCreated( desc ){
        peer.setLocalDescription( desc, function(){
            // risposta
            signalingChannel.send({
                sdp : JSON.stringify(peer.localDescription)
            });
        }, logError)
    }
    
    
    function logError( err ){
        console.log( err );
    }

  2. #2
    Ovviamente per il signaling uso una chiamata Ajax ad un server Apache per memorizzare su un database il mio SDP e il mio ICECandidate, e per ricevere notifiche e news, uso il Server-Sent Event.
    Uso anche altri server STUN
    Il problema è che non viene mai chiamata la funzione onicecandidate e quindi non posso memorizzare il candidate e non posso notificarlo all'altro peer!!

  3. #3
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,514
    hai chiamato init?
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  4. #4
    Si, anzi in realtà ho risolto in parte il problema!
    Adesso mi ritrovo con più ICECandidate, mi spiego meglio: la mia idea è quella di inviare ( tramite Ajax ) i dati relativi agli ICECandidate e a SDP per "segnalare" la mia presenza, e ricevere ( tramite Server-Sent Event ) le notifiche di altri host ( i dati relativi a ICECandidate e SDP ), in questo modo una volta che ricevo la notifica chiamo
    codice:
    signalingChannel.onmessage
    gli passo i dati e gli host possono essere messi in comunicazione P2P.

    Il problema è che per ogni host vengono generati più ICECandidate, quindi quale devo notificare????
    codice:
    peer = new RTCPeerconnection(...);
    peer.onicecandidate = function(evt){
        console.log(evt.candidate); 
        // into the console
        // RTCIceCandidate {candidate: "candidate:... 1 udp ", sdpMLineIndex:0, sdpMid:"data"}
        // RTCIceCandidate {candidate: "candidate:... 2 udp ", sdpMLineIndex:0, sdpMid:"data"} 
    }

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.