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); > } /AdamReceived on Monday, 13 February 2012 14:07:52 UTC
This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 15:19:27 UTC