[rtcweb] codec and connection negotiation
Matthew Kaufman <matthew.kaufman@skype.net> Fri, 05 August 2011 18:33 UTC
Return-Path: <matthew.kaufman@skype.net>
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 B4A1411E807F for <rtcweb@ietfa.amsl.com>; Fri, 5 Aug 2011 11:33:18 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level:
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[AWL=0.000, BAYES_00=-2.599]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7WrTaLGWpkMF for <rtcweb@ietfa.amsl.com>; Fri, 5 Aug 2011 11:33:17 -0700 (PDT)
Received: from mx.skype.net (mx.skype.net [78.141.177.88]) by ietfa.amsl.com (Postfix) with ESMTP id 8FE2C21F8AFD for <rtcweb@ietf.org>; Fri, 5 Aug 2011 11:33:17 -0700 (PDT)
Received: from mx.skype.net (localhost [127.0.0.1]) by mx.skype.net (Postfix) with ESMTP id B63B2170B for <rtcweb@ietf.org>; Fri, 5 Aug 2011 20:33:34 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=skype.net; h=message-id :date:from:mime-version:to:subject:content-type: content-transfer-encoding; s=mx; bh=FiwnBwCemqIhStjaWJ0Lgv8qGqA= ; b=AndFaCzL3sYHisvpteXhoJl2bfYu5kug7DseVNothdXRzf1kWSyeFG4mMj1B 6lKqU6yIJOZOn4ZeXpPH34bFIzBh16oDPBRBchrANleh36WXALUm+oTAGZ7JTVzG ME0uHQ9nOe2YJvMJA4HgWnVRBrQGWFOJuN+T+kLmAwA8AHQ=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=skype.net; h=message-id:date:from :mime-version:to:subject:content-type:content-transfer-encoding; q=dns; s=mx; b=gaBNO6IUG08/qHXPvc9xRm9HTCQlXRA8TxqoEnRhhpULXRLn +boj85yNDun4AoHB+Elih11S8eSb+MsCA8MwAw0+7SpXNtT6eANNs4qbf+zRWCgQ vLp9qeFUs7KFp/7QG/mKkmsaGdA4sihPUTaE1RMvcAsw/IUOvH7J/soQSXM=
Received: from zimbra.skype.net (zimbra.skype.net [78.141.177.82]) by mx.skype.net (Postfix) with ESMTP id B06DACF for <rtcweb@ietf.org>; Fri, 5 Aug 2011 20:33:34 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1]) by zimbra.skype.net (Postfix) with ESMTP id 91E433507815 for <rtcweb@ietf.org>; Fri, 5 Aug 2011 20:33:34 +0200 (CEST)
X-Virus-Scanned: amavisd-new at lu2-zimbra.skype.net
Received: from zimbra.skype.net ([127.0.0.1]) by localhost (zimbra.skype.net [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GyH0Gdke7XjD for <rtcweb@ietf.org>; Fri, 5 Aug 2011 20:33:33 +0200 (CEST)
Received: from [10.10.155.2] (unknown [198.202.199.254]) by zimbra.skype.net (Postfix) with ESMTPSA id 5BEF43506DDE for <rtcweb@ietf.org>; Fri, 5 Aug 2011 20:33:33 +0200 (CEST)
Message-ID: <4E3C377A.5090105@skype.net>
Date: Fri, 05 Aug 2011 11:33:30 -0700
From: Matthew Kaufman <matthew.kaufman@skype.net>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.18) Gecko/20110616 Thunderbird/3.1.11
MIME-Version: 1.0
To: "rtcweb@ietf.org" <rtcweb@ietf.org>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
Subject: [rtcweb] codec and connection negotiation
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: Fri, 05 Aug 2011 18:33:18 -0000
I put this together to try to help myself, and perhaps others, understand the various ways in which codec and connection negotiation might be decomposed and then put together for RTCWEB applications. It is a bit of a stream of consciousness, but hopefully we can get some good discussion provoked. A. How to encode codec capabilities or choices A1 - Don't provide a canonical way of encoding codec settings. The choice of which codec and what parameters is encoded in an ad-hoc way that requires no standardization. A2 - Encode codec settings using SDP. The choice of which codec and what parameters is encoded using the syntax and semantics of SDP and reuses the SDP standardization work. A3 - Encode codec settings using a JSON encoding of SDP. The choice of which codec and what parameters is using the semantics of SDP but a JSON syntax. Reuses the SDP standardization plus new standards around how to encode SDP in JSON. B. How to expose codec capabilities and controls B1. Expose codec capabilities and settings via individual Javascript APIs. For example one might say "camera.encodeMode = "H.264"; camera.encodeWidth = 640;" or "if (camera.canEncode("H.264")) ..." B2. Expose codec capabilities and settings via a combined Javascript API that concatenates all the capabilities and settings into a single object. Calling "camera.encodeCapabilities()" would return a large object that is a full enumeration of what it can do. B3. Expose codec capabilities and settings via a combined Javascript API that produces and consumes SDP strings. B4. Don't expose codec capbilities and settings via Javascript, rather handle this outside of Javascript. C. How to agree on which codec and settings to use C1. The server receives information about the capabilities, decides what settings should be used, and communicates them to the endpoints C2. The endpoints agree using offer-answer, using the server as a communication channel C3. The endpoints agree using offer-answer, directly between the two endpoints (There's obviously a few additional nuances, like whether to use something like RFC 5939 SDP capability negotiation, that aren't well-captured above.) Now, with the above, we find that some of the models that have been discussed are combinations of the above choices. X1 - Use A2, B3, C2 - The endpoints generate SDP for offer-answer by firing an SDP event, having it sent via a server to the far end, where it is injected as SDP into the Javascript. X2 - Use A1, B1, C1 - The endpoints run Javascript that inspects their capabilities, sends that to the server which decides what is best, and sends back information that the Javascript uses to set up the encoders. X3 - Use A2, B4, C3 - The endpoints establish a communication channel using ICE and an out-of-band channel, they then use SDP inside of SIP to directly negotiate using offer-answer, the server has no information about what was chosen and does not participate. We also find that almost all the models can map, though with varying degrees of pain, to others. For instance: Y1 - Use A2, B1, C2 - The endpoints run Javascript that inspects their capabilities and encodes it into an SDP string. This is sent via the server to the far end, where the SDP is parsed in Javascript and the individual APIs called to implement SDP offer-answer. Y2 - Use A1, B3, C1 - The endpoints generate SDP for offer-answer by firing an SDP event. The endpoint then runs Javascript that extracts from the SDP all the individual parameters and re-encodes them using an ad-hoc scheme. The server determines what each end should do and sends ad-hoc messages to the endpoints which then generate the SDP answer that causes the desired outcome. It should be noted that extracting a full set of capabilities when only offer-answer is available via the API is particularly painful, as it might be necessary to explore a very wide space of fake offers to get answers that clarify things like "can do G.722 audio but only if not doing H.264 video". We might be able to learn from some previous experiences: 1. Web-based email. Web browsers run Javascript that uses ad-hoc signaling to/from the web site in order to send and receive email. The browser does not have SMTP, POP, or IMAP implementations, or even know how to parse RFC822 headers on its own. This argues for A1, B1 (or maybe B2), C1. 2. Web-based image display. Web browsers send an "Accept" header via HTTP indicating which MIME types they can handle. Knowing whether a browser can do JPEG is as simple as looking for "image/jpeg" in the header. This is probably at the wrong layer for sophisticated web applications (as this isn't about what comes back over HTTP, but what can be supported over a separate channel), but might be appropriate if we could agree on a small number of supported codecs and simply have the browser tell the server in a similar manner whether or not it can do RTCWEB. 3. SIP. SIP endpoints use SDP directly between the endpoints (though possibly with intermediaries that rarely change the SDP) to do offer-answer. This is most like A2, B3 (or B4), C3 (or C2). 4. MGCP. MGCP uses SDP for both capabilities and settings, but the server is in control. This is most like A2, B3, C1. 5. H.323 (H.245) uses a protocol other than SDP for both capabilities and settings, but the server is in control. This is like A3 (or some other encoding), B2, C1 As for connection negotiation, most of the separation previously also applies... again whether to put the ICE candidates into SDP or not, whether to have APIs that take blobs or individual calls, etc. But the other issue that arises when we start talking about connection negotiation is that if you choose SDP offer-answer for codec negotiation, and SDP for ICE candidates, there is the temptation to combine the SDP for the two, thus conflating the process of establishing a logical channel over which various types of media might flow, and establishing just which media should be sent over that channel. Matthew Kaufman
- [rtcweb] codec and connection negotiation Matthew Kaufman
- Re: [rtcweb] codec and connection negotiation Matthew Kaufman
- Re: [rtcweb] codec and connection negotiation Parthasarathi R (partr)
- Re: [rtcweb] codec and connection negotiation Bernard Aboba
- Re: [rtcweb] codec and connection negotiation Sohel Khan
- Re: [rtcweb] codec and connection negotiation Henry Sinnreich
- Re: [rtcweb] codec and connection negotiation Sohel Khan
- Re: [rtcweb] codec and connection negotiation Harald Alvestrand
- Re: [rtcweb] codec and connection negotiation Colin Perkins
- Re: [rtcweb] codec and connection negotiation Parthasarathi R (partr)
- Re: [rtcweb] codec and connection negotiation Harald Alvestrand
- Re: [rtcweb] codec and connection negotiation Paul Kyzivat
- Re: [rtcweb] codec and connection negotiation Paul Kyzivat
- Re: [rtcweb] codec and connection negotiation Bernard Aboba
- Re: [rtcweb] codec and connection negotiation Henry Sinnreich
- Re: [rtcweb] codec and connection negotiation Harald Alvestrand
- Re: [rtcweb] codec and connection negotiation Markus.Isomaki
- Re: [rtcweb] codec and connection negotiation Paul Kyzivat
- Re: [rtcweb] codec and connection negotiation Randell Jesup