webrtc RTP控制協(xié)議-RTCP

RTP控制協(xié)議-RTCP


RTCP-SR rfc3550

/*
        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                  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct RtcpHeader
{
  uint8_t version : 2;
  uint8_t padding : 1;
  uint8_t count : 5;
  uint8_t packetType;
  uint16_t length;
  
  uint32_t ssrc;
  uint32_t ntpSec;
  uint32_t ntpFrac;
  uint32_t rtpTs;
  uint32_t packetCount;
  uint32_t octetCount;

/* 變長,根據(jù)count決定 */
  struct reportHeader report;
};

/* Struct for RTCP report block*/
struct reportHeader
{
  uint32_t ssrc;
  uint8_t  fractionLost; // 丟包率
  uint32_t totalLost : 24;  // 一共丟包的個數(shù)
  uint32_t lastSeq;  // sequenceNumber
  uint32_t jitter;  // RTP包到達(dá)時間間隔的統(tǒng)計方差
  uint32_t lsr;  // 上一次收到SR的時間戳
  uint32_t dlsr;  // 上次從收到SR包到發(fā)送本報告的時間差
};
  • version: 2
  • padding: 置為1表示RTP頭有填充背伴。數(shù)據(jù)的最后一個字節(jié)表示填充了幾個字節(jié)肯夏,包含這個字節(jié)本身
  • count:reportHeader的個數(shù)
  • packetType: 200,SR(Sender Report)桥状,發(fā)送者報告:包含發(fā)送者的發(fā)送、接收統(tǒng)計
  • length: 指協(xié)議頭和數(shù)據(jù)的長度硝清,單位為字節(jié)辅斟。數(shù)據(jù)長度length-4
  • ssrc:sdp中的ssrc一致
  • ntpSec: most significant word,高位時間戳芦拿,ntpFrac每到最大值就清零士飒,ntpSec加1,
  • ntpFrac: least significant word蔗崎,低位時間戳酵幕,單位是微秒。網(wǎng)絡(luò)時間戳缓苛,用于同步不同源
  • rtpTs: 相對時間戳芳撒,與rtp一致
  • packetCount: 一共發(fā)送了多少個包
  • octetCount: 一共發(fā)送了多少字節(jié)
  • report.ssrc: 信息所屬的ssrc
  • report.fractionLost: 丟包率
  • report.totalLost: 一共丟包的個數(shù)。遲到包不算丟包未桥,重傳有可能導(dǎo)致負(fù)數(shù)
  • report.lastSeq: rtp頭的sequenceNumber是16bit笔刹,會循環(huán)從0開始。此處低位16bit與rtp一致冬耿,高位表示循環(huán)次數(shù)
  • report.jitter: RTP包到達(dá)時間間隔的統(tǒng)計方差
  • report.lsr: 上一次收到SR的時間戳舌菜,lsr = (ntpSec<<16) + (ntpFrac>>16)
  • report.dlsr: 上次從收到SR包到發(fā)送本報告的時間差

RTCP-RR rfc3550

/*
        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                  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct RtcpHeader
{
  uint8_t version : 2;
  uint8_t padding : 1;
  uint8_t count : 5;
  uint8_t packetType;
  uint16_t length;
  
  uint32_t ssrc;
  
/* 變長,根據(jù)rtcp.count決定 */
  struct reportHeader report;
};

/* Struct for RTCP report block*/
struct reportHeader
{
  uint32_t ssrc;
  uint8_t  fractionLost;
  uint32_t totalLost : 24;
  uint32_t lastSeq;
  uint32_t jitter;
  uint32_t lsr;
  uint32_t dlsr;
};
  • packetType: 201淆党,RR(Receiver Report)酷师,接收者報告:接受者的接收統(tǒng)計
  • 其他字段意思參考RTCP-SR

RTCP-SDES rfc3550

/*
        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                          |
       |                              ...                              |
       +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
*/
struct RtcpHeader
{
  uint8_t version : 2;
  uint8_t padding : 1;
  uint8_t count : 5;
  uint8_t packetType;
  uint16_t length;
  
/* 變長讶凉,根據(jù)rtcp.count決定 */
  uint32_t ssrc;
  struct SdesItem sdes;
};

struct SdesItem
{
  uint8_t type;
  uint8_t length;
  char value[N]; // N=length
};
enum SdesType
{
  END = 0,
  CNAME,  // cname與SSRC對應(yīng),cname為源的唯一表示山孔,詳情參考sdp描述
  NAME,     // 用戶名
  EMAIL,    // email地址
  PHONE,  // 電話號碼
  LOC,       // 位置
  TOOL,    // 工具
  NOTE,    // 備注
  PRIV      // 私有擴(kuò)展
};
  • version: 2
  • padding: 置為1表示RTP頭有填充懂讯。數(shù)據(jù)的最后一個字節(jié)表示填充了幾個字節(jié),包含這個字節(jié)本身
  • count:ssrcsdes的個數(shù)
  • packetType: 202台颠,SDES(SourceDescription)褐望,數(shù)據(jù)源的信息
  • length: 指協(xié)議頭和數(shù)據(jù)的長度,單位為字節(jié)串前。數(shù)據(jù)長度length-4
  • ssrc:sdp中的ssrc一致
  • sdes.type: 取值SdesType
  • sdes.length: value長度
  • sdes.value:

