W3C home > Mailing lists > Public > public-webrtc@w3.org > May 2015

Re: Question: how should addTrack work in relation to createOffer et. al.?

From: Jan-Ivar Bruaroey <jib@mozilla.com>
Date: Wed, 13 May 2015 21:46:36 -0400
Message-ID: <5553FE7C.6000401@mozilla.com>
To: Martin Thomson <martin.thomson@gmail.com>, Harald Alvestrand <harald@alvestrand.no>
CC: "public-webrtc@w3.org" <public-webrtc@w3.org>
On 5/13/15 3:36 PM, Martin Thomson wrote:
> On 13 May 2015 at 11:38, Harald Alvestrand <harald@alvestrand.no> wrote:
>>> Think about the following:
>>>
>>> pc.setRemoteDescription(offer)
>>> pc.addTrack(X);
>>> pc.createAnswer().then(answer => { ... });
>>> pc.addTrack(Y);
>>>
>>> If code like this exists, then I think we need to have it fail
>>> (because the state of the PC at the time that createAnswer is called
>>> is not correct).  Then we get the sort of cleanliness that you are
>>> looking for.
>>>
>>> (We only get in this sticky situation because we carry state between
>>> operations implicitly.)
>> I'm not sure what you're saying here - to me it seems that
>> createAnswer() is clearly called between pc.addtrack(X) and
>> pc.addTrack(Y), but we don't have a description of when the .then task
>> of createAnswer() (and thus the ... part) is called.
>>
>> Care to clarify?
> This code is currently safe, and I know that people do exactly this.
> But it only works because createAnswer is enqueued behind
> setRemoteDescription: createAnswer doesn't actually get executed until
> setRemoteDescription completes.

Right.

 1. setRemoteDescription is called
 2. Track X is added
 3. createAnswer is chained (not called)
 4. Track Y is added
 5. setRemoteDescription completes
 6. createAnswer is called
 7. createAnswer completes


Which explains why Track Y gets included in this corner-case.

We can:

 1. Outlaw it
 2. Complicate chain (put createAnswer(X and whatelse) on it)
 3. Leave it
 4. Always chain (make non-corner cases take Track Y as well)


Tightening up the processing models of createOffer and createAnswer to 
not race with JS is a separate issue.

.: Jan-Ivar :.
Received on Thursday, 14 May 2015 01:47:06 UTC

This archive was generated by hypermail 2.3.1 : Monday, 23 October 2017 15:19:44 UTC