[rtcweb] BUNDLE with implicit rtcp-mux

Justin Uberti <juberti@google.com> Mon, 10 March 2014 06:17 UTC

Return-Path: <juberti@google.com>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com []) by ietfa.amsl.com (Postfix) with ESMTP id 268311A03D3 for <rtcweb@ietfa.amsl.com>; Sun, 9 Mar 2014 23:17:59 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -0.725
X-Spam-Status: No, score=-0.725 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, J_CHICKENPOX_15=0.6, J_CHICKENPOX_55=0.6, RP_MATCHES_RCVD=-0.547, SPF_PASS=-0.001] autolearn=no
Received: from mail.ietf.org ([]) by localhost (ietfa.amsl.com []) (amavisd-new, port 10024) with ESMTP id 3oiaZhlOfQH8 for <rtcweb@ietfa.amsl.com>; Sun, 9 Mar 2014 23:17:57 -0700 (PDT)
Received: from mail-ve0-x230.google.com (mail-ve0-x230.google.com [IPv6:2607:f8b0:400c:c01::230]) by ietfa.amsl.com (Postfix) with ESMTP id 487EB1A03D1 for <rtcweb@ietf.org>; Sun, 9 Mar 2014 23:17:57 -0700 (PDT)
Received: by mail-ve0-f176.google.com with SMTP id cz12so6483753veb.21 for <rtcweb@ietf.org>; Sun, 09 Mar 2014 23:17:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=M7m/6j9iFjxN0RgqDyGA2soEVITtwwxftrqutwPCHhU=; b=AyWQMxLBz8nFLt1mKmKS1QyxlV2JrVfkevMNRxAtnao0wM2OZhX0vwe3NwUJ6U5r+F iZb5/Vris7NhJladpUjRyPsOKg8VPv29VzsMs9MaArhuDIe1Dsh9wmvouJdAjdsTQyBp E66V+AD/uAUl6fysiJFqwmEVAg+1OLVndJJesq8MfC5l8pwhMF410+YyqPx8TpRNI6/v wk6cI3zXGME3eR/Rje+Q2Xw+jruTwaBh2nLqf8uCywPyVevgLiR+bE5aPB1wEDj7mhzr BS4hgYbDEmVRpziyd5cuOaOamEwM57iLAnYQVo0qAob7BbWkc5qZ33PvHhpv+NjYhORW srzw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to :content-type; bh=M7m/6j9iFjxN0RgqDyGA2soEVITtwwxftrqutwPCHhU=; b=R6hGSRicHAiI/BTwJ6dU9IXDyyn+5KC2+FyiNKCKa9dRez4ZRzqKUlGM237xSdmjXV Ap0rap0Je4EmeOE5mRZJZYK1A49hb48qMt4ltzXuCbVhlnDwuLKPhc9fsKJTMs127hE0 xN5EGG3tgs4gqYtdQmwAmpFf9t6OOCAvPY/DgKDU07IReh0/SKvK7imchvMyxU086sgX pp4MXuYWNO4lpQ+m7XPkrT3x/qc+FHzNx3o6vBDorROTAxnbDHj0tFUrAOo5nbdhGz/S ruir62LDq3uXjW1/dXmUnycd/yq+ozYxbk2n/+BB5C0d8SaaFRq0mxXmo+VtlMstNvB+ YtAA==
X-Gm-Message-State: ALoCoQlAsw+X1ksx6qlZjsa+KKJt42Q40Dr2KhWj3KLAGZUgboUZcIRToL/epmSWxISUb3acDIFLi4wMEM61R2f+66KTooqrUQkNZ62rze60ew4cBtkuHVNnLSqg0zFq5Jx4TIdLtUu/xP7xNWoLQbAXNqrpV+vFDZ7Y++l11odvK2WFE2OBkAjwAfzie1QKG2Q6W+RR1GOw
X-Received: by with SMTP id z9mr707295vdi.12.1394432271494; Sun, 09 Mar 2014 23:17:51 -0700 (PDT)
MIME-Version: 1.0
Received: by with HTTP; Sun, 9 Mar 2014 23:17:31 -0700 (PDT)
From: Justin Uberti <juberti@google.com>
Date: Mon, 10 Mar 2014 06:17:31 +0000
Message-ID: <CAOJ7v-063mGE_zndtAqAMN2fJw7kWvUHX2SgyDMryfw_-aS-9w@mail.gmail.com>
To: "rtcweb@ietf.org" <rtcweb@ietf.org>, Eric Rescorla <ekr@rtfm.com>, Christer Holmberg <christer.holmberg@ericsson.com>
Content-Type: multipart/alternative; boundary="20cf30780f6234c99304f43a9015"
Archived-At: http://mailarchive.ietf.org/arch/msg/rtcweb/Zs2kDn5vuQY5u6FUQXgSy2FLsiE
Subject: [rtcweb] BUNDLE with implicit rtcp-mux
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.15
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: Mon, 10 Mar 2014 06:17:59 -0000

In my JSEP preso during the RTCWEB session last Wednesday, I discussed
adding a new BUNDLE policy to JSEP. This policy, which would be called
something like “force-bundle”, would force the use of the same ports for
BUNDLEd m-sections, as well as RTCP mux. When one knows a priori that the
other side supports BUNDLE, this would reduce candidate gathering even over
the currently defined “max-bundle” policy, since there would be no need to
gather RTCP ports at all, and also avoid the need for the BUNDLE fixup
offer (where the ports are updated to be the same for all BUNDLEd

To explain the differences here, here are some example offers for an
audio+video call:

Default bundle policy - separate ports for audio, video, RTP and RTCP:
m=audio 10000
m=video 11000

Existing "max-bundle" policy - video port is 0 because bundle-only, but
both RTP and RTCP ports allocated for audio:
m=audio 10000
m=video 0

The new “force-bundle” policy - only a single set of ports allocated -
audio, video, RTP, RTCP share the same port.
m=audio 10000
m=video 10000

During the discussion, the ability to avoid RTCP port gathering was seen as
valuable, but not the ability to avoid the fixup offer. However, after
thinking about it a bit, I don’t think that there is a viable solution that
avoids RTCP port gathering that *doesn’t* use a single set of ports. The
only other option would be to do something like this:

m=audio 10000
a=rtcp:10000 # same as m=audio port
m=video 0

but this will almost surely will result in a malfunction when talking to a
non-rtcp-mux client, due to the same port being used for RTP and RTCP, and
still requires the fixup offer, and as such is net worse than the
force-bundle approach indicated above.

So I think we the force-bundle approach is the one we want to minimize port
gathering. The only question is whether we should keep max-bundle as well.
To be specific, we need to decide between:

a) Keep max-bundle as it is (separate RTP and RTCP ports allocated), and
add a new force-bundle policy that creates an offer with a single port
shared between all m-sections (RTP and RTCP). max-bundle remains nominally
backwards compatible with non-BUNDLE/non-rtcp-mux endpoints, in that it
will still send a single audio stream. force-bundle is not backwards
compatible with non-BUNDLE endpoints.

b) Add force-bundle, but get rid of max-bundle.