mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-23 11:17:09 +08:00
完善rtcp的定义
This commit is contained in:
parent
29c8c9bf26
commit
37096f8ed0
@ -38,7 +38,7 @@ const char *psfbTypeToStr(PSFBType type) {
|
|||||||
#define SWITCH_CASE(key, value) case PSFBType::key : return #value "(" #key ")";
|
#define SWITCH_CASE(key, value) case PSFBType::key : return #value "(" #key ")";
|
||||||
PSFB_TYPE_MAP(SWITCH_CASE)
|
PSFB_TYPE_MAP(SWITCH_CASE)
|
||||||
#undef SWITCH_CASE
|
#undef SWITCH_CASE
|
||||||
default: return "unknown payload-specific fb message (rfc4585) type";
|
default: return "unknown payload-specific fb message fmt type";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,7 +385,7 @@ string SdesItem::dumpString() const{
|
|||||||
printer << "ssrc:" << ssrc << "\r\n";
|
printer << "ssrc:" << ssrc << "\r\n";
|
||||||
printer << "type:" << sdesTypeToStr((SdesType) type) << "\r\n";
|
printer << "type:" << sdesTypeToStr((SdesType) type) << "\r\n";
|
||||||
printer << "length:" << (int) length << "\r\n";
|
printer << "length:" << (int) length << "\r\n";
|
||||||
printer << "text:" << (length ? string(&text, length) : "") << "\r\n";
|
printer << "text:" << (length ? string(text, length) : "") << "\r\n";
|
||||||
return std::move(printer);
|
return std::move(printer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,7 +403,7 @@ std::shared_ptr<RtcpSdes> RtcpSdes::create(const std::initializer_list<string> &
|
|||||||
for (auto &text : item_text) {
|
for (auto &text : item_text) {
|
||||||
item_ptr->length = (0xFF & text.size());
|
item_ptr->length = (0xFF & text.size());
|
||||||
//确保赋值\0为RTCP_SDES_END
|
//确保赋值\0为RTCP_SDES_END
|
||||||
memcpy(&(item_ptr->text), text.data(), item_ptr->length + 1);
|
memcpy(item_ptr->text, text.data(), item_ptr->length + 1);
|
||||||
item_ptr = (SdesItem *) ((char *) item_ptr + item_ptr->totalBytes());
|
item_ptr = (SdesItem *) ((char *) item_ptr + item_ptr->totalBytes());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,7 +555,7 @@ void RtcpBye::net2Host(size_t size) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
#include "Util/onceToken.h"
|
#include "Util/onceToken.h"
|
||||||
|
|
||||||
static toolkit::onceToken token([](){
|
static toolkit::onceToken token([](){
|
||||||
|
@ -25,8 +25,7 @@ namespace mediakit {
|
|||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
#endif // defined(_WIN32)
|
#endif // defined(_WIN32)
|
||||||
|
|
||||||
//https://datatracker.ietf.org/doc/rfc3550
|
//http://www.networksorcery.com/enp/protocol/rtcp.htm
|
||||||
|
|
||||||
#define RTCP_PT_MAP(XX) \
|
#define RTCP_PT_MAP(XX) \
|
||||||
XX(RTCP_FIR, 192) \
|
XX(RTCP_FIR, 192) \
|
||||||
XX(RTCP_NACK, 193) \
|
XX(RTCP_NACK, 193) \
|
||||||
@ -44,6 +43,7 @@ namespace mediakit {
|
|||||||
XX(RTCP_RSI, 209) \
|
XX(RTCP_RSI, 209) \
|
||||||
XX(RTCP_TOKEN, 210)
|
XX(RTCP_TOKEN, 210)
|
||||||
|
|
||||||
|
//https://tools.ietf.org/html/rfc3550#section-6.5
|
||||||
#define SDES_TYPE_MAP(XX) \
|
#define SDES_TYPE_MAP(XX) \
|
||||||
XX(RTCP_SDES_END, 0) \
|
XX(RTCP_SDES_END, 0) \
|
||||||
XX(RTCP_SDES_CNAME, 1) \
|
XX(RTCP_SDES_CNAME, 1) \
|
||||||
@ -69,19 +69,49 @@ namespace mediakit {
|
|||||||
// 1: Picture Loss Indication (PLI)
|
// 1: Picture Loss Indication (PLI)
|
||||||
// 2: Slice Loss Indication (SLI)
|
// 2: Slice Loss Indication (SLI)
|
||||||
// 3: Reference Picture Selection Indication (RPSI)
|
// 3: Reference Picture Selection Indication (RPSI)
|
||||||
// 4-14: unassigned
|
// 4: FIR https://tools.ietf.org/html/rfc5104#section-4.3.1.1
|
||||||
// 15: Application layer FB (AFB) message
|
// 5: TSTR https://tools.ietf.org/html/rfc5104#section-4.3.2.1
|
||||||
|
// 6: TSTN https://tools.ietf.org/html/rfc5104#section-4.3.2.1
|
||||||
|
// 7: VBCM https://tools.ietf.org/html/rfc5104#section-4.3.4.1
|
||||||
|
// 8-14: unassigned
|
||||||
|
// 15: REMB / Application layer FB (AFB) message, https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03
|
||||||
// 16-30: unassigned
|
// 16-30: unassigned
|
||||||
// 31: reserved for future expansion of the sequence number space
|
// 31: reserved for future expansion of the sequence number space
|
||||||
|
|
||||||
#define PSFB_TYPE_MAP(XX) \
|
#define PSFB_TYPE_MAP(XX) \
|
||||||
XX(RTCP_PSFB_PLI, 1) \
|
XX(RTCP_PSFB_PLI, 1) \
|
||||||
XX(RTCP_PSFB_SLI, 2) \
|
XX(RTCP_PSFB_SLI, 2) \
|
||||||
XX(RTCP_PSFB_RPSI, 3) \
|
XX(RTCP_PSFB_RPSI, 3) \
|
||||||
XX(RTCP_PSFB_FIR, 4) \
|
XX(RTCP_PSFB_FIR, 4) \
|
||||||
XX(RTCP_PSFB_TSTR, 5)\
|
XX(RTCP_PSFB_TSTR, 5)\
|
||||||
|
XX(RTCP_PSFB_TSTN, 6)\
|
||||||
|
XX(RTCP_PSFB_VBCM, 7) \
|
||||||
XX(RTCP_PSFB_AFB, 15)
|
XX(RTCP_PSFB_AFB, 15)
|
||||||
|
|
||||||
|
//https://tools.ietf.org/html/rfc4585#section-6.2
|
||||||
|
//6.2. Transport Layer Feedback Messages
|
||||||
|
//
|
||||||
|
// Transport layer FB messages are identified by the value RTPFB as RTCP
|
||||||
|
// message type.
|
||||||
|
//
|
||||||
|
// A single general purpose transport layer FB message is defined in
|
||||||
|
// this document: Generic NACK. It is identified by means of the FMT
|
||||||
|
// parameter as follows:
|
||||||
|
//
|
||||||
|
// 0: unassigned
|
||||||
|
// 1: Generic NACK
|
||||||
|
// 2: reserved https://tools.ietf.org/html/rfc5104#section-4.2
|
||||||
|
// 3: TMMBR https://tools.ietf.org/html/rfc5104#section-4.2.1.1
|
||||||
|
// 4: TMMBN https://tools.ietf.org/html/rfc5104#section-4.2.2.1
|
||||||
|
// 5-14: unassigned
|
||||||
|
// 15 transport-cc https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01
|
||||||
|
// 16-30: unassigned
|
||||||
|
// 31: reserved for future expansion of the identifier number space
|
||||||
|
#define RTPFB_TYPE_MAP(XX) \
|
||||||
|
XX(RTCP_RTPFB_NACK, 1) \
|
||||||
|
XX(RTCP_RTPFB_TMMBR, 3) \
|
||||||
|
XX(RTCP_RTPFB_TMMBN, 4) \
|
||||||
|
XX(RTCP_RTPFB_TWCC, 15)
|
||||||
|
|
||||||
//rtcp类型枚举
|
//rtcp类型枚举
|
||||||
enum class RtcpType : uint8_t {
|
enum class RtcpType : uint8_t {
|
||||||
#define XX(key, value) key = value,
|
#define XX(key, value) key = value,
|
||||||
@ -436,7 +466,7 @@ public:
|
|||||||
//text长度股,可以为0
|
//text长度股,可以为0
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
//不定长
|
//不定长
|
||||||
char text;
|
char text[1];
|
||||||
//最后以RTCP_SDES_END结尾
|
//最后以RTCP_SDES_END结尾
|
||||||
//只字段为占位字段,不代表真实位置
|
//只字段为占位字段,不代表真实位置
|
||||||
uint8_t end;
|
uint8_t end;
|
||||||
@ -501,6 +531,7 @@ private:
|
|||||||
void net2Host(size_t size);
|
void net2Host(size_t size);
|
||||||
} PACKED;
|
} PACKED;
|
||||||
|
|
||||||
|
// https://tools.ietf.org/html/rfc4585#section-6.1
|
||||||
// 6.1. Common Packet Format for Feedback Messages
|
// 6.1. Common Packet Format for Feedback Messages
|
||||||
//
|
//
|
||||||
// All FB messages MUST use a common packet format that is depicted in
|
// All FB messages MUST use a common packet format that is depicted in
|
||||||
@ -569,7 +600,7 @@ public:
|
|||||||
|
|
||||||
/* 可选 */
|
/* 可选 */
|
||||||
uint8_t reason_len;
|
uint8_t reason_len;
|
||||||
char reason;
|
char reason[1];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
//
|
/*
|
||||||
// Created by xzl on 2021/4/13.
|
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
||||||
//
|
*
|
||||||
|
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
||||||
|
*
|
||||||
|
* Use of this source code is governed by MIT license that can be found in the
|
||||||
|
* LICENSE file in the root of the source tree. All contributing project authors
|
||||||
|
* may be found in the AUTHORS file in the root of the source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "RtcpFCI.h"
|
#include "RtcpFCI.h"
|
||||||
|
|
||||||
|
namespace mediakit {
|
||||||
|
|
||||||
|
|
||||||
|
}//namespace mediakit
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
* Copyright (c) 2016 The ZLMediaKit project authors. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
* This file is part of ZLMediaKit(https://github.com/xia-chu/ZLMediaKit).
|
||||||
@ -13,42 +13,17 @@
|
|||||||
|
|
||||||
#include "Rtcp.h"
|
#include "Rtcp.h"
|
||||||
|
|
||||||
//https://tools.ietf.org/html/rfc4585
|
|
||||||
|
|
||||||
namespace mediakit {
|
namespace mediakit {
|
||||||
|
|
||||||
//https://tools.ietf.org/html/rfc4585#section-6.2.1
|
/////////////////////////////////////////// PSFB ////////////////////////////////////////////////////
|
||||||
// 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 |
|
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
||||||
//
|
|
||||||
// Figure 4: Syntax for the Generic NACK message
|
|
||||||
|
|
||||||
class FCI_NACK {
|
|
||||||
public:
|
|
||||||
// The PID field is used to specify a lost packet. The PID field
|
|
||||||
// refers to the RTP sequence number of the lost packet.
|
|
||||||
uint16_t pid;
|
|
||||||
// bitmask of following lost packets (BLP): 16 bits
|
|
||||||
uint16_t blp;
|
|
||||||
} PACKED;
|
|
||||||
|
|
||||||
|
//PSFB fmt = 2
|
||||||
//https://tools.ietf.org/html/rfc4585#section-6.3.2.2
|
//https://tools.ietf.org/html/rfc4585#section-6.3.2.2
|
||||||
// The Slice Loss Indication uses one additional FCI field, the content
|
|
||||||
// of which is depicted in Figure 6. The length of the FB message MUST
|
|
||||||
// be set to 2+n, with n being the number of SLIs contained in the FCI
|
|
||||||
// field.
|
|
||||||
//
|
|
||||||
// 0 1 2 3
|
// 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
|
// 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 | PictureID |
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
//
|
|
||||||
// Figure 6: Syntax of the Slice Loss Indication (SLI)
|
|
||||||
//
|
|
||||||
class FCI_SLI {
|
class FCI_SLI {
|
||||||
public:
|
public:
|
||||||
uint32_t first : 13;
|
uint32_t first : 13;
|
||||||
@ -56,11 +31,8 @@ public:
|
|||||||
uint32_t pic_id : 6;
|
uint32_t pic_id : 6;
|
||||||
} PACKED;
|
} PACKED;
|
||||||
|
|
||||||
|
//PSFB fmt = 3
|
||||||
//https://tools.ietf.org/html/rfc4585#section-6.3.3.2
|
//https://tools.ietf.org/html/rfc4585#section-6.3.3.2
|
||||||
//6.3.3.2. Format
|
|
||||||
//
|
|
||||||
// The FCI for the RPSI message follows the format depicted in Figure 7:
|
|
||||||
//
|
|
||||||
// 0 1 2 3
|
// 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
|
// 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
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
@ -68,8 +40,6 @@ public:
|
|||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
// | defined per codec ... | Padding (0) |
|
// | defined per codec ... | Padding (0) |
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
//
|
|
||||||
// Figure 7: Syntax of the Reference Picture Selection Indication (RPSI)
|
|
||||||
class FCI_RPSI {
|
class FCI_RPSI {
|
||||||
public:
|
public:
|
||||||
//The number of unused bits required to pad the length of the RPSI
|
//The number of unused bits required to pad the length of the RPSI
|
||||||
@ -99,7 +69,62 @@ public:
|
|||||||
// MUST be indicated by the PB field.
|
// MUST be indicated by the PB field.
|
||||||
} PACKED;
|
} PACKED;
|
||||||
|
|
||||||
//tools.ietf.org/html/draft-alvestrand-rmcat-remb-03
|
//PSFB fmt = 4
|
||||||
|
//https://tools.ietf.org/html/rfc5104#section-4.3.1.1
|
||||||
|
// 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
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | SSRC |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | Seq nr. | Reserved |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_FIR {
|
||||||
|
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
|
//PSFB fmt = 5
|
||||||
|
//https://tools.ietf.org/html/rfc5104#section-4.3.2.1
|
||||||
|
// 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
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | SSRC |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | Seq nr. | Reserved | Index |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_TSTR {
|
||||||
|
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
|
//PSFB fmt = 6
|
||||||
|
//https://tools.ietf.org/html/rfc5104#section-4.3.2.1
|
||||||
|
// 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
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | SSRC |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | Seq nr. | Reserved | Index |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_TSTN {
|
||||||
|
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
|
//PSFB fmt = 7
|
||||||
|
//https://tools.ietf.org/html/rfc5104#section-4.3.4.1
|
||||||
|
//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
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | SSRC |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | Seq nr. |0| Payload Type| Length |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | VBCM Octet String.... | Padding |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_VBCM {
|
||||||
|
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
|
//PSFB fmt = 15
|
||||||
|
//https://tools.ietf.org/html/draft-alvestrand-rmcat-remb-03
|
||||||
// 0 1 2 3
|
// 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
|
// 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
|
||||||
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
@ -144,5 +169,95 @@ public:
|
|||||||
|
|
||||||
} PACKED;
|
} PACKED;
|
||||||
|
|
||||||
|
/////////////////////////////////////////// RTPFB ////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
//RTPFB fmt = 1
|
||||||
|
//https://tools.ietf.org/html/rfc4585#section-6.2.1
|
||||||
|
// 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 |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_NACK {
|
||||||
|
public:
|
||||||
|
// The PID field is used to specify a lost packet. The PID field
|
||||||
|
// refers to the RTP sequence number of the lost packet.
|
||||||
|
uint16_t pid;
|
||||||
|
// bitmask of following lost packets (BLP): 16 bits
|
||||||
|
uint16_t blp;
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
|
//RTPFB fmt = 3
|
||||||
|
//https://tools.ietf.org/html/rfc5104#section-4.2.1.1
|
||||||
|
// 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
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | SSRC |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | MxTBR Exp | MxTBR Mantissa |Measured Overhead|
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_TMMBR {
|
||||||
|
public:
|
||||||
|
//SSRC (32 bits): The SSRC value of the media sender that is
|
||||||
|
// requested to obey the new maximum bit rate.
|
||||||
|
uint32_t ssrc;
|
||||||
|
|
||||||
|
// MxTBR Exp (6 bits): The exponential scaling of the mantissa for the
|
||||||
|
// maximum total media bit rate value. The value is an
|
||||||
|
// unsigned integer [0..63].
|
||||||
|
uint32_t max_tbr_exp: 6;
|
||||||
|
|
||||||
|
// MxTBR Mantissa (17 bits): The mantissa of the maximum total media
|
||||||
|
// bit rate value as an unsigned integer.
|
||||||
|
uint32_t max_mantissa: 17;
|
||||||
|
|
||||||
|
// Measured Overhead (9 bits): The measured average packet overhead
|
||||||
|
// value in bytes. The measurement SHALL be done according
|
||||||
|
// to the description in section 4.2.1.2. The value is an
|
||||||
|
// unsigned integer [0..511].
|
||||||
|
uint32_t measured_overhead: 9;
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
|
//RTPFB fmt = 4
|
||||||
|
// https://tools.ietf.org/html/rfc5104#section-4.2.2.1
|
||||||
|
// 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
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | SSRC |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | MxTBR Exp | MxTBR Mantissa |Measured Overhead|
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_TMMBN : public FCI_TMMBR{
|
||||||
|
public:
|
||||||
|
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
|
//RTPFB fmt = 15
|
||||||
|
//https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01#section-3.1
|
||||||
|
//https://zhuanlan.zhihu.com/p/206656654
|
||||||
|
//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
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | base sequence number | packet status count |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | reference time | fb pkt. count |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | packet chunk | packet chunk |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// . .
|
||||||
|
// . .
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | packet chunk | recv delta | recv delta |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// . .
|
||||||
|
// . .
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
// | recv delta | recv delta | zero padding |
|
||||||
|
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
class FCI_TWCC : public FCI_TMMBR{
|
||||||
|
public:
|
||||||
|
|
||||||
|
} PACKED;
|
||||||
|
|
||||||
} //namespace mediakit
|
} //namespace mediakit
|
||||||
#endif //ZLMEDIAKIT_RTCPFCI_H
|
#endif //ZLMEDIAKIT_RTCPFCI_H
|
||||||
|
Loading…
Reference in New Issue
Block a user