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

"Cullen Jennings (fluffy)" <fluffy@cisco.com> Thu, 30 May 2013 19:07 UTC

Return-Path: <fluffy@cisco.com>
X-Original-To: mmusic@ietfa.amsl.com
Delivered-To: mmusic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 590B521F8FDD for <mmusic@ietfa.amsl.com>; Thu, 30 May 2013 12:07:46 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -110.428
X-Spam-Level:
X-Spam-Status: No, score=-110.428 tagged_above=-999 required=5 tests=[AWL=0.171, BAYES_00=-2.599, RCVD_IN_DNSWL_HI=-8, USER_IN_WHITELIST=-100]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tV7hDNwkCdXt for <mmusic@ietfa.amsl.com>; Thu, 30 May 2013 12:07:41 -0700 (PDT)
Received: from rcdn-iport-9.cisco.com (rcdn-iport-9.cisco.com [173.37.86.80]) by ietfa.amsl.com (Postfix) with ESMTP id 8DC6C21F8E6E for <mmusic@ietf.org>; Thu, 30 May 2013 12:07:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=8316; q=dns/txt; s=iport; t=1369940861; x=1371150461; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=ZjKYqg0iO4EshOt8j5k8hKgx3dk8duuP/MdAmC84UrM=; b=iUrIl4ReMgBAIkCazyqA1wBEmoAW4YgQ51jnX8JFBnv4IN1uhmmT2gOX a1UEes9HTLqk2fm+HceLGhqzKCFmsu3npf2U0qPMXSksZaveYHZPyE0Kr fWXXi+nfU5MrZIcn7wJ9jsySJsrh517ba054E+2j0flAHg/N7MPcPTcIy Q=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: AgMFAMuip1GtJV2c/2dsb2JhbABZgwkwwhd+FnSCIwEBAQMBAQEBJBMuBgsFCwIBCA4KChQQJwslAgQOBQiHfwYMu0mNWYEQAjEHgnZhA5NthHqQF4MPgic
X-IronPort-AV: E=Sophos;i="4.87,772,1363132800"; d="scan'208";a="213914578"
Received: from rcdn-core-5.cisco.com ([173.37.93.156]) by rcdn-iport-9.cisco.com with ESMTP; 30 May 2013 19:07:41 +0000
Received: from xhc-rcd-x08.cisco.com (xhc-rcd-x08.cisco.com [173.37.183.82]) by rcdn-core-5.cisco.com (8.14.5/8.14.5) with ESMTP id r4UJ7e7J003252 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL); Thu, 30 May 2013 19:07:40 GMT
Received: from xmb-aln-x02.cisco.com ([169.254.5.36]) by xhc-rcd-x08.cisco.com ([173.37.183.82]) with mapi id 14.02.0318.004; Thu, 30 May 2013 14:07:40 -0500
From: "Cullen Jennings (fluffy)" <fluffy@cisco.com>
To: Colin Perkins <csp@csperkins.org>
Thread-Topic: [MMUSIC] Proposal for what bundle should say about demux
Thread-Index: AQHOXWj0qIVhF30UxESpVVVeVdmv6g==
Date: Thu, 30 May 2013 19:06:43 +0000
Message-ID: <C5E08FE080ACFD4DAE31E4BDBF944EB113524B1F@xmb-aln-x02.cisco.com>
References: <C5E08FE080ACFD4DAE31E4BDBF944EB11350F3C8@xmb-aln-x02.cisco.com> <71E1CC64-09A0-41D3-81D0-CFE8C30277B1@csperkins.org> <C5E08FE080ACFD4DAE31E4BDBF944EB1135183E7@xmb-aln-x02.cisco.com> <A7E47BAA-5289-4C34-A9B9-6E8A1147D20F@csperkins.org>
In-Reply-To: <A7E47BAA-5289-4C34-A9B9-6E8A1147D20F@csperkins.org>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.20.249.164]
Content-Type: text/plain; charset="us-ascii"
Content-ID: <B6515E6D8BC5024080F70446B2C4E836@emea.cisco.com>
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
Cc: mmusic WG <mmusic@ietf.org>
Subject: Re: [MMUSIC] Proposal for what bundle should say about demux
X-BeenThere: mmusic@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Multiparty Multimedia Session Control Working Group <mmusic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/mmusic>, <mailto:mmusic-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/mmusic>
List-Post: <mailto:mmusic@ietf.org>
List-Help: <mailto:mmusic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/mmusic>, <mailto:mmusic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 30 May 2013 19:07:46 -0000

