WebRTC RTCP 解析

可將RCTP報文分為以下幾個部分:

序號 名稱 比特位 必選 說明
1 固定報頭 4*8 包括標志位:V、P、RC欲诺、PT佳遣、length。
2 負載數(shù)據(jù) len*8 其中 len >= 0荠卷。
3 填充數(shù)據(jù) len*8 其中 len >= 0,自定義數(shù)據(jù)。

固定報頭

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|    RC   |      PT       |             length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
序號 標記 比特位 名稱 說明
1 V 2 版本號 目前版本值固定為2 输虱。
2 P 1 填充標志 若值為1,則在報文尾部填充
若干大于零的額外字節(jié)脂凶。
3 RC 5 ReportBlock 計數(shù) ReportBlock的個數(shù)宪睹。
4 PT 8 負載類型 SR:200,RR:201蚕钦,SDES:202亭病,
BYE:203,APP:204嘶居,RTPFB:205罪帖,PSFB:206。
5 length 16 負載長度邮屁。 負載真實長度=4*length胸蛛。
  • 固定報頭大小為4字節(jié),所以一幀合法的RTCP報文最少包含4個字節(jié)的數(shù)據(jù)樱报。

負載數(shù)據(jù)

序號 標記 名稱 說明
1 SR Sender Report 200 發(fā)送端通過發(fā)送SR包告訴接收端發(fā)送端的信息 葬项。
2 RR Receiver Report 201 接收端通過RR包反饋接收端的接收情況 。
3 SDES Source Description 202 發(fā)送源信息描述 迹蛤。
4 BYE Bye 203 發(fā)送端主動停止發(fā)送民珍。
5 APP Application 204 用戶信息描述 。
6 RTPFB Transport layer FB messages 205 丟包重傳盗飒、擁塞檢測 嚷量。
7 PSFB Payload-specific FB messages 206 請求關(guān)鍵幀、碼率估算 逆趣。

SR

        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                     |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
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)                |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  2    :                               ...                             :
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       |                  profile-specific extensions                  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • SR分為兩部分:發(fā)送者信息SenderInfo和反饋塊ReportBlock蝶溶。
  • 若發(fā)送端也作為接收端,則存在ReportBlock。
  • 若存在多個碼流抖所,則反饋多個ReportBlock梨州。
  • ReportBlock最大個數(shù)為31。
SenderInfo
序號 名稱 比特位 說明
1 同步信源(SSRC)標識符 4*8 隨機生成的字符串田轧,標記一路數(shù)據(jù)來源暴匠。
2 NTP timestamp, most significant word 4*8 單位是秒,64位NTP的第一部分傻粘。
3 NTP timestamp, least significant word 4*8 單位是分每窖,64位NTP的第二部分。
4 RTP timestamp 4*8 時間戳弦悉。
5 sender’s packet count 4*8 到發(fā)送此SR包時已經(jīng)發(fā)送包的個數(shù)窒典。
6 sender’s octet count 4*8 到發(fā)送此SR包時已經(jīng)發(fā)送包的大小(Byte)。
ReportBlock
  • 參考下面RR包定義

RR(Receiver Report RTCP Packet)

        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)                |
block  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  2    :                               ...                             :
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
       |                  profile-specific extensions                  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
序號 名稱 比特位 說明
1 同步信源(SSRC)標識符 4*8 隨機生成的字符串稽莉,標記一路數(shù)據(jù)來源瀑志。
2 fraction lost 8 丟包率,到發(fā)送此ReportBlock時丟包率計算肩祥。
3 cumulative number of packets lost 3*8 報文丟失累積總數(shù)后室。
4 extended highest sequence number received 4*8 收到的包序號,前16位表示第幾圈混狠,后16位表示當前的序號岸霹。
5 interarrival jitter 4*8 包之間的平均間隔。
6 Last SR 4*8 上一個SR包的時間戳将饺。
6 Delay since last SR 4*8 距離上一個LSR的時間間隔贡避。
  • Loss fraction 計算:loss fraction=lost rate x 256。例:丟包率為25%予弧,該字段為25%*256=64刮吧。
  • Last SR:SR報文里64位NTP時間戳中的32位bit的時間戳。如果沒有收到SR報文掖蛤,該字段為0杀捻。
  • DLSR::接收到SR報文的時刻與發(fā)送該RR報文時刻的時間差值,單位時間是1/65536 seconds. 如果沒有收到SR報文蚓庭,該字段為0.
  • RTT: Round-Trip Time致讥,發(fā)送者計算的發(fā)送來回時間。

