Re: [rtcweb] Data channel setup and signalling
Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com> Thu, 17 November 2011 13:47 UTC
Return-Path: <stefan.lk.hakansson@ericsson.com>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0030021F9A95 for <rtcweb@ietfa.amsl.com>; Thu, 17 Nov 2011 05:47:15 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.163
X-Spam-Level:
X-Spam-Status: No, score=-6.163 tagged_above=-999 required=5 tests=[AWL=0.136, BAYES_00=-2.599, MIME_8BIT_HEADER=0.3, RCVD_IN_DNSWL_MED=-4]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aDASbzfSouie for <rtcweb@ietfa.amsl.com>; Thu, 17 Nov 2011 05:47:15 -0800 (PST)
Received: from mailgw9.se.ericsson.net (mailgw9.se.ericsson.net [193.180.251.57]) by ietfa.amsl.com (Postfix) with ESMTP id 11EC621F9A3A for <rtcweb@ietf.org>; Thu, 17 Nov 2011 05:47:14 -0800 (PST)
X-AuditID: c1b4fb39-b7b3eae00000252a-48-4ec51061ccc6
Received: from esessmw0191.eemea.ericsson.se (Unknown_Domain [153.88.253.125]) by mailgw9.se.ericsson.net (Symantec Mail Security) with SMTP id FD.96.09514.26015CE4; Thu, 17 Nov 2011 14:47:14 +0100 (CET)
Received: from [150.132.141.116] (153.88.115.8) by esessmw0191.eemea.ericsson.se (153.88.115.85) with Microsoft SMTP Server id 8.3.137.0; Thu, 17 Nov 2011 14:47:13 +0100
Message-ID: <4EC5105F.2050506@ericsson.com>
Date: Thu, 17 Nov 2011 14:47:11 +0100
From: Stefan Håkansson LK <stefan.lk.hakansson@ericsson.com>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15
MIME-Version: 1.0
To: rtcweb@ietf.org
References: <4EC209EB.3080402@jesup.org>
In-Reply-To: <4EC209EB.3080402@jesup.org>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Brightmail-Tracker: AAAAAA==
Subject: Re: [rtcweb] Data channel setup and signalling
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <rtcweb.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/rtcweb>
List-Post: <mailto:rtcweb@ietf.org>
List-Help: <mailto:rtcweb-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 17 Nov 2011 13:47:16 -0000
On 11/15/2011 07:42 AM, Randell Jesup wrote: > The signalling discussion and how it touched on data channels got me > thinking. > > One open issue is how we define data channels, both in the "internal" > case (no interop) and the federated case (which may have the same JS app > or different ones at either end). > > One solution is that all data channels are defined as m= lines. They > could be generic "m=data", or they could specify the data to be passed > in the m= line. For "public" message structures that might be used by > different applications (an IM protocol, for example), one would specify > that in some manner in the media description (perhaps via a MIME type). > This also implies that any addition or removal (or change to) a data > channel requires a full replacement OFFER and ANSWER. If we stick with > the SDP requirement about never removing m= lines, then the OFFER size > may become unbounded. > > The other option is to have (some) data channels be separate from media, > in particular app-specific anonymous data channels. There's no > requirement for describing the channels if they're private to the app, > at least to the first approximation. An app could pre-define data > channel 3 as a private message structure for game map updates, so long > as it knows its talking to itself. I like this. Is there really a need to signal individual data channels at all (except for setting up data - one m-line saying "data")? When data is available the allocation of channels can be handled by the app itself with no associated signaling. Either the app knows that channel 3 is always used for this and channel 5 for that; or the app signals using one predefined channel the contents of the other channels. For the federated case, there could be a document describing what to use the channels for (if needed). > > This has advantages in setup time, especially if the data channels are > dynamic and invoked via another data channel, since there doesn't have > to be a full offer-answer including the media channels. You just need > to make sure the two sides agree on the data to be exchanged and that > they listen before receiving data. It has a minor advantage in reducing > the amount of information leakage to the server about the creation and > types of streams (and potentially significant metadata about them). > > > A use-case would be a background http proxy-server during chat. If you > have to re-OFFER for each data channel that comes and goes to transfer a > resource, it will both swamp the server and be slow (due to the triangle > signalling). If instead the application can open a single control data > channel, and invoke transfers over it, the application can efficiently > transfer a high number of URIs. Are there other ways to do this without > re-OFFERing constantly? yes. But they generally involve building > protocols on top of an array of long-lasting generic connections. > > For example, the control data channel might pass messages (directly > browser-to-browser) like > { > id: 1, > command: "GET", > URI: "blah/foo/bar", > channel: 5, > } > with an answer: > { > id: 1, > result: "ok", > size: 1234, > } > followed by transfer of the URI on data channel 5. (Note: in this I'm > assuming an API that lets the app open a specific data channel of the > peer connection.) > > Now, this is contrived, though plausible. You could pre-open a bunch of > idle data connections and then re-use them as needed. The > counter-argument is that one could write a connection-server library > that abstracts a bunch of pre-opened data channels into an API for the > app that works like I described above, though it may require more > housekeeping and larger fixed resource usage. > > > So..... > > Is it worthwhile to consider interfaces/APIs whereby an application > could directly open data channels with no re-OFFER and implement a > control protocol similar to the one I described? Are there other > use-cases for high-volume data channel create/removal, or where data > channel latency creation is critical? (my usecase is a little contrived > since I'm falling asleep a the keyboard.) >
- [rtcweb] Data channel setup and signalling Randell Jesup
- Re: [rtcweb] Data channel setup and signalling Saúl Ibarra Corretgé
- Re: [rtcweb] Data channel setup and signalling Harald Alvestrand
- Re: [rtcweb] Data channel setup and signalling Justin Uberti
- Re: [rtcweb] Data channel setup and signalling Randell Jesup
- Re: [rtcweb] Data channel setup and signalling Wolfgang Beck
- Re: [rtcweb] Data channel setup and signalling Hadriel Kaplan
- Re: [rtcweb] Data channel setup and signalling Wolfgang Beck
- Re: [rtcweb] Data channel setup and signalling Stefan Håkansson LK