Re: [rtcweb] Additional requirement - audio-only communication

Justin Uberti <> Fri, 26 August 2011 14:10 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 6D46C21F85EC for <>; Fri, 26 Aug 2011 07:10:45 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -105.315
X-Spam-Status: No, score=-105.315 tagged_above=-999 required=5 tests=[AWL=0.095, BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, GB_I_INVITATION=-2, HTML_MESSAGE=0.001, J_CHICKENPOX_15=0.6, MIME_8BIT_HEADER=0.3, RCVD_IN_DNSWL_MED=-4, SARE_HTML_USL_OBFU=1.666, USER_IN_WHITELIST=-100]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id eZTNCEjm9IIA for <>; Fri, 26 Aug 2011 07:10:44 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 252E721F8451 for <>; Fri, 26 Aug 2011 07:10:44 -0700 (PDT)
Received: from ( []) by with ESMTP id p7QEBqeU030405 for <>; Fri, 26 Aug 2011 07:11:52 -0700
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed;; s=beta; t=1314367912; bh=L5pA4Te+SgeZfNuyHCr8bOgzoAo=; h=MIME-Version:In-Reply-To:References:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=RnHB16ajr6QPXD7VIUBA2UknhgboR51ghpvpLWV83AwPW+ELrqLmOb5RUGl6ltr2+ FANzsUmzrYY/Kc9L5kiXw==
DomainKey-Signature: a=rsa-sha1; s=beta;; c=nofws; q=dns; h=dkim-signature:mime-version:in-reply-to:references:from:date: message-id:subject:to:cc:content-type:x-system-of-record; b=KL/kTAjD2Lrpfevqy2t8NEfCxBYwAJQO0Hmq4lCYoJSLcBXG0NRbe4sTEyYFlQ17B ToayAQQ31Q/lIAINYy9NQ==
Received: from qyk36 ( []) by with ESMTP id p7QEBpH2008903 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <>; Fri, 26 Aug 2011 07:11:51 -0700
Received: by qyk36 with SMTP id 36so452122qyk.9 for <>; Fri, 26 Aug 2011 07:11:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=beta; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=imyNXpm6wMika1q66IT/lqaappSzO8BHpcRUuAFDb64=; b=mW7K62KpeLtvqgOVqohtDjceM/NuJkEPG9ImqCVSKWQ6TEFWazP8zJDEfHCmmSiK0O 2Ah/Ud5EboVCxfENWltQ==
Received: by with SMTP id ls5mr1137116icb.149.1314367911329; Fri, 26 Aug 2011 07:11:51 -0700 (PDT)
Received: by with SMTP id ls5mr1137108icb.149.1314367911089; Fri, 26 Aug 2011 07:11:51 -0700 (PDT)
MIME-Version: 1.0
Received: by with HTTP; Fri, 26 Aug 2011 07:11:31 -0700 (PDT)
In-Reply-To: <>
References: <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <>
From: Justin Uberti <>
Date: Fri, 26 Aug 2011 10:11:31 -0400
Message-ID: <>
To: =?UTF-8?Q?Stefan_H=C3=A5kansson_LK?= <>
Content-Type: multipart/alternative; boundary=90e6ba5bc13771d78f04ab692081
X-System-Of-Record: true
Subject: Re: [rtcweb] Additional requirement - audio-only communication
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, 26 Aug 2011 14:10:45 -0000

On Fri, Aug 26, 2011 at 3:14 AM, Stefan Håkansson LK <> wrote:

> this is how I would do the case of the caller (initiator) wanting to
> receive only audio, but willing to send audio and video with the current API
> proposal:
> 1. Generate an audiovisual mediastream (getUserMedia)
> 2. create PeerConnection, add the above mediastream (addStream)
> 3. combine the SDP received from PeerConnection with the following fields
> "This is an invitation to a communication", "sending audio and video", "want
> to receive only audio" into a message sent to the peer.
> 4. the app in the peer (same app!) receives the message, reads the fields,
> (given user agreement to start the communication) creates a PeerConnection,
> feeds the received SDP into the PC, generates an *audio only* stream
> (getUserMedia) and adds it to the PC
> 5. A couple of SDP exchanges later the application is working as intended.
> (there will be onaddstream's, you will attach those streams to video/audio
> elements etc.)
> Quite simple! And no need to have the application read, understand, or
> modify, the SDPs - they are opaque. (Then, of course, the mediastreams must
> be mapped to RTP sessions and such stuff, but I'm sure that is solvable and
> should not be visible in the API IMHO.)

