【轉】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通用頭部如下

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM