Re: [MMUSIC] [rtcweb] Translating Plan A into No Plan (Was: No Plan)

Emil Ivov <> Wed, 05 June 2013 10:48 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 2B82821F9A01 for <>; Wed, 5 Jun 2013 03:48:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.149
X-Spam-Status: No, score=-2.149 tagged_above=-999 required=5 tests=[AWL=-0.150, BAYES_00=-2.599, J_CHICKENPOX_26=0.6]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id UqssAhdDuG1m for <>; Wed, 5 Jun 2013 03:48:49 -0700 (PDT)
Received: from ( [IPv6:2a00:1450:400c:c05::232]) by (Postfix) with ESMTP id 3570E21F99ED for <>; Wed, 5 Jun 2013 03:48:48 -0700 (PDT)
Received: by with SMTP id hj6so1138006wib.11 for <>; Wed, 05 Jun 2013 03:48:48 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113; h=message-id:date:from:organization:user-agent:mime-version:to:cc :subject:references:in-reply-to:content-type :content-transfer-encoding:x-gm-message-state; bh=ZJ6+v/4FAEeus9zRhfxfZo3Bh174CJ/uFMN0oh+XyXU=; b=Nhhxv03MtPwJxjgqnDfkiSfjw0i3pwRwu5OeRdCKqrkV/j+qzA0G2ZSuYo7KKSQkjC OUqbdOvvCn+QEOnVAFe92vVJPLJtT8Nq396jWCx/qFJf4t/kkUR1t+brXcymY8fL5x9M jMW/831IxDM+jKOYKlIm3e/LXL3Y1SxNeO3mqJLdTYZ3EfxTzgw74y3lDjqLN4xCMci1 r+HTlUlv2pMoZiQHHvu3YV8bprlZjKEbX05eCif+qu07PCIILJejl+meR/rO86HZuk4o kiNoYF/cX6VxtlW2mFSF9eMCqstj77Wy6rMY73Hhs4ZhudI6FGuCo1Bwi3Uu23k2h4rN pxCg==
X-Received: by with SMTP id az2mr6069814wib.10.1370429327992; Wed, 05 Jun 2013 03:48:47 -0700 (PDT)
Received: from camionet.local ( []) by with ESMTPSA id cw8sm9470085wib.7.2013. for <multiple recipients> (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 05 Jun 2013 03:48:47 -0700 (PDT)
Message-ID: <>
Date: Wed, 05 Jun 2013 12:48:45 +0200
From: Emil Ivov <>
Organization: Jitsi
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130509 Thunderbird/17.0.6
MIME-Version: 1.0
To: Enrico Marocco <>
References: <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
In-Reply-To: <>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
X-Gm-Message-State: ALoCoQkISisE95jNE1RVp1fj5+R4TD3YfrqiRUZzTxNkdngNG2eB/ES5pxJZwkcEp+baKQw0cyOF
Cc: "Cullen Jennings \(fluffy\)" <>, MMUSIC IETF WG <>
Subject: Re: [MMUSIC] [rtcweb] Translating Plan A into No Plan (Was: No Plan)
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Multiparty Multimedia Session Control Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 05 Jun 2013 10:48:50 -0000

On 05.06.13, 11:11, Enrico Marocco wrote:
> On 6/4/13 3:13 PM, Eric Rescorla wrote:
>> I would like to see a *complete* example with all the data flowing back
>> and forth
>> and the API calls (even if they are mocked up) that you think the sides will
>> make.
> Not trying to steal Emil's job,

Steal away! The JS API part of this is something that we haven't even 
started designing yet so any feedback is welcome.

> here's a rough example of how I (from a
> web developer PoV) would like to be allowed to do it. Required API
> extensions are in 5. and 8. (i.e. the .ssrc MST attributes).
> Regular PC setup (this already well known):
> Stream add:

This is indeed along the lines of what I also had in mind. Stefan 
already made a comment on rtcweb about how obtaining SSRCs directly from 
a stream doesn't really fit right now as a stream may be attached to 
many, one or no peer connections. So I suppose the actual API would have 
to take this into account and get the SSRC from some object that 
represents a relation between a track and a specific peer connection. 
Some sort of a PeerTrackDescriptor ... or something like that.

Looking at the example itself I see it ends at bob asking Alice to stop 
sending a specific SSRC. I believe Eric's questions were also about that 
part, so here are a couple of more lines at the side of Alice:

onSigna(action, ssrc)
   if(action == 'stopTrack')


In the above localTracks is a locally maintained array/map of the tracks 
Alice is currently sending. Obviously you could also just loop a "for" 
over the tracks in your streams but since you didn't want to "grovel" ...

Of course there's work to be done on the APIs but on the whole, Eric, 
does this answer your question?


> Again, this is a *rough* example. The clear advantage (from my PoV of
> course) is that, once the peer connection is established, the app does
> not have to care about additional renegotiations, but in exceptional
> cases (i.e. the new stream needs a new PT): no need to handle O/As
> crossing on the wire, nor rollbacks.
> The clear drawback is that, as it is now, it looks awfully ugly: tracks
> are attached to the existing stream for transmission, but rendered on a
> new stream on the receiving side. This is because the focus was on
> minimizing the impact on the API. It could be probably improved with
> more substantial changes, e.g. for allowing the instantiation of the
> remote stream on the receiving side before the RTP packets actually
> start flowing. Kind of what plan B does, but without the additional,
> painful, O/A+O/A exchange.
> Enrico