- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Thu, 30 Apr 2015 12:48:38 -0400
- To: Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com>, "public-webrtc@w3.org" <public-webrtc@w3.org>
On 4/30/15 2:42 AM, Stefan Håkansson LK wrote: > On 24/04/15 17:38, Jan-Ivar Bruaroey wrote: >> Since JavaScript is a run-to-completion language, another (common?) >> approach would be to queue a (micro) task to execute the asynchronous >> operation, as I've just proposed today here in another thread. >> >> Not only would this unify behavior between when something is on the >> queue vs. when nothing is on the queue, but it would make the following >> deterministic: >> >> var senderX = pc.addTrack(trackX); >> pc.createOffer(); >> var senderY = pc.addTrack(trackY); >> // Both trackX and trackY will always be in the offer. > How does that work? See my answer to Justin's post in this thread (tl;dr because createOffer() is queued to run later). > And what determines if trackY is represented in the > offer or not (in the example it is added right after createOffer is > called, but there can be many scenarios here, like a bit later or in > another context)? As I show in my other post, we need to be careful to not conflate when queued functions are called with when they execute: function received(offer) { log(pc.signalingState); // stable pc.setRemoteDescription(offer); log(pc.signalingState); // stable pc.createAnswer().then(answer => { log(pc.signalingState); // have-remote-offer pc.setLocalDescription(answer); log(pc.signalingState); // have-remote-offer pc.addTrack(trackX); // added in have-remote-offer pc.createOffer(); // queued until stable state! pc.addTrack(trackY); // added in have-remote-offer }); } (Note that I haven't answered your question. Will post more a bit later) .: Jan-Ivar :.
Received on Thursday, 30 April 2015 16:49:08 UTC