Re: [rtcweb] BUNDLE with implicit rtcp-mux

Christer Holmberg <> Mon, 10 March 2014 08:24 UTC

Return-Path: <>
Received: from localhost ( []) by (Postfix) with ESMTP id B8FEE1A03FA for <>; Mon, 10 Mar 2014 01:24:17 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.65
X-Spam-Status: No, score=-2.65 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HELO_EQ_SE=0.35, HTML_MESSAGE=0.001, J_CHICKENPOX_15=0.6, J_CHICKENPOX_55=0.6, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id PnxnWnble3mv for <>; Mon, 10 Mar 2014 01:24:14 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 9838E1A03F0 for <>; Mon, 10 Mar 2014 01:24:13 -0700 (PDT)
X-AuditID: c1b4fb2d-b7f5d8e000002a7b-a7-531d76a72e35
Received: from (Unknown_Domain []) by (Symantec Mail Security) with SMTP id 54.E1.10875.7A67D135; Mon, 10 Mar 2014 09:24:07 +0100 (CET)
Received: from ([]) by ([]) with mapi id 14.02.0387.000; Mon, 10 Mar 2014 09:24:06 +0100
From: Christer Holmberg <>
To: Justin Uberti <>, "" <>, Eric Rescorla <>
Thread-Topic: BUNDLE with implicit rtcp-mux
Thread-Index: AQHPPCh4uGvaKjLTukeJMcClx2WsG5rZ+rmg
Date: Mon, 10 Mar 2014 08:24:06 +0000
Message-ID: <>
References: <>
In-Reply-To: <>
Accept-Language: en-US
Content-Language: en-US
x-originating-ip: []
Content-Type: multipart/alternative; boundary="_000_7594FB04B1934943A5C02806D1A2204B1D1F1892ESESSMB209erics_"
MIME-Version: 1.0
X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrILMWRmVeSWpSXmKPExsUyM+Jvje7yMtlgg87FhhYrXp9jt9g6Vchi 7b92dgdmjwWbSj2WLPnJ5DH5cRtzAHMUl01Kak5mWWqRvl0CV8bK7hPsBW0tjBVNv/tZGxgP NDB2MXJySAiYSKzcvJUFwhaTuHBvPVsXIxeHkMAhRoldm5cwQzhLGCXmf9nE2sXIwcEmYCHR /U8bpEFEIFtix+EbYM3CAloST2/cYYKIa0v8mvKCEcI2kmjY9I4NxGYRUJV4/m0VWA2vgK9E 36qpYDVCAgESc3pXg9VwCgRK/G24zQ5iMwId9P3UGrB6ZgFxiVtP5jNBHCogsWTPeWYIW1Ti 5eN/rBC2ksSPDZdYIOrzJfY9e84IsUtQ4uTMJywTGEVmIRk1C0nZLCRls4C+ZBbQlFi/Sx+i RFFiSvdDdghbQ6J1zlx2ZPEFjOyrGNlzEzNz0ssNNzECo+nglt+6OxhPnRM5xCjNwaIkzvvh rXOQkEB6YklqdmpqQWpRfFFpTmrxIUYmDk6pBkaxbzl13+dvyuor/1CQV/dR6FKCwEr1+3xZ dxRO/TtlZ9lgsWdP+Otbep8UGq+9P/9t+s7C8t1rz0pMi9Kb+esq3xMmNZvz2kaHbN/vuDzJ JWzT9Vf+HMWPO1N4YmdO+z/j4oI417qy+7bS7X2XeF0/Ppq7fIvT6mkxqyYW+HPzn9mc6W+s MXGNEktxRqKhFnNRcSIAz9AhJHQCAAA=
Subject: Re: [rtcweb] BUNDLE with implicit rtcp-mux
X-Mailman-Version: 2.1.15
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: Mon, 10 Mar 2014 08:24:18 -0000


Before I comment on your proposal, let’s take a few steps back (maybe it can even solve your issue).

BUNDLE currently mandates the usage of both the SDP rtcp-mux and rtcp attributes. I remember we had discussions about that, but I don’t remember the justification at the moment. But, I wonder whether that text is from before we made a decision that, unless both endpoints support BUNDLE, no endpoint will use a single address:port.

So, the question is: do we really need the SDP rtcp attribute?



From: Justin Uberti []
Sent: 10. maaliskuuta 2014 8:18
To:; Eric Rescorla; Christer Holmberg
Subject: BUNDLE with implicit rtcp-mux

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 m-sections).
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.