完善fci相关代码

This commit is contained in:
xia-chu
2021-04-26 21:03:04 +08:00
parent aa54adb1ab
commit 2d8ef45e4d
6 changed files with 88 additions and 55 deletions

View File

@@ -12,6 +12,7 @@
#include <assert.h>
#include "Rtcp.h"
#include "Util/logger.h"
#include "RtcpFCI.h"
namespace mediakit {
@@ -493,18 +494,65 @@ string RtcpFB::dumpString() const {
printer << RtcpHeader::dumpHeader();
printer << "ssrc:" << ssrc << "\r\n";
printer << "ssrc_media:" << ssrc_media << "\r\n";
auto fci = (uint8_t *)&ssrc_media + sizeof(ssrc_media);
auto fci_data = (uint8_t *)&ssrc_media + sizeof(ssrc_media);
auto fci_len = getSize() - sizeof(RtcpFB);
if (fci_len) {
switch ((RtcpType) pt) {
case RtcpType::RTCP_PSFB : {
break;
}
case RtcpType::RTCP_RTPFB : {
break;
switch ((RtcpType) pt) {
case RtcpType::RTCP_PSFB : {
switch ((PSFBType) report_count) {
case PSFBType::RTCP_PSFB_SLI : {
FCI_SLI *fci = (FCI_SLI *) fci_data;
fci->check(fci_len);
printer << "fci:" << psfbTypeToStr((PSFBType) report_count) << " " << fci->dumpString();
break;
}
case PSFBType::RTCP_PSFB_PLI : {
CHECK(fci_len == 0);
printer << "fci:" << psfbTypeToStr((PSFBType) report_count);
break;
}
case PSFBType::RTCP_PSFB_FIR : {
FCI_FIR *fci = (FCI_FIR *) fci_data;
fci->check(fci_len);
printer << "fci:" << psfbTypeToStr((PSFBType) report_count) << " " << fci->dumpString();
break;
}
case PSFBType::RTCP_PSFB_REMB : {
FCI_REMB *fci = (FCI_REMB *) fci_data;
fci->check(fci_len);
printer << "fci:" << psfbTypeToStr((PSFBType) report_count) << " " << fci->dumpString();
break;
}
default:{
printer << "fci:" << psfbTypeToStr((PSFBType) report_count) << " " << hexdump(fci_data, fci_len);
break;
}
}
break;
}
printer << "fci:" << hexdump(fci, fci_len);
case RtcpType::RTCP_RTPFB : {
switch ((RTPFBType) report_count) {
case RTPFBType::RTCP_RTPFB_NACK : {
FCI_NACK *fci = (FCI_NACK *) fci_data;
fci->check(fci_len);
printer << "fci:" << rtpfbTypeToStr((RTPFBType) report_count) << " " << fci->dumpString();
break;
}
case RTPFBType::RTCP_RTPFB_TWCC : {
FCI_TWCC *fci = (FCI_TWCC *) fci_data;
fci->check(fci_len);
printer << "fci:" << rtpfbTypeToStr((RTPFBType) report_count) << " " << fci->dumpString(fci_len);
break;
}
default: {
printer << "fci:" << rtpfbTypeToStr((RTPFBType) report_count) << " " << hexdump(fci_data, fci_len);
break;
}
}
break;
}
default: /*不可达*/ assert(0); break;
}
return std::move(printer);
}

View File

@@ -85,7 +85,7 @@ namespace mediakit {
XX(RTCP_PSFB_TSTR, 5)\
XX(RTCP_PSFB_TSTN, 6)\
XX(RTCP_PSFB_VBCM, 7) \
XX(RTCP_PSFB_AFB, 15)
XX(RTCP_PSFB_REMB, 15)
//https://tools.ietf.org/html/rfc4585#section-6.2
//6.2. Transport Layer Feedback Messages

View File

@@ -453,7 +453,7 @@ map<uint16_t, std::pair<SymbolStatus, uint32_t/*stamp*/> > FCI_TWCC::getPacketCh
string FCI_TWCC::dumpString(size_t total_size) const {
_StrPrinter printer;
auto map = getPacketChunkList(total_size);
printer << "twcc fci, base_seq:" << getBaseSeq() << ",pkt_status_count:" << getPacketCount() << ", ref time:" << getReferenceTime() << ", fb count:" << (int)fb_pkt_count << "\n";
printer << "twcc fci, base_seq:" << getBaseSeq() << ", pkt_status_count:" << getPacketCount() << ", ref time:" << getReferenceTime() << ", fb count:" << (int)fb_pkt_count << "\n";
for (auto &pr : map) {
printer << "rtp seq:" << pr.first <<", packet status:" << (int)(pr.second.first) << ", delta:" << pr.second.second << "\n";
}