Maybe I misunderstand, but it sounds like with these fields you are defining
a new signaling protocol, which I think we want to avoid.

Going back to your step 3 - here the initiator can of course munge the
generated SDP and discard the m=video section, which should work, but in
other cases this munging may cause things to get out of sync since the
initiator browser's understanding of the offer now differs from reality.
What we really want is some way to either a) an API to tell the initiator
browser to produce an offer with no m=video, or b) a way for the application
to customize or generate the offer and feed it back to the browser. b) is
definitely more complex, but a) could end up causing us to add a lot of
knobs to the API.

> Stefan
> on 2011-08-26 06:48, Justin Uberti wrote:
>> On Thu, Aug 25, 2011 at 8:01 PM, Timothy B. Terriberry
>> < <mailto:tterriberry@mozilla.**com<>>>
>> wrote:
>>    Justin Uberti wrote:
>>        I think it makes sense for the browser to emit capabilities,
>>        which could
>>    I agree there's clearly some gaps here that need to be filled.
>>        then be used by the web app to generate a SDP offer or answer. This
>>        The original problem that started this email is one specific
>>        example -
>>        if the callee application wants to only receive audio, the
>>        application
>>        can generate an audio-only SDP based on the offer, the browser
>>    I think the Harald's original problem was the other way around: the
>>    _caller_ wants to only receive audio, and needs to generate an SDP
>>    _offer_ that says that, even if the browser is capable of receiving
>>    video. I don't think that invalidates your point, though.
>>        capabilities, and the desired app behavior - without any new
>>        APIs in the
>>        browser.
>>    But I'm not sure what you mean by "without any new APIs"... in your
>>    approach, something has to be able to enumerate the capabilities in
>>    sufficient detail for the webapp to generate SDP by itself. I don't
>>    think there are any existing APIs that go that far.
>> I meant, without specific APIs for that specific use case (i.e. "create
>> an audio-only offer"). We would need some sort of GetCapabilities API
>> that returned a blob of all the session description options the browser
>> supported, which probably could be formatted as a uber SDP offer if that
>> made parsing simplest.
>>    You also need an API to tell the browser what to actually do. The
>>    current PeerConnection approach is passing in the offer or the
>>    answer. If you're generating the answer, you need some way to tell
>>    your browser what you answered. For the "please don't send me video"
>>    case this is not an issue... it'll simply never arrive. If you want
>>    to change what the local browser is sending out, however, then it is.
>> Yes, you need a "HandleLocalDescription" and "HandleRemoteDescription"
>> API, instead of just a single OnSignalingMessage API. The deviation from
>> the current flow is fairly minor, you just have 2 additional states in
>> the state machine.
>>    I do agree it eliminates the need for an API to tell the browser
>>    what kind of SDP to generate, but it also seems like it imposes a
>>    pretty big burden on application developers: even if you keep the
>>    currently-proposed PeerConnection ability to generate SDP as the
>>    "simple API", the moment you want to do something slightly more
>>    complex, you have to add code to generate the appropriate SDP, which
>>    necessarily involves figuring out all the capabilities of the
>>    various browsers on various platforms. Maybe I'm naive in thinking
>>    that seems like an awful lot of work just to say, "Please don't send
>>    me video."
>> It's a fair point, there is more complexity involved in generating the
>> offer, but in our experience it is manageable. I suppose it depends on
>> how many APIs we decide we need to control the generation of SDP  (i.e.
>> use cases other than no-video). If we decide we need to control crypto,
>> resolution preference, codec preference, we may find this approach
>> simpler.
>>    ______________________________**___________________
>>    rtcweb mailing list
>> <>
>>    <**listinfo/rtcweb<>
>> >
> ______________________________**_________________
> rtcweb mailing list