Re: [MMUSIC] Proposal for what bundle should say about demux

Paul Kyzivat <> Mon, 27 May 2013 19:37 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id A041721F967F for <>; Mon, 27 May 2013 12:37:15 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -0.16
X-Spam-Status: No, score=-0.16 tagged_above=-999 required=5 tests=[AWL=0.277, BAYES_00=-2.599, FH_RELAY_NODNS=1.451, HELO_MISMATCH_NET=0.611, RDNS_NONE=0.1]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id l89fBqtxCsk0 for <>; Mon, 27 May 2013 12:37:09 -0700 (PDT)
Received: from ( [IPv6:2001:558:fe14:44:76:96:59:212]) by (Postfix) with ESMTP id B225E21F966F for <>; Mon, 27 May 2013 12:37:09 -0700 (PDT)
Received: from ([]) by with comcast id h6jh1l00B1wpRvQ5E7d8gV; Mon, 27 May 2013 19:37:08 +0000
Received: from Paul-Kyzivats-MacBook-Pro.local ([]) by with comcast id h7d81l00v3ZTu2S3e7d8bX; Mon, 27 May 2013 19:37:08 +0000
Message-ID: <>
Date: Mon, 27 May 2013 15:37:07 -0400
From: Paul Kyzivat <>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:17.0) Gecko/20130509 Thunderbird/17.0.6
MIME-Version: 1.0
To: Colin Perkins <>
References: <> <> <> <> <> <> <> <>
In-Reply-To: <>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=q20121106; t=1369683428; bh=3kbh3WnT1OW9qmwWbvQl9AsVikmWGdplwPDAWnZXGHk=; h=Received:Received:Message-ID:Date:From:MIME-Version:To:Subject: Content-Type; b=mooIYNG2p4lVWFBsdVYZ4CNKBGqAvk1+L/b0k87PTVefCW46NyBlAAkpyYLWYp3BM RjasYvRaf458V0tU81AwkWlmjY+LKAbmunVLqlT6LMc5PE9bww037DJZQN4+w1X5KT B5BlfcYChwqeXYwhv3rt6iViES4GNEW9UDxde7jZvs/mU007+uC5PfeVu1w8pL8G44 F8aaOqGO4Whz7t6Hq0ffnvxkSbhkT8GAxqhw4rGxLgjCamvot1h/P7/UW5XWA3AiHY CJMalDrlQsBtUPhzdY+LypIe4U1GahuRI6ysv86F+b2KsXGJgfwaqBSbYRRLfUW/5G 0Fp8d8EjBlsQw==
Subject: Re: [MMUSIC] Proposal for what bundle should say about demux
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Multiparty Multimedia Session Control Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Mon, 27 May 2013 19:37:15 -0000


On 5/27/13 3:16 PM, Colin Perkins wrote:
> On 27 May 2013, at 20:08, Paul Kyzivat wrote:
>> On 5/27/13 2:08 PM, Colin Perkins wrote:
>>> Paul,
>>> On 27 May 2013, at 18:31, Paul Kyzivat wrote:
>>>> Colin,
>>>> (I guess you know I am naive about RTP, so take this with a grain of salt.)
>>>> In the below, you first split by SSRC. Then later you map to codec. That seems to suggest that each SSRC might have a unique mapping from PT to codec. Did you intend that?
>>> That's not how RTP has worked historically. The mapping from payload type to payload format has always been done on a per-RTP session basis, with a static mapping for some types, and a dynamic binding via SDP for others.
>> Sure, I understand that. There was no way to describe that in SDP, so of course it wasn't done that way.
>> The introduction of bundling makes it possible to describe more possibilities. So that it becomes necessary to decide which ones will now be valid and which will not.
>> I asked because it wasn't clear. I think things can be made to work either way. If this is to be illegal, then the rules for forming bundles should say so.
> Without a wholesale revision to RTP and the signalling, I believe this should be illegal (i.e., you MUST NOT map the same payload type to two different payload formats in a single bundle group).
>>>> I also don't understand below how you expect unknown SSRCs to be handled. ISTM that the flow you show could result in establishing a bunch of state for each received SSRC, whether that SSRC is of interest or not.
>>> If you receive RTP and/or RTCP packets you need to keep some state for that SSRC. At least, you need to record the SSRC as in-use so you can avoid collisions, and you need to send RTCP reports for that SSRC. The state requirements for this are small (tens of bytes per SSRC). If you care about decoding and rendering the source there is more state, of course, but you only need that if you're rendering their media.
>>> You also need to be slightly smart to prevent DoS attacks if the other side decides to send you a stream of packets with a different, random, SSRC in each, but that's just basic robustness, and there are plenty of other ways to DoS a poorly engineered receiver at the RTP layer without playing tricks with SSRCs.
>>>> In some cases it may be that specific SSRCs are expected, and others can be ignored (or whatever). In other cases the recipient may not know what SSRCs to expect, but may have some other way of deciding which it wants to process.
>>> Sure - if you know what SSRCs you're expecting, you can pre-populate some of the state at the RTP level, and tell that layer that unknown SSRCs can be discarded. None of that changes the basic approach to de-multiplexing.
>>>> That was the point of my thread about associating packets to m-lines. If you can at least associate a packet with one of the bundled m-lines, even if it is by a means other than SSRC, then it becomes easier to decide what to do with it. For instance, I think Cullen intends that in plan A you could associate packets with m-lines via the PT, and then for each m-line process only packets for the most recently seen SSRC. (So when a new SSRC is received, drop all state for the prior SSRC and establish a new state for the new one.)
>>> I would suggest instead: de-multiplex into sources based on the SSRC and keep state for those according to the RTP timing rules. If you want to associate sources with m= lines via the PT, and determine what to render based on most recently active, that works fine, and works with all the various RTP and RTCP extensions (unlike de-multiplexing sources based on the PT), and gives you many more possible sources since the SSRC space is larger than the PT space.
>>>> The same approach can work using a header extension identifying a clue capture encoding to map to an m-line. When doing that, it won't be necessary for the PT to be unique across m-lines.
>>> The combination of an RTP Header Extension and/or RTCP SDES packet to identify an m= line would also work, and associates with the stream based on the SSRC. You don't need to use the PT to demultiplex for this.
>> One of my points is that if SSRC and/or header extension value is known in advance, then putting that in the SDP and using it to associate to an m-line can relax the requirement that PTs be unique per-m-line. That makes it possible to support more m-lines in a bundle. This could be advantageous for plan A.
> I don't see any problem using the a=ssrc: or RTP header extension based methods to determine what m= line an RTP source maps to.

> I don't think you need to relax the requirement that PTs be unique per m= line to do this.

I agree there is no *need* to relax the PT uniqueness requirement in 
order to map the packets (or sources if you prefer) to m-lines.

But (at least with plan A) there is a concern that there will be 
insufficient PTs to keep them unique per-m-line.

What I am saying is that if you do the mapping to m-line *before* the 
mapping from PT to payload format, then you *can* relax the PT 
uniqueness requirement.

This isn't violating precedent, because there is no precedent. Neither 
the problem nor the solution are present without bundling.


> As I said in the other thread, how you decide how to render an RTP source is separate to how you demultiplex RTP sources. Most of this confusion is coming from trying to combine the two operations.