天天看點

rtcp webrtc 接收_【轉】WebRTC之RTCP

轉自:https://blog.csdn.net/momo0853/article/details/88051312#RTPFBTransport_layer_FB_messagesNACKTransportFeedback_245

文章目錄

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文檔

1、RFC3550,SR/RR/BYE/APP/SDES

2、RFC4585,RTPFB/PSFB

3、draft-holmer-rmcat-transport-wide-cc-extensions-01,RTPFB擴充TransportFeedback

RTCP通用頭部如下

rtcp webrtc 接收_【轉】WebRTC之RTCP

V,RTCP的版本号,一定等于2

P,是否存在填充資訊,包的最後一個byte用于存儲填充資料的長度,也就是padding_size_ = payload_[payload_size_ - 1]

RC,ReportBlock的個數

PT,RTCP的負載類型

lenght,頭部的長度,不包括通用頭部,長度等于4*lenght

SR(Sender Report RTCP Packet)

發送端通過發送SR包告訴接收端發送端的資訊,SR包分為三部分:頭部header,發送者資訊senderInfo和回報塊ReportBlock。如果發送端也作為接收端,那麼才會存在ReportBlock,當存在多個碼流的時候就會回報多個ReportBlock。SR包的負載類型是200。

發送端資訊SenderInfo

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)

回報塊ReportBlock

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的時間間隔

rtcp webrtc 接收_【轉】WebRTC之RTCP

RR(Receiver Report RTCP Packet)

接收端通過RR包回報接收端的接收情況,RR包分為兩個部分:頭部header和回報塊ReportBlock。參考SR包,RR包的負載類型是201。

rtcp webrtc 接收_【轉】WebRTC之RTCP

SDES(Source Description RTCP Packet)

發送源資訊描述,可以用于描述發送端的名字,郵箱,電話等資訊,SDES的負載類型是202。SDES分為兩部分:頭部header和描述資訊chunk。chunk内需要包含一個SSRC和至少一個SEDS item,每個item用于描述不同的資訊。item中的lenght字段是用于表示後面描述資訊的長度(byte)

rtcp webrtc 接收_【轉】WebRTC之RTCP

CNAME(Canonical End-Point Identifier SDES Item)

負載類型1,用于描述規範點辨別符,長度lenght(指後面的長度),具體資訊user and domain name

rtcp webrtc 接收_【轉】WebRTC之RTCP

NAME(User Name SDES Item)

負載類型等于2,用于描述使用者名字

rtcp webrtc 接收_【轉】WebRTC之RTCP

EMAIL: Electronic Mail Address SDES Item

負載類型等于3,用于描述郵箱資訊

rtcp webrtc 接收_【轉】WebRTC之RTCP

PHONE: Phone Number SDES Item

負載類型等于4,用于描述電話号碼

rtcp webrtc 接收_【轉】WebRTC之RTCP

LOC: Geographic User Location SDES Item

負載類型等于5,用于描述使用者位置資訊

rtcp webrtc 接收_【轉】WebRTC之RTCP

TOOL: Application or Tool Name SDES Item

負載類型等于6,用于描述應用程式或者工具名字

rtcp webrtc 接收_【轉】WebRTC之RTCP

NOTE: Notice/Status SDES Item

負載類型等于7,用于描述使用者狀态的資訊

rtcp webrtc 接收_【轉】WebRTC之RTCP

PRIV: Private Extensions SDES Item

負載類型等于8,用于定義使用者私有的擴充資訊

rtcp webrtc 接收_【轉】WebRTC之RTCP

BYE(Goodbye RTCP Packet)

發送端主動停止發送,最後會發送一個BYE包,有可能會說明離開資訊(reason for leaving)

rtcp webrtc 接收_【轉】WebRTC之RTCP

APP(Application-Defined RTCP Packet)

用于描述使用者資訊的,這個包在WebRTC中并沒有看到發送。

rtcp webrtc 接收_【轉】WebRTC之RTCP

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。

rtcp webrtc 接收_【轉】WebRTC之RTCP

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。

rtcp webrtc 接收_【轉】WebRTC之RTCP

TransportFeedback

FMT是15,WebRTC對應的代碼是transport_feedback.cc。

這個是WebRTC自頂的一個FB,用于回報接收端收到的包和間隔。這些資訊是給發送端用于擁塞檢測。

rtcp webrtc 接收_【轉】WebRTC之RTCP

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請求關鍵幀,并且是第幾次請求。當發送端存在多個視訊發送源的時候,接收端就需要指明向那個源請求關鍵幀。

rtcp webrtc 接收_【轉】WebRTC之RTCP

REMB

FMT是15,WebRTC對應的代碼是remb.cc。

向發送方發送接收端估算的最大帶寬。這個是WebRTC自定義的一個FB類型。

Num SSRC指明SSRC的個數,帶寬用一個uint64_t類型表示,但是傳輸的時候需要把64位封裝到24位裡面。WebRTC的做法是當碼率大于18位能表示最大數0x3FFF時,隻能用指數表示帶寬了。

rtcp webrtc 接收_【轉】WebRTC之RTCP