轉自:https://blog.csdn.net/momo0853/article/details/88051312#RTPFBTransport_layer_FB_messagesNACKTransportFeedback_245dom
文章目錄ide
RTCP
SR(Sender Report RTCP Packet)
RR(Receiver Report RTCP Packet)
SDES(Source Description RTCP Packet)
BYE(Goodbye RTCP Packet)
APP(Application-Defined RTCP Packet)
RTPFB(Transport layer FB messages)[NACK/TransportFeedback]
NACK
TransportFeedback
PSFB(Payload-specific FB messages)[PLI/FIR/REMB]
PLI
FIR
REMB工具
RTCP
涉及到的相關RFC文檔ui
一、RFC3550,SR/RR/BYE/APP/SDES
二、RFC4585,RTPFB/PSFB
三、draft-holmer-rmcat-transport-wide-cc-extensions-01,RTPFB擴展TransportFeedbackspa
RTCP通用頭部以下.net
V,RTCP的版本號,必定等於2
P,是否存在填充信息,包的最後一個byte用於存儲填充數據的長度,也就是padding_size_ = payload_[payload_size_ - 1]
RC,ReportBlock的個數
PT,RTCP的負載類型
lenght,頭部的長度,不包括通用頭部,長度等於4*lenght3d
SR(Sender Report RTCP Packet)視頻
發送端經過發送SR包告訴接收端發送端的信息,SR包分爲三部分:頭部header,發送者信息senderInfo和反饋塊ReportBlock。若是發送端也做爲接收端,那麼纔會存在ReportBlock,當存在多個碼流的時候就會反饋多個ReportBlock。SR包的負載類型是200。blog
SSRC 同步源
64位的NTP,NTP timestamp, most significant word前面32位是秒, least significant word後面32位是分
RTP timestamp
sender’s packet count 到發送此SR包時已經發送包的個數
sender’s octet count 到發送此SR包時已經發送包的大小(Byte)ip
fraction lost丟包率,到發送此ReportBlock時丟包率計算
cumulative number of packets lost總共丟失的包個數
extended highest sequence number received 收到的包序號,前16位表示第幾圈,後16位表示當前的序號
interarrival jitter包之間的平均間隔
Last SR上一個SR包的時間戳
Delay since last SR距離上一個LSR的時間間隔
RR(Receiver Report RTCP Packet)
接收端經過RR包反饋接收端的接收狀況,RR包分爲兩個部分:頭部header和反饋塊ReportBlock。參考SR包,RR包的負載類型是201。
SDES(Source Description RTCP Packet)
發送源信息描述,能夠用於描述發送端的名字,郵箱,電話等信息,SDES的負載類型是202。SDES分爲兩部分:頭部header和描述信息chunk。chunk內須要包含一個SSRC和至少一個SEDS item,每一個item用於描述不一樣的信息。item中的lenght字段是用於表示後面描述信息的長度(byte)
BYE(Goodbye RTCP Packet)
發送端主動中止發送,最後會發送一個BYE包,有可能會說明離開信息(reason for leaving)
APP(Application-Defined RTCP Packet)
用於描述用戶信息的,這個包在WebRTC中並無看到發送。
RTPFB(Transport layer FB messages)[NACK/TransportFeedback]
負載類型是205,WebRTC對應的代碼是rtpfb.cc。傳輸層反饋信息目前只有NACK,用於反饋接接收端未收到什麼包。
通用頭部信息,前面四個Byte的信息和普通的RTCP頭是同樣的,看前面就行了,這裏FMT用於區分FCI的類型,它會加上SSRC of packet sender發送者的SSRC和SSRC of media source反饋者的SSRC。
NACK
FMT是1,WebRTC對應的代碼是nack.cc。
NACK的FCI個數以下,其中PID(Packet ID)是第一個丟失的序號,BLP(bitmask of following lost packets)是繼第一個序號以後的16個包的丟失狀況,當丟失以後,此二進制位就會被mark爲1。例如PID等於666,若是668和692也丟失了,那麼BLP等於100010。當後續丟失的包序號大於第一個丟失的包序號16以上就須要從新使用一個新的FCI反饋包表示。NACK包能夠存在多個FCI。
TransportFeedback
FMT是15,WebRTC對應的代碼是transport_feedback.cc。
這個是WebRTC自頂的一個FB,用於反饋接收端收到的包和間隔。這些信息是給發送端用於擁塞檢測。
PSFB(Payload-specific FB messages)[PLI/FIR/REMB]
負載類型是205,WebRTC對應的代碼是psfb.cc。
PLI
FMT是1,WebRTC對應的代碼是pli.cc。
向發送方請求關鍵幀。
FIR
FMT是4,WebRTC對應的代碼是fir.cc。
向發送方請求關鍵幀。和PLI不一樣的地方是,它會指明向那個SSRC請求關鍵幀,而且是第幾回請求。當發送端存在多個視頻發送源的時候,接收端就須要指明向那個源請求關鍵幀。
REMB
FMT是15,WebRTC對應的代碼是remb.cc。
向發送方發送接收端估算的最大帶寬。這個是WebRTC自定義的一個FB類型。
Num SSRC指明SSRC的個數,帶寬用一個uint64_t類型表示,可是傳輸的時候須要把64位封裝到24位裏面。WebRTC的作法是當碼率大於18位能表示最大數0x3FFF時,只能用指數表示帶寬了。