Packet Loss in RTCP
Liu Zhiyou
                             EECS
                        Nov 02, 2011
Liu Zhiyou (EECS)         Notes on RTCP   Nov 02, 2011   1 / 12
RTP Control Protocol
   The Real-Time Transport Control Protocol (RTCP) is a sister
   protocol of the Real-time Transport Protocol (RTP)
   Both is defined in RFC 3550
   Liu Zhiyou (EECS)         Notes on RTCP              Nov 02, 2011   2 / 12
Type of packets in RTCP
   Sender report (SR): Server reports needed information to clients.
   Receiver report (RR): clients send to server , containing
   information about packet loss counted by client.
   Source description (SDES): Sending unique ID to session participants.
   End of participation (BYE): An end-point announces that it is leaving
   the conference.
   Application-specific message (APP): Application-specific messages.
   Liu Zhiyou (EECS)          Notes on RTCP                Nov 02, 2011   3 / 12
RR packet in RTCP standard
                  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
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        header   |V=2|P|    RC   |   PT=RR=201   |              length           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                     SSRC of packet sender                     |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_1 (SSRC of first source)                 |
        block    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          1      | fraction lost |       cumulative number of packets lost        |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |           extended highest sequence number received           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                      interarrival jitter                      |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                         last SR (LSR)                         |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                   delay since last SR (DLSR)                  |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_2 (SSRC of second source)                |
        block2   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   number of packets lost: Defined to be the number of packets
   expected less the number of packets actually received, where the
   number of packets received includes any which are late or duplicates.
   Liu Zhiyou (EECS)                        Notes on RTCP                             Nov 02, 2011   4 / 12
RR packet in RTCP standard
                  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
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        header   |V=2|P|    RC   |   PT=RR=201   |              length           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                     SSRC of packet sender                     |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_1 (SSRC of first source)                 |
        block    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          1      | fraction lost |       cumulative number of packets lost        |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |           extended highest sequence number received           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                      interarrival jitter                      |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                         last SR (LSR)                         |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                   delay since last SR (DLSR)                  |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_2 (SSRC of second source)                |
        block2   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   fraction lost: The fraction of RTP data packets from source lost
   since the previous SR or RR packet was sent. Defined to be packets
   lost divided by packets expected.
   Liu Zhiyou (EECS)                        Notes on RTCP                             Nov 02, 2011   5 / 12
RR packet in RTCP standard
                  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
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        header   |V=2|P|    RC   |   PT=RR=201   |              length           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                     SSRC of packet sender                     |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_1 (SSRC of first source)                 |
        block    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          1      | fraction lost |       cumulative number of packets lost        |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |           extended highest sequence number received           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                      interarrival jitter                      |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                         last SR (LSR)                         |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                   delay since last SR (DLSR)                  |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_2 (SSRC of second source)                |
        block2   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   cumulative packets lost: The total number of RTP data packets
   from source SSRC n that have been lost since the beginning of
   reception.
   Liu Zhiyou (EECS)                        Notes on RTCP                             Nov 02, 2011   6 / 12
RR packet in RTCP standard
                  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
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        header   |V=2|P|    RC   |   PT=RR=201   |              length           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                     SSRC of packet sender                     |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_1 (SSRC of first source)                 |
        block    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          1      | fraction lost |       cumulative number of packets lost        |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |           extended highest sequence number received           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                      interarrival jitter                      |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                         last SR (LSR)                         |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                   delay since last SR (DLSR)                  |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_2 (SSRC of second source)                |
        block2   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   interarrival jitter: An estimate of the statistical variance of the RTP
   data packet interarrival time.
   Liu Zhiyou (EECS)                        Notes on RTCP                             Nov 02, 2011   7 / 12
RR packet in RTCP standard
                  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
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        header   |V=2|P|    RC   |   PT=RR=201   |              length           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                     SSRC of packet sender                     |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_1 (SSRC of first source)                 |
        block    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
          1      | fraction lost |       cumulative number of packets lost        |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |           extended highest sequence number received           |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                      interarrival jitter                      |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                         last SR (LSR)                         |
                 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 |                   delay since last SR (DLSR)                  |
                 +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        report   |                 SSRC_2 (SSRC of second source)                |
        block2   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   delay since last SR (DLSR): The delay between receiving the last
   SR packet from source SSRC n and sending this reception report
   block.
   Liu Zhiyou (EECS)                        Notes on RTCP                             Nov 02, 2011   8 / 12
SR packet in RTCP standard
                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
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
        header |V=2|P|    RC   |   PT=SR=200   |             length            |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                         SSRC of sender                        |
               +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
        sender |              NTP timestamp, most significant word              |
        info   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |             NTP timestamp, least significant word             |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                         RTP timestamp                         |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                     sender’s packet count                     |
               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               |                      sender’s octet count                     |
               +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   sender’s packet count: The total number of RTP data packets
   transmitted by the sender since starting transmission up until the time
   this SR packet was generated.
   Liu Zhiyou (EECS)                      Notes on RTCP                             Nov 02, 2011   9 / 12
Handling RR packet in Darwin
   RR packets are handling by modules registered as
   QTSS RTCPProcess Role
   Registered functions will be called by params
   QTSS RTPStreamObject, QTSS ClientSessionObject and
   RTCPPacketData.
   QTSS RTPStreamObject and QTSS ClientSessionObject contain
   useful attribution, but do not work correctly?
   Darwin already had a default-enable module called FlowControl
   designed to adjust quality based on RR packets, but looks like a
   wrong implement.
   UInt16 thePercentLoss = (Uint16)faction / 256;
    Liu Zhiyou (EECS)         Notes on RTCP               Nov 02, 2011   10 / 12
Current progress
    Directly handle the data of RR packet in a QTSS RTCPProcess Role
    module.
    Display the data of RR packet in hex
    Format and display infomation about packet loss in RR.
    i,e, We can get packet-loss infomation by RR packet in RTCP.
    Experiment is done in lo by using netem to emulate a packet-loss
    network.
    Liu Zhiyou (EECS)          Notes on RTCP              Nov 02, 2011   11 / 12
Further Work
   Get more infomation on RTCP, specailly bandwidth??
   Check RTCP reporting packet loss in a real network.
   Right or wrong? Read related code in Darwin further.
   Liu Zhiyou (EECS)          Notes on RTCP               Nov 02, 2011   12 / 12