Re: New JSEP draft posted

On 02/10/2012 05:02 PM, Justin Uberti wrote:
> Updated sample below. Changes (move of startIce) are in *bold*.
>
> var signalingChannel = createSignalingChannel();
>     var pc = null;
>     var hasCandidates = false;
>
>     function start(isCaller) {
>       // create a PeerConnection and hook up the IceCallback
>       pc = new webkitPeerConnection(
> "", function (candidate, moreToFollow) {
>         if (!moreToFollow) {
>           hasCandidates = true;
>           maybeSignal(isCaller);
>         }
>       });
>
>       // get the local stream and show it in the local video element
>       navigator.webkitGetUserMedia(
>             {"audio": true, "video": true}, function (localStream) {
>         selfView.src = webkitURL.createObjectURL(localStream);
>         pc.addStream(localStream);
>         maybeSignal(isCaller);
>       }
>
>       // once remote stream arrives, show it in the remote video element
>       pc.onaddstream = function(evt) {
>         remoteView.src = webkitURL.createObjectURL(evt.stream);
>       };
>
> * // if we're the caller, create and install our offer,*
> *     // and start candidate generation*
> *     if (isCaller) {*
> *       offer = pc.createOffer(null);*
> *       pc.setLocalDescription(SDP_OFFER, offer);*
> *       pc.startIce();*
> *     }*
>     }

Note that this offer won't include the MediaStream since it's created 
before the addStream(localStream) is called. Wouldn't it be nice to have 
the browser create the offer automatically when needed? ;)

>     function maybeSignal(isCaller) {
>       // only signal once we have a local stream and local candidates
>       if (localStreams.size() == 0 || !hasCandidates) return;
>       if (isCaller) {
> *   offer = pc.localDescription;*
>         signalingChannel.send(
>             JSON.stringify({ "type": "offer", "sdp": offer }));
>       } else {
>         // if we're the callee, generate, apply, and send the answer
>         answer = pc.createAnswer(pc.remoteDescription, null);
>         pc.setLocalDescription(SDP_ANSWER, answer);
>         signalingChannel.send(
>             JSON.stringify({ "type": "answer", "sdp": answer }));
>       }
>     }
>
>     signalingChannel.onmessage = function(evt) {
>       var msg = JSON.parse(evt.data);
>       if (msg.type == "offer") {
>         // create the PeerConnection
>         start(false);
>         // feed the received offer into the PeerConnection and
>         // start candidate generation
>         pc.setRemoteDescription(PeerConnection.SDP_OFFER, msg.sdp);
>         pc.startIce();
>       } else if (msg.type == "answer") {
>         // feed the answer into the PeerConnection to complete setup
>         pc.setRemoteDescription(PeerConnection.SDP_ANSWER, msg.sdp);
>       }

/Adam

Received on Monday, 13 February 2012 14:07:52 UTC