【轉】WebRTC之RTCP

轉自: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

  • 發送端信息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)ip

  • 反饋塊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的時間間隔

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)

  • CNAME(Canonical End-Point Identifier SDES Item)
    負載類型1,用於描述規範點標識符,長度lenght(指後面的長度),具體信息user and domain name

  • NAME(User Name SDES Item)
    負載類型等於2,用於描述用戶名字

  • EMAIL: Electronic Mail Address SDES Item
    負載類型等於3,用於描述郵箱信息

  • PHONE: Phone Number SDES Item
    負載類型等於4,用於描述電話號碼

  • LOC: Geographic User Location SDES Item
    負載類型等於5,用於描述用戶位置信息

  • TOOL: Application or Tool Name SDES Item
    負載類型等於6,用於描述應用程序或者工具名字

  • NOTE: Notice/Status SDES Item
    負載類型等於7,用於描述用戶狀態的信息

  • PRIV: Private Extensions SDES Item
    負載類型等於8,用於定義用戶私有的擴展信息

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時,只能用指數表示帶寬了。

相關文章
相關標籤/搜索