RTCP-BYE rfc3550

/*
       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            ...
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct RtcpHeader
{
  uint8_t version : 2;
  uint8_t padding : 1;
  uint8_t count : 5;
  uint8_t packetType;
  uint16_t length;
  
/* 變長瘫里,根據(jù)count決定有多少個ssrc */
  uint32_t ssrc;
  
/* 可選 */
  uint8_t length;
  uint8_t reason[N]; // N=length
};
  • version: 2
  • padding: 置為1表示RTP頭有填充。數(shù)據(jù)的最后一個字節(jié)表示填充了幾個字節(jié)荡碾,包含這個字節(jié)本身
  • count:ssrc的個數(shù)
  • packetType: 203谨读,BYE(goodbye),結(jié)束RTP傳輸
  • length: 指協(xié)議頭和數(shù)據(jù)的長度坛吁,單位為字節(jié)劳殖。數(shù)據(jù)長度length-4
  • ssrc:sdp中的ssrc一致
  • length: reason的長度
  • reason: 退出原因,可選

RTCP-APP rfc3550

/*
    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                ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
struct RtcpHeader
{
  uint8_t version : 2;
  uint8_t padding : 1;
  uint8_t count : 5;
  uint8_t packetType;
  uint16_t length;

  uint32_t ssrc;
  
/* 變長拨脉,根據(jù)count決定 */
  uint32_t name;
  struct AppData data;
};

/* 消息格式可以自定義哆姻,我這里只是自己列舉的一個數(shù)據(jù)格式類型 */
struct AppData
{
  uint8_t type;
  uint8_t length;
  char value[N]; // N=length
};

  • version: 2
  • padding: 置為1表示RTP頭有填充。數(shù)據(jù)的最后一個字節(jié)表示填充了幾個字節(jié)玫膀,包含這個字節(jié)本身
  • count:namedata的個數(shù)
  • packetType: 204矛缨,APP(application),應(yīng)用層定義的傳輸控制類型
  • length: 指協(xié)議頭和數(shù)據(jù)的長度帖旨,單位為字節(jié)箕昭。數(shù)據(jù)長度length-4
  • ssrc:sdp中的ssrc一致
  • name: 自定義消息名
  • data: 自定義數(shù)據(jù)

RTCP-RTPFB rfc4585

/*
    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)                 :
   :                                                               :
*/
struct RtcpHeader
{
  uint8_t version : 2;
  uint8_t padding : 1;
  uint8_t count : 5;
  uint8_t packetType;
  uint16_t length;
  
  uint32_t senderSsrc;
  uint32_t mediaSsrc;

/* FCI字段*/
};
enum FeedbackRtp
{
  NACK   = 1,  // Generic nack。請求丟包重傳
  TMMBR  = 3,  // Temp, max media stream Bitrate Request解阅。最大媒體流請求
  TMMBN  = 4,  // Temp, max media stream Bitrate Notification盟广。最大媒體流響應(yīng)
  SR_REQ = 5,
  RAMS   = 6,
  TLLEI  = 7,
  ECN    = 8,
  PS     = 9,
  TCC    = 15, // transport-cc
  EXT    = 31
};
  • version: 2
  • padding: 置為1表示RTP頭有填充。數(shù)據(jù)的最后一個字節(jié)表示填充了幾個字節(jié)瓮钥,包含這個字節(jié)本身
  • count: 取值為FeedbackRtp
  • packetType: 205,RTPFB(Generic RTP Feedback)烹吵,RTP反饋包碉熄,傳輸?shù)目刂?/li>
  • length: 指協(xié)議頭和數(shù)據(jù)的長度,單位為字節(jié)肋拔。數(shù)據(jù)長度length-4
  • senderSsrc: 數(shù)據(jù)包發(fā)送方的ssrc
  • mediaSsrc: 媒體源的ssrc
  FCI字段锈津,NACK消息的格式
    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               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  PID: 丟包的RTP sequenceNumber
  BLP: 繼第一個序號之后的16個包的丟失情況,當(dāng)丟失之后置為1

RTCP-PSFB rfc4585

圖像和流媒體 -- I 幀,B幀,P幀,IDR幀的區(qū)別

/*
    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)                 :
   :                                                               :
*/
struct SDESHeader
{
  uint8_t version : 2;
  uint8_t padding : 1;
  uint8_t count : 5;
  uint8_t packetType;
  uint16_t length;
  
