可將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 | 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 解析拢切。
參考資料
- RFC3550蒂萎,SR/RR/BYE/APP/SDES
- RFC4585,RTPFB/PSFB
- draft-holmer-rmcat-transport-wide-cc-extensions-01淮椰,RTPFB擴展TransportFeedback
- WebRTC之RTCP
- WebRTC研究:Transport-cc之RTP及RTCP