Colin, 

I've been deliberately merging layers A, B, C all into one in my discussion of this and focusing on the media stack code which has to deal with all those layers. The reasons I have been doing that is people just seemed to confused about what all the parts of RTP are such as RTP sessions. But most people seemed to understand what bits in the various packets they could look at what and what data had to end up at the right spot in the end. 

At a high level, I would draw the layers a little differently than you in that many of the implementation I work with do the jitter buffer after the data is decoded. This allows the implementations to do better packet loss concealment and play rate games where they speed up or slow down playback very slightly to smoothly adapt the jitter buffer depth. 

But regardless of the details of the order, the jitter buffer needs to look at the SSRC and if the SSRC has changed, it probably needs to retrain the jitter buffer. 

Lets talk a bit more about your diagram and what happens when Alice creates and Offer with that does not have use bundle and has two audio codecs. When an RTP packets #1 gets sent to Alice and it arrives before the answer, somewhere in layer B/C, something needs to look at the PT value to decide what codec this goes to. Alice knows nothing about what SSRC the other side is using. Now lets say that packet #2 arrives (again before answer) and packet #2 is on the same port, same PT, but has a different SSRC. None of the implementations I work with for audio would allocate a new PB or CR. Instead they would pass packet #2 throughout the same codec instance that packet #1 had used and expect things like the jitter buffer to note the SSRC change and act accordingly. For DSP based audio systems where the actual codec instances are loaded into the DSP and have a reserved set or resources allocated for them, this is a very common design. 

There is probably more variety in video applications but many conferences bridges act this way. 

So I have no problem if things split on SSRC and whatever processing that can be done knowing only that is done. That probably includes RTCP, FEC, RTX , who knows. But before the packed can be decoded by the codec, something needs to consider the PT and other things such as port when not doing bundle to make this work. Keep in mind things like PLI are much more likely to be sent at the layer near the codec than at layer B so layers B and C are not as cleanly separated as one might wish. 

That's a long way of saying, I was talking about the aggregate demux in media stack that include whatever happened at layers B and C. If layer B only used SSRC that's fine with me. I am trying to say what happens in the combination of layer B/C put together.  

What terminology should I be using to not cause confusion ?





On May 27, 2013, at 7:57 AM, Colin Perkins <csp@csperkins.org> wrote:

