<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="exp" docName="draft-alvestrand-rmcat-remb-00" ipr="trust200902">
  <front>
    <title abbrev="REMB ">RTCP message for Receiver Estimated Maximum
    Bitrate</title>

    <author fullname="Harald Alvestrand" initials="H" role="editor"
            surname="Alvestrand">
      <organization>Google</organization>

      <address>
        <postal>
          <street>Kungsbron 2</street>

          <city>Stockholm</city>

          <region></region>

          <code>11122</code>

          <country>Sweden</country>
        </postal>

        <email>harald@alvestrand.no</email>
      </address>
    </author>

    <date day="17" month="January" year="2012" />

    <abstract>
      <t>This document proposes an RTCP message for use in
      experimentally-deployed congestion control algorithms for RTP-based
      media flows.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>This document proposes an RTCP feedback message signalling the
      estimated total available bandwidth for a session.</t>

      <t>If this function is available, it is possible to implement the
      algorithm in <xref target="I-D.alvestrand-rtcweb-congestion"></xref>, or
      other algorithms with the same kind of feedback messaging need, in a
      fashion that covers multiple RTP streams at once.</t>
    </section>

    <section title="Receiver Estimated Max Bitrate (REMB)">
      <t></t>

      <section title="Semantics">
        <t>This feedback message is used to notify a sender of multiple media
        streams over the same RTP session of the total estimated available bit
        rate on the path to the receiving side of this RTP session.</t>

        <t>Within the common packet header for feedback messages (as defined
        in section 6.1 of <xref target="RFC4585"></xref>), the "SSRC of packet
        sender" field indicates the source of the notification. The "SSRC of
        media source" is not used and SHALL be set to 0. This usage of the
        value zero is also done</t>

        <t>The reception of a REMB message by a media sender conforming to
        this specification SHALL result in the total bit rate sent on the RTP
        session this message applies to being equal to or lower than the bit
        rate in this message. The new bit rate constraint should be applied as
        fast as reasonable. The sender is free to apply additional bandwidth
        restrictions based on its own restrictions and estimates.</t>
      </section>

      <section title="Message format">
        <t>This document describes a message using the application specific
        payload type. This is suitable for experimentation; upon
        standardization, a specific type can be assigned for the purpose.</t>

        <t>The message is an RTCP message with payload type 206. RFC 3550
        <xref target="RFC3550"></xref> defines the range, RFC 4585 defines the
        specific PT value 206 and the FMT value 15.</t>

        <figure>
          <artwork><![CDATA[ 0                   1                   2                   3               
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P| FMT=15  |   PT=206      |             length            |                               
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  SSRC of packet sender                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  SSRC of media source                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Unique identifier 'R' 'E' 'M' 'B'                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Num SSRC     | BR Exp    |  BR Mantissa                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   SSRC feedback                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  ...                                                          |

]]></artwork>
        </figure>

        <t></t>

        <t>The fields V, P, SSRC, and length are defined in the RTP
        specification [2], the respective meaning being summarized below:</t>

        <t><list hangIndent="12" style="hanging">
            <t hangText="version (V): (2 bits): ">This field identifies the
            RTP version. The current version is 2.</t>

            <t hangText="padding (P) (1 bit): ">If set, the padding bit
            indicates that the packet contains additional padding octets at
            the end that are not part of the control information but are
            included in the length field. Always 0.</t>

            <t hangText="Feedback message type (FMT) (5 bits):">This field
            identifies the type of the FB message and is interpreted relative
            to the type (transport layer, payload- specific, or application
            layer feedback). Always 15, application layer feedback message.
            RFC 4585 section 6.4.</t>

            <t hangText="Payload type (PT) (8 bits): ">This is the RTCP packet
            type that identifies the packet as being an RTCP FB message.
            Always PSFB (206), Payload-specific FB message. RFC 4585 section
            6.4.</t>

            <t hangText="Length (16 bits):">The length of this packet in
            32-bit words minus one, including the header and any padding. This
            is in line with the definition of the length field used in RTCP
            sender and receiver reports [3]. RFC 4585 section 6.4.</t>

            <t hangText="SSRC of packet sender (32 bits):">The synchronization
            source identifier for the originator of this packet. RFC 4585
            section 6.4.</t>

            <t hangText="SSRC of media source (32 bits):">Always 0; this is
            the same convention as in <xref target="RFC5104"></xref> section
            4.2.2.2 (TMMBN).</t>

            <t hangText="Unique identifier (32 bits):">Always &lsquo;R&rsquo;
            &lsquo;E&rsquo; &lsquo;M&rsquo; &lsquo;B&rsquo; (4 ASCII
            characters).</t>

            <t hangText="Num SSRC (8 bits):">Number of SSRCs in this
            message.</t>

            <t hangText="BR Exp (6 bits): ">The exponential scaling of the
            mantissa for the maximum total media bit rate value, ignoring all
            packet overhead. The value is an unsigned integer [0..63], as in
            RFC 5104 section 4.2.2.1.</t>

            <t hangText="BR Mantissa (18 bits): ">The mantissa of the maximum
            total media bit rate (ignoring all packet overhead) that the
            sender of the REMB estimates. The BR is the estimate of the
            traveled path for the SSRCs reported in this message. The value is
            an unsigned integer in number of bits per second.</t>

            <t hangText="SSRC feedback (32 bits)">Consists of one or more SSRC
            entries which this feedback message applies to.</t>
          </list></t>

        <t></t>
      </section>

      <section title="Signaling of use of this extension">
        <t>Either end of an RTP session can send this message. There is no
        signalling to indicate that the message can be understood.</t>

        <t>OPEN ISSUE: Do we need signalling, and if so, how should it be
        done?</t>

        <t>It does not seem harmful to send it when recipient does not
        understand it, but negotiating it may give better behaviour when it is
        not available (by falling back to per-RTP-session TMMBR messages).</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document requests no action of IANA.</t>

      <t>This section can be removed upon publication as an RFC.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>If the RTCP packet is not protected, it is possible to inject fake
      RTCP packets that can increase or decrease bandwidth. This is not
      different from security considerations for any other RTCP message.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>This proposal has emerged from discussions between, among others,
      Justin Uberti, Magnus Flodman, Patrik Westin, Stefan Holmer and Henrik
      Lundin.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.3550'?>

      <?rfc include='reference.RFC.5104'?>

      <?rfc include='reference.RFC.4585'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.alvestrand-rtcweb-congestion'?>

      <?rfc include='reference.RFC.5450'?>
    </references>

    <section title="Change log">
      <t></t>

      <section title="From appendix of -congestion-01 to -00">
        <t>The timestamp option was removed. Discussion concluded that the RFC
        5450 <xref target="RFC5450"></xref> "transmission time offset" header
        likely gives accurate enough send-time information for our
        purposes.</t>
      </section>
    </section>
  </back>
</rfc>
