Re: [MMUSIC] Query: payload type collision with offer/answer

Paul Kyzivat <> Thu, 10 January 2013 18:50 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 1EA6521F8A5E for <>; Thu, 10 Jan 2013 10:50:35 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: 0.195
X-Spam-Status: No, score=0.195 tagged_above=-999 required=5 tests=[AWL=0.032, BAYES_00=-2.599, FH_RELAY_NODNS=1.451, HELO_MISMATCH_NET=0.611, J_CHICKENPOX_15=0.6, RDNS_NONE=0.1]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id TSjqLkkr5fxx for <>; Thu, 10 Jan 2013 10:50:34 -0800 (PST)
Received: from ( [IPv6:2001:558:fe14:44:76:96:59:228]) by (Postfix) with ESMTP id DB96421F8A53 for <>; Thu, 10 Jan 2013 10:50:32 -0800 (PST)
Received: from ([]) by with comcast id mJ6p1k0071vXlb85FJqXL4; Thu, 10 Jan 2013 18:50:31 +0000
Received: from Paul-Kyzivats-MacBook-Pro.local ([]) by with comcast id mJqX1k00Z3ZTu2S3dJqXhk; Thu, 10 Jan 2013 18:50:31 +0000
Message-ID: <>
Date: Thu, 10 Jan 2013 13:50:31 -0500
From: Paul Kyzivat <>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:17.0) Gecko/20130107 Thunderbird/17.0.2
MIME-Version: 1.0
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=1357843831; bh=AUaiohMD+VlBmWWccOENS+nq3RyEXec2YHx4uEJYeJM=; h=Received:Received:Message-ID:Date:From:MIME-Version:To:Subject: Content-Type; b=VBaz7zhsasd4wEIjvekiPbtxjfv7THY77vsuMlfS/whZPvUstBgETksrb8RHvse6+ CEd3ysHP0ShJo/H7K3ROB7g9Uw+q5fFbn/7FqsJfhZPyUmoCvfbViaTQmiFqGAZdgs kNiULFtAyYZZuH0PV5xtRikdZ9j8ATzlBy6UbVd3GAXaTBFjftTZSYwitD+mpSu3mr rh9wYORUxCQypciubFWdxEFJ+M2MMpwVVUmCjAVPuSOySthe2/GFPL51dJQfEuoh/z onUKDqFyMscX6JKBSKpjROOKhoKwz19PbR66PDfOYH+fBPmaNIYDG8+jmNbBbe3+2h wLlH1EfVvzIGQ==
Subject: Re: [MMUSIC] Query: payload type collision with offer/answer
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: Thu, 10 Jan 2013 18:50:35 -0000

To the best of my memory the issue Harald has raised is a new one. I 
don't think it has never been discussed on any of the lists I have been 
following since 2002.

More inline.

On 1/9/13 6:46 PM, Emil Ivov wrote:
> On 09.01.13, 23:52, Harald Alvestrand wrote:
>> On 01/09/2013 10:01 PM, Charles Eckel (eckelcu) wrote:
>>> Please see inline.
>>>> -----Original Message-----
>>>> From: [] On
>>>> Behalf Of Harald Alvestrand
>>>> Sent: Wednesday, January 09, 2013 11:25 AM
>>>> To:
>>>> Subject: [MMUSIC] Query: payload type collision with offer/answer
>>>> Hello,
>>>> I have encountered an issue, and I'm not sure it's an issue or not. SDP
>>>> wisdom is sought.
>>>> Suppose two entities exchange the following offer/answer:
>>>> offer from X:
>>>> m=video 97
>>>> a=rtpmap:97 foo
>>>> answer from Y:
>>>> m=video 98
>>>> a=rtpmap:98 foo
>>>> It's clear from RFC 3264 that now X must send codec foo with payload
>>>> type 98, and Y must send codec foo with payload type 97. That's not the
>>>> question.
>>>> But suppose these are the offer and answer:
>>>> offer from X:
>>>> m=video 97 98
>>>> a=rtpmap:97 foo
>>>> a=rtpmap:98 bar
>>>> answer from Y:
>>>> m=video 97 98
>>>> a=rtpmap:97 bar
>>>> a=rtpmap:98 foo
>>>> That is, the payload types collide.
>>>> It would be possible to write code so that X sends foo with 98 and bar
>>>> with 97, while Y sends foo with 97 and bar with 98. But is it
>>> conformant
>>>> with the specs to do so?
>>>> And if this has a clear answer - which paragraph of which RFC makes
>>> this
>>>> clear?
>>>> (Yes, this discussion is triggered from a real world problem.)
>>> It is recommended to avoid such mismatches when possible, but doing so
>>> may not always be possible. The examples you mention are conformant.
>>> The following text from section 5.1 addresses this:
>>> For sendrecv RTP
>>> streams, the payload type numbers indicate the value of the payload
>>> type field the offerer expects to receive, and would prefer to send.
>>> However, for sendonly and sendrecv streams, the answer might indicate
>>> different payload type numbers for the same codecs, in which case,
>>> the offerer MUST send with the payload type numbers from the answer.
>>> Different payload type numbers may be needed in each direction
>>> because of interoperability concerns with H.323.
>> I was reading that text, and it clearly says which ones to use if the
>> payload types are different, but I don't think they clearly address the
>> situation with using the same payload type for two different codecs in
>> different directions.
>> In a multicast or transport relay scenario, this would clearly be
>> untenable, since third parties would not be able to send streams that
>> would be interpreted correctly by the two conflicting endpoints, but in
>> a two-party conversation, it's possible to make this work.
>> I just don't know if it's worth the effort to make it so.

You are right that these arguments work differently for unicast and 
multicast. I don't recall (I think it was before my time) how much 
thought was given to multicast in 3264. (It doesn't seem to be very 
much. And I think the O/A discussions in new additions to SDP rarely 
consider it at all.)

> Well there's also section 8.3.2 in 3264. The section is about updating
> offers but it seems like the text explicitly prohibits remapping payload
> types in any scenarios:
>     However, in the
>     case of RTP, the mapping from a particular dynamic payload type
>     number to a particular codec within that media stream MUST NOT change
>     for the duration of a session.  For example, if A generates an offer
>     with G.711 assigned to dynamic payload type number 46, payload type
>     number 46 MUST refer to G.711 from that point forward in any offers
>     or answers for that media stream within the session.  However, it is
>     acceptable for multiple payload type numbers to be mapped to the same
>     codec, so that an updated offer could also use payload type number 72
>     for G.711.

The language above is underspecified.

It is my impression that the intent of this language was to ensure there 
is no ambiguity in the meaning of a payload type. Since the exchange of 
the SDP is not synchronized with the flow of RTP, if you were to send a 
new SDP that changed the mapping for a payload type, then the result 
would be almost certainly to interpret some media packets according to 
the wrong mapping.

But this argument is only about packets flowing in one direction. It 
isn't a valid argument for requiring the payload types to be consistent 
in the two directions. And its not clear to me that it even intended 
that this language apply to both directions. It could be clarified as 

                               ...  For example, if A generates an offer
    with G.711 assigned to dynamic payload type number 46, payload type
    number 46 MUST refer to G.711 from that point forward in any offers
    or answers ***by A*** for that media stream within the session.  ...

Interpreting it to apply to both directions brings it in conflict with 
the language elsewhere that permits it to be different in the two 

The use of different mappings in each direction has been discussed over 
the years, though I couldn't point you to where. IIRC one of the reasons 
had to do with gatewaying to other protocols. But I can't offer any details.

Bottom line: IMO, in the weird case Harald described X ought to follow 
Postel's Law and accept the answer from Y. But for the same reason I 
would strongly discourage implementations from acting as Y did.