> I don't agree with the phrasing about "packet processing pipelines", but can't tell if this is a terminology disagreement or a more fundamental disconnect. The way I see the demultiplexing logically working is:
> 
>                    |
>                    | packets
>    +--             v
>    |           +----------+
>    |           |UDP socket|
> A  |           +----------+
>    |        RTP ||  |  |
>    |   and RTCP ||  |  +------> SCTP
>    |            ||  +---------> STUN/ICE
>    +--          ||
>    +--          ||
>    |       split by SSRC
>    |       ||   ||   ||
>    |       ||   ||   ||
> B  |      +--+ +--+ +--+
>    |      |PB| |PB| |PB| Playout buffer, process RTCP, FEC, etc.
>    |      +--+ +--+ +--+
>    +--      |   |     |
>    +--      |  /      |
>    |        +---+     |
>    |         /  |     |
> C  |      +--+ +--+ +--+
>    |      |CR| |CR| |CR| Codecs and rendering
>    |      +--+ +--+ +--+
>    +--
> 
> If your algorithm is for demultiplexing at layer C, i.e., to figure out what codec and rendering pipeline to use, then I think we're in agreement apart from terminology. 
> 
> For layer B, I believe the SSRC is the right thing to use to demultiplex, and fits with RTP and RTCP. This is where RTCP is processed, playout de-jitter buffering happens, FEC is processed, NACKs are sent, etc. It's logically independent of the decoding and rendering process since you can start filling your de-jitter buffer for an SSRC before you figure out if/how/where you're going to render that SSRC. 
> 
> For layer A, there was a clear-cut way of doing this with RTP, RTCP, and STUN. I haven't looked at SCTP enough to know how that affects things. I do think it's a logically separate issue, and should be documented separately to BUNDLE though, since it the same issues arise with non-bundled sessions.
> 
> An implementation might merge these together, of course, but to avoid confusion the standards should be clear what level they're considering.
> 
> Colin
> 
> 
> 
> On 27 May 2013, at 14:15, Cullen Jennings (fluffy) wrote:
>> Great - sounds like we agree this algorithm will work.
>> 
>> On May 27, 2013, at 6:41 AM, Colin Perkins <csp@csperkins.org> wrote:
>> 
>>> I'm not sure I agree.
>>> 
>>> As I said in my previous message to the list, if we are agreed that the m= lines in a BUNDLE group form a single RTP session, then I believe we need unique payload types across all m= lines. In this case, BUNDLE can simply say that regular RTP source demultiplexing based on the SSRC has to be performed, then the payload type can be used to match sources to m= lines for those applications that care about doing so. 
>>> 
>>> If we're not agreed that the m= lines in a BUNDLE group form a single RTP session, then we have a lot more to discuss...
>>> 
>>> Colin
>>> 
>>> 
>>> 
>>> On 23 May 2013, at 19:02, Cullen Jennings (fluffy) wrote:
>>>> Here's is my proposal for roughly what the bundle draft should say about this demux topic 
>>>> 
>>>> Application will decide which packet processing pipeline to pass an given RTP/RTCP packet to based on what the application knows:
>>>> 
>>>> 1) If future RFCs define new things (like RTP header extension), that explicitly specify the mapping, check if that future RFC is in use and if so then use that to form the mapping 
>>>> 
>>>> 2) If the PT type is uniquely identifies a mapping, use that to form the mapping
>>>> 
>>>> 3) If application knows the SSRC the other side will use, use that to form the mapping 
>>>> 
>>>> 4) if there is no way to know which pipeline to pass it too, the packet MAY be discarded or the application MAY decide to buffer it until the mapping is known 
>>>> 
>>>> This is trivial to implement. It meets the requirements for Plan A, Plan B, UCIF, CLUE, and so on. 
>>>> 
>>>> We could swap the order of step 2 and 3, My thinking for this order was the only time it made any difference the order was if the PT were unique and indicated a different mapping than the SSRC. The only way this could happen is with a SSRC collision so the PT is the one that would be correct not the SSRC. If someone feels strongly the order of steps 2 and 3 should be the opposite way around, I can live with that.
>>>> 
>>>> 
>>>> _______________________________________________
>>>> mmusic mailing list
>>>> mmusic@ietf.org
>>>> https://www.ietf.org/mailman/listinfo/mmusic
>>> 
>>> 
>>> 
>>> -- 
>>> Colin Perkins
>>> http://csperkins.org/
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> mmusic mailing list
>>> mmusic@ietf.org
>>> https://www.ietf.org/mailman/listinfo/mmusic
>> 
>> _______________________________________________
>> mmusic mailing list
>> mmusic@ietf.org
>> https://www.ietf.org/mailman/listinfo/mmusic
> 
> 
> 
> -- 
> Colin Perkins
> http://csperkins.org/
> 
> 
> 
> _______________________________________________
> mmusic mailing list
> mmusic@ietf.org
> https://www.ietf.org/mailman/listinfo/mmusic