Re: [rtcweb] Forking & Early Media - Was Re: Minimal SDP negotiation mechanism

Christer Holmberg <> Fri, 23 September 2011 05:04 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id D401F21F8B42 for <>; Thu, 22 Sep 2011 22:04:25 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -6.529
X-Spam-Status: No, score=-6.529 tagged_above=-999 required=5 tests=[AWL=0.070, BAYES_00=-2.599, RCVD_IN_DNSWL_MED=-4]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 4MYuhXkW5LXQ for <>; Thu, 22 Sep 2011 22:04:25 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 109F921F8B2D for <>; Thu, 22 Sep 2011 22:04:24 -0700 (PDT)
X-AuditID: c1b4fb3d-b7c47ae000000b17-a6-4e7c13f069c6
Received: from (Unknown_Domain []) by (Symantec Mail Security) with SMTP id 20.7D.02839.0F31C7E4; Fri, 23 Sep 2011 07:06:56 +0200 (CEST)
Received: from ([]) by ([]) with mapi; Fri, 23 Sep 2011 07:06:56 +0200
From: Christer Holmberg <>
To: Hadriel Kaplan <>
Date: Fri, 23 Sep 2011 07:06:55 +0200
Thread-Topic: [rtcweb] Forking & Early Media - Was Re: Minimal SDP negotiation mechanism
Thread-Index: AQHMeXq2MKhYCusi80eyAB0xuXvE55VaZ/sg
Message-ID: <>
References: <> <> <> <> <> <> <> <> <> <> <>
In-Reply-To: <>
Accept-Language: en-US
Content-Language: en-US
acceptlanguage: en-US
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-Brightmail-Tracker: AAAAAA==
Cc: "" <>
Subject: Re: [rtcweb] Forking & Early Media - Was Re: Minimal SDP negotiation mechanism
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Fri, 23 Sep 2011 05:04:25 -0000


>>> The really hard part is knowing which stream to 
>>> use/render/send-to, imho.  And putting that decision in the 
>>> gateway isn't good - the best decider of that is probably the 
>>> JS in the browser.
>> I am not sure whether the JS app would be able to make 
>> better decisions than the gateway - and I've never seen a SIP 
>> client which would allow the user to choose which early media 
>> to listen to. 
> But these aren't phone-call SIP clients - they're browsers.  
> They can show the multiple video streams in separate windows, 
> for example.  They can show multiple chat sessions per fork 
> too.  Or they may just pick the most recent one and only 
> display it.  That's the nice thing about JS: the JS developer 
> decides what the user experience model is like, based on what 
> type of application/service they're providing; as opposed to 
> the IETF/W3C choosing for them.

Sure, but it would be good if network applications, that provide the early media, could make assumptions on how the end user is going to process it. It would make life easier both for the network application designer and the client application designer - AND the SBC designer, btw, if the SBC will have to make decisions on which media to forward towards the user :)

>> In my opinion the best thing would be if we could come up 
>> with some common BCP, e.g. saying that media associated with 
>> the early dialog on which the latest SDP answer was received 
>> is considered "active", and will be presented to the user etc. 
> That's not the whole problem though.  Suppose it only forked 
> to two agents: Robert and Bob.  Robert sent a 18x with SDP 
> first and then Bob.  So the rtcweb browser starts off using 
> Robert's, does ICE with Robert, etc., and then get's Bob's 
> and starts using Bob's because it's fresher.  Now Robert 
> accepts the connection and/or Bob rejects it; how does the 
> rtcweb browser revert to using Robert?  
> If the answer is "well the rtcweb browser had to keep state 
> information about Robert's SDP/media info as well as about 
> Bob's", then we're back to the tricky part about 
> PeerConnection having multiple media peers when it only 
> expected one; if we can solve that, then we've solved the 
> basic issue at hand. (I think... or I need more coffee)

The browser doesn't need to keep state - it only does what the JS app tells it to do. 

But, the JS app needs to keep state, so that it can then provide the SDP answer associated with Bob to the browser when the 200 OK comes.