發(fā)送者可以通過RR報文中的LSR和DLSR來計算RTT器赞。
第一步:發(fā)送者用接收到RR報文的當前時間-RR報文的LSR垢袱,得到發(fā)送SR和接收到RR所花費的網(wǎng)絡(luò)延時。
第二步: (接收到RR報文的當前時間-RR報文的LSR) - RR中的DLSR港柜,也就是去除了在RTP接收者方本地的SR接收和RR發(fā)送的延時请契,這樣就得到了RTT。
即:RTT = 接收到RR報文的當前時間-RR報文的LSR - RR中的DLSR。

SDES

        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|    SC   |  PT=SDES=202  |             length            |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
chunk  |                          SSRC/CSRC_1                          |
  1    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                           SDES items                          |
       |                              ...                              |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
chunk  |                          SSRC/CSRC_2                          |
  2    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                           SDES items                          |
       |                              ...                              |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
序號 名稱 比特位 說明
1 塊名 8 塊名:CNAME爽锥、NAME涌韩、EMAIL、PHONE救恨、LOC贸辈、TOOL释树、NOTE肠槽、PRIV。
2 length 8 用于表示后面描述信息的長度奢啥。
1 描述信息 length*8 描述信息秸仙。
  • 發(fā)送源信息描述,可以用于描述發(fā)送端的名字桩盲、郵箱寂纪、電話等信息。
  • chunk內(nèi)需要包含一個SSRC和至少一個SEDS item赌结,每個item用于描述不同的信息捞蛋。
// SDES items
// Canonical End-Point Identifier SDES Item (CNAME)
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    CNAME=1    |     length    | user and domain name        ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
序號 名稱 類型 比特位 說明
1 CNAME 1 2 * 8+length*8 規(guī)范點標識符。
2 NAME 2 2 * 8+length*8 用戶名字柬姚。
3 EMAIL 3 2 * 8+length*8 郵箱拟杉。
4 PHONE 4 2 * 8+length*8 電話號碼。
5 LOC 5 2 * 8+length*8 用戶位置信息(geographic location of site)量承。
6 TOOL 6 2 * 8+length*8 應(yīng)用程序或者工具名字搬设。
7 NOTE 7 2 * 8+length*8 用戶狀態(tài)的信息。
8 PRIV 8 2 * 8+length*8 私有擴展信息撕捍。

BYE(Goodbye RTCP Packet)

       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|    SC   |   PT=BYE=203  |             length            |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                           SSRC/CSRC                           |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      :                              ...                              :
      +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
(opt) |     length    |               reason for leaving            ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 發(fā)送端主動停止發(fā)送拿穴,最后會發(fā)送一個BYE包,有可能會說明離開信息(reason for leaving)

APP(Application-Defined RTCP Packet)

    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| subtype |   PT=APP=204  |             length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           SSRC/CSRC                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          name (ASCII)                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                   application-dependent data                ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 用于描述用戶信息的忧风,這個包在WebRTC中并沒有看到發(fā)送默色。

RTPFB(Transport layer FB messages)[NACK/TransportFeedback]

    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   |       PT      |          length               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  SSRC of packet sender                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                  SSRC of media source                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   :            Feedback Control Information (FCI)                 :
   :                                                               :
  • SSRC of packet sender:發(fā)送者的SSRC。
  • SSRC of media source:反饋者的SSRC狮腿。
