RTCPeerConnection

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
iJim
Prode Principiante
Messaggi: 218
Iscrizione: giovedì 4 febbraio 2010, 15:20
Desktop: ubuntu
Distribuzione: Ubuntu

RTCPeerConnection

Messaggio da iJim »

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: Seleziona tutto


// 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 );
}

Avatar utente
iJim
Prode Principiante
Messaggi: 218
Iscrizione: giovedì 4 febbraio 2010, 15:20
Desktop: ubuntu
Distribuzione: Ubuntu

Re: RTCPeerConnection

Messaggio da iJim »

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!!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti