Re: [rtcweb] [MMUSIC] RTP demux in JSEP and BUNDLE

Peter Thatcher <> Fri, 06 January 2017 19:24 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 20E31129DE2 for <>; Fri, 6 Jan 2017 11:24:05 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -5.8
X-Spam-Status: No, score=-5.8 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RP_MATCHES_RCVD=-3.1, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 74cjN2KgF6bY for <>; Fri, 6 Jan 2017 11:24:03 -0800 (PST)
Received: from ( [IPv6:2607:f8b0:4001:c0b::230]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id D117E129DE1 for <>; Fri, 6 Jan 2017 11:24:02 -0800 (PST)
Received: by with SMTP id 192so22758471itl.0 for <>; Fri, 06 Jan 2017 11:24:02 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=e8/h0v9mjwFAffJdCTIqV6uE+Ke7qSKN64UiLhrK4l8=; b=KUHuuLl34V1DS5GHHx3u3jvy/OishxXkU2kJuxX7uck9ObYHHWjj020g2uwbqIMTfN KTDXzj+dMCZBlzDdReRmm+eEDhJd59PqdO0fW57l8pojDknbersNnYFDoxbyI6unfzyn KvX0Q/LDPyPpq0toqxY/DKHnlkuTxNILcKyh3YBpyfmG/xQWWeaiJFvnOXiAlFE6yiLF NJ5gIkN23OWuUY6+t4E0G+S3mzQzNHhhWjugUpYirBKNsuTpKUBvW0KQM3iDJxMoilRK WwVBAWaI9qnxXv0B5weDjD8E1pE39OxX6FRZiXq+GpLZckiiQVotTrElTL6gYURpT/oF 48Pw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=e8/h0v9mjwFAffJdCTIqV6uE+Ke7qSKN64UiLhrK4l8=; b=qjwToVHOElNKGqjjt66+hhv49+voeKpGOnJi3oS8n4um4dboRlHwJ9BPwYecn+speT gpu7MHwc4KVUovHXkbyQXE4ZHnbI9N1ZikGI7ff+ls98zX5BmC/edx8tZCoLQ1B2EsKg 4kborQuIPMS55/b6UNjxgyvDS5W61Rs6k2mqCw0vZj0xcOu4AaQkp68Zrp7Bl1yzYo4O lqExnEeS/RdjtbA1DoHfcO6HiuZHkeIldAGUxt9WfmvDdAsOl4x4voF8ywXQoR3nQZOb iRTlf3eqmjL6UJAcBRCtep6Tfq7Nj57HsuJQqxBHObkX+6M4WQcDEjfpx34hjACx8New 47Hg==
X-Gm-Message-State: AIkVDXJPjzAQVr7Gd9fjvlK651FXf63jUvIC8xxX7VX29o8YhuwJG0k0uz/c4PcdmL3RTu+VtaVwfW5YNeWarhug
X-Received: by with SMTP id q2mr205972itd.26.1483730641605; Fri, 06 Jan 2017 11:24:01 -0800 (PST)
MIME-Version: 1.0
References: <>
In-Reply-To: <>
From: Peter Thatcher <>
Date: Fri, 06 Jan 2017 19:23:50 +0000
Message-ID: <>
To: Colin Perkins <>, "mmusic (E-mail)" <>,
Content-Type: multipart/alternative; boundary="94eb2c08da88d6256d054571f51e"
Archived-At: <>
Subject: Re: [rtcweb] [MMUSIC] RTP demux in JSEP and BUNDLE
X-Mailman-Version: 2.1.17
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: Fri, 06 Jan 2017 19:24:05 -0000

When I read your text, I get the impression that you want to simplify the
algorithm to only supporting MIDs for demux with SSRC latching.  No PT
demux.   No SSRC demux (except for ones latched by MID).   In other words,
if you want to use BUNDLE, you must use MID and only MID.

But it's not clear if that's the case.  Perhaps I missed something.  I
agree with others that a more explicit algorithm would make your intention

To help, here is my interpretation of your text as an algorithm.  Please
let me know if it's a correct interpretation:

    <section title="Appendix B" anchor="sec.appendix-b">
      <t>To prepare for demultiplexing RTP packets to the correct "m="
      line, the following steps MUST be followed for each BUNDLE

          <t>Construct a table mapping MID to "m=" line for each "m="
          line in this BUNDLE group.</t>

          <t>Construct an empty table mapping incoming SSRC to "m=" line.

      <t>As "m=" lines are added or removed from the BUNDLE groups, or
      their configurations are changed, the tables above must also be

      <t>For each RTP packet received, the following steps MUST be
      followed to route the packet to the correct "m=" section within
      a BUNDLE group:</t>

          <t>If the packet has a MID and that MID is not in the table
          mapping MID to "m=" line, drop the packet and stop.</t>

          <t>If the packet has a MID and that MID is in the table
          mapping MID to "m=" line, update the incoming SSRC mapping
          table to include an entry that maps the packet's SSRC to the
          "m=" line for that MID.</t>

          <t>If the packet's SSRC is in the incoming SSRC mapping
          table, route the packet to the associated "m=" line and

          <t>Otherwise, drop the packet.</t>

... similar for RTCP ...

On Thu, Dec 8, 2016, 2:55 AM Colin Perkins <> wrote:


[cc’ing RTCWEB and MMUSIC, since this relates to both JSEP and BUNDLE

There’s been a lot of discussion on the lists, and at the meeting in Seoul,
around how RTP streams are mapped onto higher-level, application
meaningful, semantic roles. In particular, around how RTP streams map onto
JSEP objects for WebRTC. Magnus Westerlund and I would like to propose the
following updates to JSEP and BUNDLE to try to clarify the behaviour.

Comments and feedback very welcome.


# Replacement for Section 6 of draft-ietf-rtcweb-jsep-17

 <section title="Processing RTP/RTCP" anchor="sec.rtp.demux">
    <t>As described in <xref target="RFC3550"/>, RTP packets are
    associated with RTP streams <xref target="RFC7656"/>. Metadata
    about those streams, including source description information
    and reception quality feedback is conveyed in RTCP packets.
    Each RTP stream is identified by an SSRC, and each RTP packet
    carries an SSRC value that is used to associate the packet with
    the correct RTP stream. RTCP packets also use SSRCs to identify
    the RTP streams that the reports and metadata relate to.  RTCP
    packets generally carry multiple SSRC values and report on, or
    deliver source description information relating to, several RTP

    <t>Each incoming RTP stream, identified by its SSRC, is mapped to
    an m= section in the SDP. The SDP m= sections then correspond to
    RtpReceiver objects. This allows each RTP stream to be associated
    with an RtpTransceiver. Further processing of the RTP stream can
    then be done at the RtpTransceiver level.  This includes using
    RID <xref target="I-D.ietf-mmusic-rid"/> to distinguish between
    multiple Encoded Streams, as well as determine which Source RTP
    stream should be repaired by a given Redundancy RTP stream.</t>

    <t>The process of mapping RTP streams onto m= sections depends on
    whether streams are bundled or not. If the SDP BUNDLE extension
    is in use, then RTP streams are mapped onto m= sections based on
    the MID values as described in
    <xref target="I-D.ietf-mmusic-sdp-bundle-negotiation"/>.  If the
    SDP BUNDLE extension is not in use, each m= section corresponds
    to a transport layer connection and the RTP streams received on
    that connection correspond to the m= section.</t>

    <t>Incoming RTCP packets contain metadata including reception
    quality feedback, source description information, and other
    signalling relating to RTP streams. The RTCP packets are parsed,
    the associated RTP streams are identified based on the included
    SSRC values, and the metadata relating to those RTP streams is
    updated (this might include updating the MID information, used
    to associate RTP streams with m= sections, if the SDP BUNDLE
    extension is in use). This updated metadata is available to the
    RtpTransceiver objects associated with those RTP streams.

# Replacement text for section 10.2 of

     <section anchor="sec-rtp-pt"
              title="Associating RTP Streams With Correct SDP Media
       <t>As described in <xref format="default" pageno="false"
       target="RFC3550"/>, RTP packets are associated with RTP streams <xref
       format="default" pageno="false" target="RFC7656"/>. Each RTP stream
       identified by an SSRC value, and each RTP packet carries an SSRC
       that is used to associate the packet with the correct RTP stream.
       packets also uses SSRCs to identify on which RTP streams any report
       feedback relate to. Thus, an RTCP packet will commonly carry multiple
       SSRC values, and might therefore be providing feedback or report on
       multiple RTP streams. </t>

       <t>In order to be able to process received RTP packets correctly it
       must be possible to associate an RTP stream with the correct "m="
       line, as the "m=" line and SDP attributes associated with the "m="
       line contain information needed to process the packets.</t>

       <t>As all RTP streams associated with a BUNDLE group are part of the
       same RTP session and using the same address:port combination for
       sending and receiving RTP/RTCP packets, the local address:port
       combination cannot be used to associate an RTP stream with the
       "m=" line. In addition, multiple RTP streams might be associated with
       the same "m=" line.</t>

       <t>Also, as described in <xref format="default" pageno="false"
       target="sec-rtp-sessions-pt"/>, the same payload type value might be
       used by multiple RTP streams, in which case the payload type value
       cannot be used to associate an RTP stream with the correct "m=" line.
       However, there are cases where each "m=" line has unique payload type
       values, and then the payload type could serve as hint to the relevant
                    "m=" line the RTP stream is associated with.</t>

       <t>An offerer and answerer can inform each other which SSRC values
       they will use for an RTP stream by using the SDP 'ssrc' attribute
       <xref format="default" pageno="false" target="RFC5576"/>. However, an
       offerer will not know which SSRC values the answerer will use until
       the offerer has received the answer providing that information. Due
       this, before the offerer has received the answer, the offerer will
       be able to associate an RTP stream with the correct "m=" line using
       the SSRC value associated with the RTP stream. In addition, the
       offerer and answerer may start using new SSRC values mid-session,
       without informing each other using the SDP 'ssrc' attribute.</t>

       <t>In order for an offerer and answerer to always be able to
       an RTP stream with the correct "m=" line, the offerer and answerer
       using the BUNDLE extension MUST support the mechanism defined in
       format="default" pageno="false" target="sec-receiver-id"/>, where the
       offerer and answerer includes the identification-tag (provided by the
       remote peer) associated with an "m=" line in the RTP Streams and in
       RTCP SDES packets part of a BUNDLE group.</t>

       <t>The mapping from an SSRC to an identification-tag is carried in
       RTCP SDES packets or in RTP header extensions (<xref format="default"
       pageno="false" target="sec-receiver-id"/>). Since a compound RTCP
       packet can contain multiple RTCP SDES packets, and each RTCP SDES
       packet can contain multiple chunks, an RTCP packet can contain
       SSRC to identification-tag mappings. The offerer and answerer
       tables mapping RTP streams identified by SSRC to "m=" lines
       by the identification-tag.
       When receiving an RTP packet carrying a MID header extension
       with the identification-tag, or an RTCP packet carrying one or
       more SDES MID items, the offerer or answerer creates a mapping
       table entry between the SSRC value and the identification-tag,
       in order to associate the RTP stream associated with that SSRC
       value with the "m=" line corresponding to the identification-tag.</t>

       <t>The mapping between the SSRC an identification-tag might change
       mid-session if, for a given SSRC value, a different
       is provided in an RTP or RTCP packet. In that case these tables are
       updated each time an RTP/RTCP packet containing a new mappings from
       SSRC to identification-tag is received. Some considerations for
       avoiding update flaps are provided in Section 4.2.6 of <xref
       target="RFC7941"/> which should be followed. </t>

       <t>If an offerer and answerer is not able to associate an RTP stream
       with an "m=" line (using the mechanisms described in this section, or
       using other appropriate mechanism, e.g., based on the payload type
       value if it is unique to a single "m=" line), it MUST either drop the
       RTP packets associated with the RTP stream, or process them in an
       application specific manner, once non-stream specific processing
       (e.g., related to congestion control) of the RTP packets have

       <t>When compound RTCP packets are received, they are split
       into their component RTCP packets and those component RTCP
       packets are processed based on their RTCP packet type, in
       the order in which they were placed into the compound RTCP
       packet. Non-compound RTCP packets are processed based on
       their RTCP packet type, in the order they are received. Information
       in each RTCP packet can relate to one or more RTP streams.
       For example, RTCP Sender Report (SR) and Receiver Report (RR)
       packets include an SSRC of sender field that indicates the
       identity of the participant that sent the RTCP packet, along
       with a list of Report Blocks. Each report contains data on the
       reception quality of a single RTP stream, identified by SSRC,
       as received by the SSRC that sent the RTCP packet. Other RTCP
       packet types similarly contain references to the SSRC of the
       sender of the RTCP packet, and the RTP streams to which it

       <t>It should always be possible to process RTCP packets, and
       store the received information in a data structure associated
       with an RTP stream, identified by SSRC, for later access and
       use. It is possible that RTCP packets relating to an SSRC can
       be received before RTP packets relating to that SSRC, so the
       data structures relating to an SSRC might need to be created
       before the corresponding RTP stream is received.</t>

       <t>Similarly, information relating to an RTP stream might be
       received before the data needed to map it onto an m= line is
       received. Information carried in RTCP packets relating to such
       an RTP stream that is application and/or "m=" line dependent
       MAY be dropped until the SSRCs is associated with a particular
       "m=" line. However, information to generate RTCP report blocks
       and other basic transport level feedback or reporting needs to
       be retained, so RTCP reports relating to the stream can be


Colin Perkins

mmusic mailing list