Re: [rtcweb] Interaction between MediaStream API and signaling

Stefan Hakansson LK <> Mon, 16 April 2012 07:01 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id A9C6221F8711 for <>; Mon, 16 Apr 2012 00:01:39 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -6.249
X-Spam-Status: No, score=-6.249 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HELO_EQ_SE=0.35, RCVD_IN_DNSWL_MED=-4]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id trfx+4q8TJEG for <>; Mon, 16 Apr 2012 00:01:39 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id C5D1821F8702 for <>; Mon, 16 Apr 2012 00:01:38 -0700 (PDT)
X-AuditID: c1b4fb25-b7b18ae000000dce-67-4f8bc3d1af05
Authentication-Results: x-tls.subject="/CN=esessmw0184"; auth=fail (cipher=AES128-SHA)
Received: from (Unknown_Domain []) (using TLS with cipher AES128-SHA (AES128-SHA/128 bits)) (Client CN "esessmw0184", Issuer "esessmw0184" (not verified)) by (Symantec Mail Security) with SMTP id 9C.FB.03534.1D3CB8F4; Mon, 16 Apr 2012 09:01:37 +0200 (CEST)
Received: from [] ( by ( with Microsoft SMTP Server id; Mon, 16 Apr 2012 09:01:36 +0200
Message-ID: <>
Date: Mon, 16 Apr 2012 09:01:36 +0200
From: Stefan Hakansson LK <>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1
MIME-Version: 1.0
To: "" <>
References: <> <> <> <> <> <> <>
In-Reply-To: <>
Content-Type: text/plain; charset="ISO-8859-1"; format=flowed
Content-Transfer-Encoding: 7bit
X-Brightmail-Tracker: AAAAAA==
Subject: Re: [rtcweb] Interaction between MediaStream API and signaling
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: Mon, 16 Apr 2012 07:01:39 -0000

On 04/14/2012 04:22 AM, Randell Jesup wrote:
> A reply I hadn't sent...
> On 4/2/2012 9:55 AM, Stefan Hakansson LK wrote:
>> On 04/02/2012 05:16 AM, Justin Uberti wrote:
>>>>> Yes. Just like in SIP. And so when you send an OFFER (or
>>> modified
>>> re-OFFER), you must be ready to receive data per that offer
>>> even if no
>>> ANSWER has been received - just like in SIP. And if its a
>>> re-offer, you
>>> need to accept the old, and accept the new (though you could
>>> probably
>>> use reception of obviously new-OFFER media to turn off
>>> decoding/rendering old-OFFER in preparation for the ANSWER).
>>> The flip side of this is the responder has to infer when the
>>> sender
>>> switches over to the result of the ANSWER from the media.
>>> For example:
>>> A B
>>> <--- H.261 --->
>>> re-OFFER(VP8) --->
>>> <-- ANSWER(VP8) (delayed in reception)
>>> <-----------VP8 (A should infer that B ANSWERed
>>> and accepted VP8)
>>> ---------->  H.261
>>> <-- ANSWER(VP8) (received)
>>> <--------VP8---------->  (B should infer by reception of
>>> VP8 that ANSWER
>>> was received)
>>> (Personally, I hate inferences, but without a 3 (or 4) way
>>> handshake,
>>> you have to). If you switches of codecs are staged, then
>>> this isn't
>>> (much) of a problem. Either leave old codec on the list, or
>>> leave it on
>>> the list until accept, and then re-OFFER to remove the
>>> un-used codec.
> [ Stefan responded: ]
>>> I think I understand what you mean, and this would work fine as
>>> long as
>>> you just switch codecs that are used in already set-up MediaStreams.
> Ah, but how do you know which stream the packets are for:
> in bundle, the packets are designated by SSRC, but without the ANSWER
> you can't figure it out, and on ANSWER the SSRCs could change.

If I read the spec right, the ANSWER can't change the SSRCs for streams 
going offerer -> answerer (but I agree to the first point you are making).

> Or if
> you change from non-bundle to bundle (admittedly, it's unclear when one
> would do so, but we're discussing a protocol, and that's not disallowed
> I assume).


> We have to consider, since we're designing a protocol, not only the
> preferred and likely negotiations, but all possible negotiations.
> Painful, but true.

Agree. IMO, there is a lot that is unclear, and need to be speced out. 
JSEP basically allows you to modify anything at any time, and to be able 
to build interoperable implementations we need to define what should happen.

>>> This may have been a very bad example. Probably you can tell them
>>> apart on the SSRC. But even so, the A browser won't know what the
>>> VP8 stream (if it has an unknown SSRC) represents without receiving
>>> the ANSWER.
>>> I think this is only an issue if you decide to add streams in the
>>> ANSWER. But even so, eventually the ANSWER arrives and you can start
>>> demuxing/decoding appropriately.
>> Yes, I agree to that it is only an issue if you add streams in the
>> answer. Perhaps it is a model we should move away from - but that is the
>> model used in the basic examples of the JSEP draft.
> Even if you don't add streams you could change the Bundle; or the SSRC's
> could change messing up demux until ANSWER, etc.
>> I think there is a risk of clipping if you start sending immediately,
>> but can only start demuxing/decoding once an answer is received.
> I would agree.