Commit 37096f8e by xiongziliang

完善rtcp的定义

parent 29c8c9bf
...@@ -38,7 +38,7 @@ const char *psfbTypeToStr(PSFBType type) { ...@@ -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{ ...@@ -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> & ...@@ -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) { ...@@ -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 { ...@@ -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) \
...@@ -43,7 +42,8 @@ namespace mediakit { ...@@ -43,7 +42,8 @@ namespace mediakit {
XX(RTCP_AVB, 208) \ XX(RTCP_AVB, 208) \
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 { ...@@ -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: ...@@ -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,7 +531,8 @@ private: ...@@ -501,7 +531,8 @@ private:
void net2Host(size_t size); void net2Host(size_t size);
} PACKED; } PACKED;
//6.1. Common Packet Format for Feedback Messages // https://tools.ietf.org/html/rfc4585#section-6.1
// 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
// Figure 3: // Figure 3:
...@@ -569,7 +600,7 @@ public: ...@@ -569,7 +600,7 @@ public:
/* 可选 */ /* 可选 */
uint8_t reason_len; uint8_t reason_len;
char reason; char reason[1];
public: public:
/** /**
......
// /*
// 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
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论