  uint32_t senderSsrc;
  uint32_t mediaSsrc;

/* FCI字段*/
};

enum FeedbackPs
{
  PLI   = 1,  // Picture Loss Indication凉蜂,請求i幀琼梆,F(xiàn)CI字段中必須僅包含一個PLI
  SLI   = 2,  // Slice Loss Indication性誉,請求一個slice包
  RPSI  = 3,  // Reference Picture Selection Indication。請求b幀
  FIR   = 4, // Full Intra Request Command茎杂。請求一個idr幀
  TSTR  = 5,  // Temporal-Spatial Trade-off Request错览。空間換時間或時間換空間的請求
  TSTN  = 6,  // Temporal-Spatial Trade-off Notification煌往∏悴福空間換時間或時間換空間的響應(yīng)
  VBCM  = 7,
  PSLEI = 8,
  ROI   = 9,
  AFB   = 15,
  EXT   = 31
};

  • version: 2
  • padding: 置為1表示RTP頭有填充。數(shù)據(jù)的最后一個字節(jié)表示填充了幾個字節(jié)刽脖,包含這個字節(jié)本身
  • count: 取值為FeedbackPs
  • packetType: 206羞海,PSFB(Payload-specific Feedback),payload反饋包曲管,編解碼的控制
  • length: 指協(xié)議頭和數(shù)據(jù)的長度却邓,單位為字節(jié)。數(shù)據(jù)長度length-4
  • senderSsrc: 數(shù)據(jù)包發(fā)送方的ssrc
  • mediaSsrc: 媒體源的ssrc
  FCI字段院水,SLI消息的格式
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |            First        |        Number           | PictureID |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  First: 第一個丟失的宏塊的宏塊地址
  Number: 丟失的宏塊數(shù)
  PictureID: 編解碼器特定標(biāo)識符的六個最低有效位
  
  FCI字段腊徙,RPSI消息的格式
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      PB       |0| Payload Type|    Native RPSI bit string     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   defined per codec          ...                | Padding (0) |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

DTLS-SRTP


SRTP與RTP包的主要區(qū)別是payload數(shù)據(jù)加密、SRTP MKI(主密鑰標(biāo)由密鑰管理協(xié)議決定)衙耕、認(rèn)證標(biāo)簽

  • payload加密 加密后的數(shù)據(jù)依然保持對齊
  • SRTP MKI webrtc基本沒用昧穿,為0
  • 認(rèn)證標(biāo)簽 rtp頭和加密payload進(jìn)行哈希計算得來的

DTLS握手

  • 第一次客戶端發(fā)送ClientHello
  • 第二次服務(wù)端發(fā)送ServerHello,發(fā)送服務(wù)端證書橙喘,服務(wù)端key时鸵,請求客戶端證書,發(fā)送ServerHelloDone
  • 第三次客戶端發(fā)送客戶端證書厅瞎,客戶端key饰潜,驗證證書,發(fā)送加密套件和簸,發(fā)送Finished
  • 第四次服務(wù)端發(fā)送協(xié)商好的加密套件彭雾,發(fā)送Finished

數(shù)據(jù)傳輸

DTLS進(jìn)行握手交換得到key、加密套件锁保。然后在使用RTP進(jìn)行傳輸薯酝,僅對payload數(shù)據(jù)進(jìn)行加密

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市爽柒,隨后出現(xiàn)的幾起案子吴菠,更是在濱河造成了極大的恐慌,老刑警劉巖浩村,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件做葵,死亡現(xiàn)場離奇詭異,居然都是意外死亡心墅,警方通過查閱死者的電腦和手機(jī)酿矢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門榨乎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瘫筐,你說我怎么就攤上這事蜜暑。” “怎么了严肪?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵史煎,是天一觀的道長。 經(jīng)常有香客問我驳糯,道長篇梭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任酝枢,我火速辦了婚禮恬偷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帘睦。我一直安慰自己袍患,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布竣付。 她就那樣靜靜地躺著诡延,像睡著了一般。 火紅的嫁衣襯著肌膚如雪古胆。 梳的紋絲不亂的頭發(fā)上肆良,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機(jī)與錄音逸绎,去河邊找鬼惹恃。 笑死,一個胖子當(dāng)著我的面吹牛棺牧,可吹牛的內(nèi)容都是我干的巫糙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颊乘,長吁一口氣:“原來是場噩夢啊……” “哼参淹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乏悄,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤承二,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纲爸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡妆够,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年识啦,在試婚紗的時候發(fā)現(xiàn)自己被綠了负蚊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡颓哮,死狀恐怖家妆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情冕茅,我是刑警寧澤伤极,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站姨伤,受9級特大地震影響哨坪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乍楚,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一当编、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧徒溪,春花似錦忿偷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渠概,卻和暖如春茶凳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背高氮。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工慧妄, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剪芍。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓塞淹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親罪裹。 傳聞我的和親對象是個殘疾皇子饱普,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容