NACK
  // Generic NACK (RFC 4585).
  //
  // FCI:
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            PID                |             BLP               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
序號 名稱 比特位 說明
1 PID 16 Packet ID腿宰,第一個丟失的序號。
2 BLP 16 bitmask of following lost packets蚤霞,
繼第一個序號之后的16個包的丟失情況酗失。
  • 若FMT為1,別表示NACK請求昧绣。
  • 用于反饋接接收端未收到什么包规肴。
  • BLP:若丟包,則此二進制位就會被置為1。例如PID等于666拖刃,如果668和692也丟失了删壮,那么BLP等于100010。當后續(xù)丟失的包序號大于第一個丟失的包序號16以上就需要重新使用一個新的FCI反饋包表示兑牡。
  • NACK包可以存在多個FCI央碟。
TransportSequenceNumber

在理解TransportFeedback之前需要先了解TransportSequenceNumber概念。

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  ID   | L=3   |transport-wide sequence number |T|  seq count  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|seq count cont.|
+-+-+-+-+-+-+-+-+
  • TransportSequenceNumber屬于RTP協(xié)議中的擴展報頭部分均函,關(guān)于擴展報頭描述可參考WebRTC RTP 解析亿虽。
  • 在WebRTC中,若一個連接同時存在多路視頻流數(shù)據(jù)源苞也,則每路視頻流的序列號在各自時間軸上分別單調(diào)遞增洛勉;而進行帶寬估計時計算的是整個鏈路的情況,所以在進入平滑發(fā)送模塊(pacing\packet_router.cc)后如迟,會重新打上全局序列號收毫,多路視頻流在同一個時間軸上序列號單調(diào)遞增,這個序列號稱之為TransportSequenceNumber殷勘。
TransportFeedback
    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=205     |           length              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                     SSRC of packet sender                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      SSRC of media source                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      base sequence number     |      packet status count      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                 reference time                | fb pkt. count |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          packet chunk         |         packet chunk          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   .                                                               .
   .                                                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         packet chunk          |  recv delta   |  recv delta   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   .                                                               .
   .                                                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |           recv delta          |  recv delta   | zero padding  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
序號 名稱 比特位 說明
1 base sequence number 16 第一個RTP包的transport sequence number此再。
2 packet status count 16 這個TransportFeedback包記錄了多少個RTP包信息。
3 reference time 24 以64ms為單位玲销,RTCP包記錄的RTP包到達
時間信息以這個reference time為基準進行計算输拇。
4 feedback packet count 8 計數(shù)發(fā)送的每個TransportFeedback包,
相當于RTCP包的序列號痒玩。
可用于檢測TransportFeedback包的丟包情況淳附。
5 packet chunk 16 記錄RTP包的到達狀態(tài),記錄的這些RTP包
transport sequence number通過base sequence number計算得到蠢古。
6 recv delta 8 對于"packet received"狀態(tài)的包奴曙,也就是收到的RTP包,
在recv delta列表中添加對應(yīng)的的到達時間間隔信息草讶,
用于記錄RTP包到達時間信息洽糟。通過前面的reference time
以及recv delta信息,我們就可以得到RTP包到達時間堕战。
  • 若FMT為15坤溃,則啟用TransportFeedback。
  • TransportFeedback是WebRTC自定義的嘱丢,用于反饋接收端收到的包和間隔薪介,這些信息是給發(fā)送端用于擁塞檢測。
  • packet status count:表示這個TransportFeedback包記錄了多少個RTP包信息越驻,這些RTP的transport sequence number以base sequence number為基準汁政,比如記錄的第一個RTP包的transport sequence number為base sequence number道偷,那么記錄的第二個RTP包transport sequence number為base sequence number+1。

PSFB(Payload-specific FB messages)[PLI/FIR/REMB]

 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   |       PT      |          length               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  SSRC of packet sender                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  SSRC of media source                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:            Feedback Control Information (FCI)                 :
:                                                               :
PLI
  • 若FMT為1记劈,則表示PLI請求勺鸦。
  • 向發(fā)送方請求關(guān)鍵幀。
FIR
   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
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                              SSRC                             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  | Seq nr.       |    Reserved = 0                               |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
序號 名稱 比特位 說明
1 SSRC 32 指定的媒體源SSRC目木。
2 Seq nr 8 序列號,標記第幾次FIR請求刽射。
3 Reserved 24 保留字段军拟。
  • 若FMT為4,則表示FIR請求柄冲。
  • 向發(fā)送方請求關(guān)鍵幀吻谋。
  • 和PLI不同忠蝗,它會指明向那個SSRC請求關(guān)鍵幀现横,并且是第幾次請求。當發(fā)送端存在多個視頻發(fā)送源的時候阁最,接收端就需要指明向哪個源請求關(guān)鍵幀戒祠。
REMB
     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            |
    +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
  0 |                  SSRC of packet sender                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4 |                       Unused = 0                              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8 |  Unique identifier 'R' 'E' 'M' 'B'                            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 12 |  Num SSRC     | BR Exp    |  BR Mantissa                      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 16 |   SSRC feedback                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    :  ...                               
序號 名稱 比特位 說明
1 SSRC 32 發(fā)送者SSRC。
2 Unused 32 未使用字段速种。
3 Unique identifier 32 標識符姜盈,必定是0x52454D42('R' 'E' 'M' 'B')。
4 Num SSRC 8 SSRC的個數(shù)配阵。
5 BR Exp 8 帶寬的指數(shù)次冪馏颂。
5 BR Mantissa 16 帶寬的底數(shù)。
  • 若FMT為15棋傍,則表示REMB請求救拉。
  • 向發(fā)送方發(fā)送接收端估算的最大帶寬。
  • 帶寬用一個uint64_t類型表示瘫拣,但是傳輸?shù)臅r候需要把64位封裝到24位里面亿絮,WebRTC的做法是當碼率大于18位能表示最大數(shù)0x3FFF時,用指數(shù)表示帶寬麸拄。

填充數(shù)據(jù)

  • 填充數(shù)據(jù)主要為了4字節(jié)對齊派昧,全為0即可。關(guān)于填充數(shù)據(jù)說明可參考WebRTC RTP 解析拢切。

參考資料

  1. RFC3550蒂萎,SR/RR/BYE/APP/SDES
  2. RFC4585,RTPFB/PSFB
  3. draft-holmer-rmcat-transport-wide-cc-extensions-01淮椰,RTPFB擴展TransportFeedback
  4. WebRTC之RTCP
  5. WebRTC研究:Transport-cc之RTP及RTCP
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末五慈,一起剝皮案震驚了整個濱河市帮毁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌豺撑,老刑警劉巖烈疚,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異聪轿,居然都是意外死亡爷肝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門陆错,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灯抛,“玉大人,你說我怎么就攤上這事音瓷《越溃” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵绳慎,是天一觀的道長纵竖。 經(jīng)常有香客問我,道長杏愤,這世上最難降的妖魔是什么靡砌? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮珊楼,結(jié)果婚禮上通殃,老公的妹妹穿的比我還像新娘。我一直安慰自己厕宗,他們只是感情好画舌,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著已慢,像睡著了一般曲聂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛇受,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天句葵,我揣著相機與錄音,去河邊找鬼兢仰。 笑死乍丈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的把将。 我是一名探鬼主播轻专,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼察蹲!你這毒婦竟也來了请垛?” 一聲冷哼從身側(cè)響起催训,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宗收,沒想到半個月后漫拭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡混稽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年采驻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匈勋。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡礼旅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洽洁,到底是詐尸還是另有隱情痘系,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布饿自,位于F島的核電站汰翠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏璃俗。R本人自食惡果不足惜奴璃,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望城豁。 院中可真熱鬧,春花似錦抄课、人聲如沸唱星。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽间聊。三九已至,卻和暖如春抵拘,著一層夾襖步出監(jiān)牢的瞬間哎榴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工僵蛛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尚蝌,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓充尉,卻偏偏與公主長得像飘言,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子驼侠,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344