From 7f6be9e118c192f69edbdb8e96cd90e6c69a4ea2 Mon Sep 17 00:00:00 2001 From: ziyue <1213642868@qq.com> Date: Thu, 30 Dec 2021 15:28:02 +0800 Subject: [PATCH] =?UTF-8?q?Refine:=20=E6=B6=88=E9=99=A4=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdpart/ZLToolKit | 2 +- api/include/mk_util.h | 12 ++-- src/Rtcp/Rtcp.cpp | 95 +++++++++++++-------------- src/Rtcp/RtcpFCI.cpp | 11 ++-- src/Rtsp/RtpCodec.cpp | 3 +- tests/test_rtcp.cpp | 131 ------------------------------------- webrtc/Nack.cpp | 8 +-- webrtc/WebRtcTransport.cpp | 4 +- 8 files changed, 67 insertions(+), 199 deletions(-) delete mode 100644 tests/test_rtcp.cpp diff --git a/3rdpart/ZLToolKit b/3rdpart/ZLToolKit index f2f79123..7ede622a 160000 --- a/3rdpart/ZLToolKit +++ b/3rdpart/ZLToolKit @@ -1 +1 @@ -Subproject commit f2f79123f23943381009e89b407aa6f8ef683a82 +Subproject commit 7ede622a3f4e7d3ee9dfe7d61465f1d938873b94 diff --git a/api/include/mk_util.h b/api/include/mk_util.h index c8465d89..f3976860 100644 --- a/api/include/mk_util.h +++ b/api/include/mk_util.h @@ -65,12 +65,12 @@ API_EXPORT char* API_CALL mk_util_hex_dump(const void *buf, int len); API_EXPORT void API_CALL mk_log_printf(int level, const char *file, const char *function, int line, const char *fmt, ...); // 以下宏可以替换printf使用 -#define log_printf(lev, fmt, ...) mk_log_printf(lev, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__) -#define log_trace(fmt, ...) log_printf(0, fmt, ##__VA_ARGS__) -#define log_debug(fmt,...) log_printf(1, fmt, ##__VA_ARGS__) -#define log_info(fmt, ...) log_printf(2, fmt, ##__VA_ARGS__) -#define log_warn(fmt, ...) log_printf(3, fmt, ##__VA_ARGS__) -#define log_error(fmt, ...) log_printf(4, fmt, ##__VA_ARGS__) +#define log_printf(lev, ...) mk_log_printf(lev, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__) +#define log_trace(...) log_printf(0, ##__VA_ARGS__) +#define log_debug(...) log_printf(1, ##__VA_ARGS__) +#define log_info(...) log_printf(2, ##__VA_ARGS__) +#define log_warn(...) log_printf(3, ##__VA_ARGS__) +#define log_error(...) log_printf(4, ##__VA_ARGS__) #ifdef __cplusplus } diff --git a/src/Rtcp/Rtcp.cpp b/src/Rtcp/Rtcp.cpp index 2960743f..33c53e9d 100644 --- a/src/Rtcp/Rtcp.cpp +++ b/src/Rtcp/Rtcp.cpp @@ -53,7 +53,7 @@ const char *rtpfbTypeToStr(RTPFBType type) { } static size_t alignSize(size_t bytes) { - return (size_t)((bytes + 3) >> 2 ) << 2; + return (size_t) ((bytes + 3) >> 2) << 2; } static void setupHeader(RtcpHeader *rtcp, RtcpType type, size_t report_count, size_t total_bytes) { @@ -79,7 +79,7 @@ static void setupPadding(RtcpHeader *rtcp, size_t padding_size) { ///////////////////////////////////////////////////////////////////////////// -string RtcpHeader::dumpHeader() const{ +string RtcpHeader::dumpHeader() const { _StrPrinter printer; printer << "version:" << version << "\r\n"; if (padding) { @@ -88,7 +88,7 @@ string RtcpHeader::dumpHeader() const{ printer << "padding:" << padding << "\r\n"; } - switch ((RtcpType)pt) { + switch ((RtcpType) pt) { case RtcpType::RTCP_RTPFB : { printer << "report_count:" << rtpfbTypeToStr((RTPFBType) report_count) << "\r\n"; break; @@ -103,37 +103,37 @@ string RtcpHeader::dumpHeader() const{ } } - printer << "pt:" << rtcpTypeToStr((RtcpType)pt) << "\r\n"; + printer << "pt:" << rtcpTypeToStr((RtcpType) pt) << "\r\n"; printer << "size:" << getSize() << "\r\n"; printer << "--------\r\n"; return std::move(printer); } string RtcpHeader::dumpString() const { - switch ((RtcpType)pt) { + switch ((RtcpType) pt) { case RtcpType::RTCP_SR: { - RtcpSR *rtcp = (RtcpSR *)this; + RtcpSR *rtcp = (RtcpSR *) this; return rtcp->dumpString(); } case RtcpType::RTCP_RR: { - RtcpRR *rtcp = (RtcpRR *)this; + RtcpRR *rtcp = (RtcpRR *) this; return rtcp->dumpString(); } case RtcpType::RTCP_SDES: { - RtcpSdes *rtcp = (RtcpSdes *)this; + RtcpSdes *rtcp = (RtcpSdes *) this; return rtcp->dumpString(); } case RtcpType::RTCP_RTPFB: case RtcpType::RTCP_PSFB: { - RtcpFB *rtcp = (RtcpFB *)this; + RtcpFB *rtcp = (RtcpFB *) this; return rtcp->dumpString(); } case RtcpType::RTCP_BYE: { - RtcpBye *rtcp = (RtcpBye *)this; + RtcpBye *rtcp = (RtcpBye *) this; return rtcp->dumpString(); } @@ -155,38 +155,38 @@ size_t RtcpHeader::getPaddingSize() const{ void RtcpHeader::setSize(size_t size) { //不包含rtcp头的长度 - length = htons((uint16_t)((size >> 2) - 1)); + length = htons((uint16_t) ((size >> 2) - 1)); } -void RtcpHeader::net2Host(size_t len){ - switch ((RtcpType)pt) { +void RtcpHeader::net2Host(size_t len) { + switch ((RtcpType) pt) { case RtcpType::RTCP_SR: { - RtcpSR *sr = (RtcpSR *)this; + RtcpSR *sr = (RtcpSR *) this; sr->net2Host(len); break; } case RtcpType::RTCP_RR: { - RtcpRR *rr = (RtcpRR *)this; + RtcpRR *rr = (RtcpRR *) this; rr->net2Host(len); break; } case RtcpType::RTCP_SDES: { - RtcpSdes *sdes = (RtcpSdes *)this; + RtcpSdes *sdes = (RtcpSdes *) this; sdes->net2Host(len); break; } case RtcpType::RTCP_RTPFB: case RtcpType::RTCP_PSFB: { - RtcpFB *fb = (RtcpFB *)this; + RtcpFB *fb = (RtcpFB *) this; fb->net2Host(len); break; } case RtcpType::RTCP_BYE: { - RtcpBye *bye = (RtcpBye *)this; + RtcpBye *bye = (RtcpBye *) this; bye->net2Host(len); break; } @@ -195,14 +195,14 @@ void RtcpHeader::net2Host(size_t len){ } } -vector RtcpHeader::loadFromBytes(char *data, size_t len){ +vector RtcpHeader::loadFromBytes(char *data, size_t len) { vector ret; ssize_t remain = len; char *ptr = data; while (remain > (ssize_t) sizeof(RtcpHeader)) { RtcpHeader *rtcp = (RtcpHeader *) ptr; auto rtcp_len = rtcp->getSize(); - if (remain < (ssize_t)rtcp_len) { + if (remain < (ssize_t) rtcp_len) { WarnL << "非法的rtcp包,声明的长度超过实际数据长度"; break; } @@ -256,10 +256,10 @@ std::shared_ptr RtcpSR::create(size_t item_count) { }); } -string RtcpSR::getNtpStamp() const{ +string RtcpSR::getNtpStamp() const { struct timeval tv; tv.tv_sec = ntpmsw - 0x83AA7E80; - tv.tv_usec = (decltype(tv.tv_usec))(ntplsw / ((double) (((uint64_t) 1) << 32) * 1.0e-6)); + tv.tv_usec = (decltype(tv.tv_usec)) (ntplsw / ((double) (((uint64_t) 1) << 32) * 1.0e-6)); return LogChannel::printTime(tv); } @@ -287,7 +287,7 @@ void RtcpSR::setNtpStamp(uint64_t unix_stamp_ms) { setNtpStamp(tv); } -string RtcpSR::dumpString() const{ +string RtcpSR::dumpString() const { _StrPrinter printer; printer << RtcpHeader::dumpHeader(); printer << "ssrc:" << ssrc << "\r\n"; @@ -297,7 +297,7 @@ string RtcpSR::dumpString() const{ printer << "rtpts:" << rtpts << "\r\n"; printer << "packet_count:" << packet_count << "\r\n"; printer << "octet_count:" << octet_count << "\r\n"; - auto items = ((RtcpSR *)this)->getItemList(); + auto items = ((RtcpSR *) this)->getItemList(); auto i = 0; for (auto &item : items) { printer << "---- item:" << i++ << " ----\r\n"; @@ -331,7 +331,7 @@ void RtcpSR::net2Host(size_t size) { ReportItem *ptr = &items; int item_count = 0; - for(int i = 0; i < (int)report_count && (char *)(ptr) + sizeof(ReportItem) <= (char *)(this) + size; ++i){ + for (int i = 0; i < (int) report_count && (char *) (ptr) + sizeof(ReportItem) <= (char *) (this) + size; ++i) { ptr->net2Host(); ++ptr; ++item_count; @@ -339,7 +339,7 @@ void RtcpSR::net2Host(size_t size) { CHECK_REPORT_COUNT(item_count); } -vector RtcpSR::getItemList(){ +vector RtcpSR::getItemList() { vector ret; ReportItem *ptr = &items; for (int i = 0; i < (int) report_count; ++i) { @@ -351,7 +351,7 @@ vector RtcpSR::getItemList(){ ///////////////////////////////////////////////////////////////////////////// -string ReportItem::dumpString() const{ +string ReportItem::dumpString() const { _StrPrinter printer; printer << "ssrc:" << ssrc << "\r\n"; printer << "fraction:" << fraction << "\r\n"; @@ -366,7 +366,7 @@ string ReportItem::dumpString() const{ void ReportItem::net2Host() { ssrc = ntohl(ssrc); - cumulative = ntohl(cumulative ) >> 8; + cumulative = ntohl(cumulative) >> 8; seq_cycles = ntohs(seq_cycles); seq_max = ntohs(seq_max); jitter = ntohl(jitter); @@ -387,11 +387,11 @@ std::shared_ptr RtcpRR::create(size_t item_count) { }); } -string RtcpRR::dumpString() const{ +string RtcpRR::dumpString() const { _StrPrinter printer; printer << RtcpHeader::dumpHeader(); printer << "ssrc:" << ssrc << "\r\n"; - auto items = ((RtcpRR *)this)->getItemList(); + auto items = ((RtcpRR *) this)->getItemList(); auto i = 0; for (auto &item : items) { printer << "---- item:" << i++ << " ----\r\n"; @@ -407,7 +407,7 @@ void RtcpRR::net2Host(size_t size) { ReportItem *ptr = &items; int item_count = 0; - for(int i = 0; i < (int)report_count && (char *)(ptr) + sizeof(ReportItem) <= (char *)(this) + size; ++i){ + for (int i = 0; i < (int) report_count && (char *) (ptr) + sizeof(ReportItem) <= (char *) (this) + size; ++i) { ptr->net2Host(); ++ptr; ++item_count; @@ -415,7 +415,7 @@ void RtcpRR::net2Host(size_t size) { CHECK_REPORT_COUNT(item_count); } -vector RtcpRR::getItemList() { +vector RtcpRR::getItemList() { vector ret; ReportItem *ptr = &items; for (int i = 0; i < (int) report_count; ++i) { @@ -431,7 +431,7 @@ void SdesChunk::net2Host() { ssrc = ntohl(ssrc); } -size_t SdesChunk::totalBytes() const{ +size_t SdesChunk::totalBytes() const { return alignSize(minSize() + txt_len); } @@ -439,7 +439,7 @@ size_t SdesChunk::minSize() { return sizeof(SdesChunk) - sizeof(text); } -string SdesChunk::dumpString() const{ +string SdesChunk::dumpString() const { _StrPrinter printer; printer << "ssrc:" << ssrc << "\r\n"; printer << "type:" << sdesTypeToStr((SdesType) type) << "\r\n"; @@ -471,7 +471,7 @@ std::shared_ptr RtcpSdes::create(const std::vector &item_text) setupHeader(ptr, RtcpType::RTCP_SDES, item_text.size(), bytes); setupPadding(ptr, bytes - real_size); return std::shared_ptr(ptr, [](RtcpSdes *ptr) { - delete [] (char *) ptr; + delete[] (char *) ptr; }); } @@ -492,7 +492,7 @@ void RtcpSdes::net2Host(size_t size) { CHECK_MIN_SIZE(size, kMinSize); SdesChunk *ptr = &chunks; int item_count = 0; - for(int i = 0; i < (int)report_count && (char *)(ptr) + SdesChunk::minSize() <= (char *)(this) + size; ++i){ + for (int i = 0; i < (int) report_count && (char *) (ptr) + SdesChunk::minSize() <= (char *) (this) + size; ++i) { ptr->net2Host(); ptr = (SdesChunk *) ((char *) ptr + ptr->totalBytes()); ++item_count; @@ -520,7 +520,7 @@ std::shared_ptr RtcpFB::create_l(RtcpType type, int fmt, const void *fci auto bytes = alignSize(real_size); auto ptr = (RtcpFB *) new char[bytes]; if (fci && fci_len) { - memcpy((char *)ptr + sizeof(RtcpFB), fci, fci_len); + memcpy((char *) ptr + sizeof(RtcpFB), fci, fci_len); } setupHeader(ptr, type, fmt, bytes); setupPadding(ptr, bytes - real_size); @@ -530,11 +530,11 @@ std::shared_ptr RtcpFB::create_l(RtcpType type, int fmt, const void *fci } std::shared_ptr RtcpFB::create(PSFBType fmt, const void *fci, size_t fci_len) { - return RtcpFB::create_l(RtcpType::RTCP_PSFB, (int)fmt, fci, fci_len); + return RtcpFB::create_l(RtcpType::RTCP_PSFB, (int) fmt, fci, fci_len); } std::shared_ptr RtcpFB::create(RTPFBType fmt, const void *fci, size_t fci_len) { - return RtcpFB::create_l(RtcpType::RTCP_RTPFB, (int)fmt, fci, fci_len); + return RtcpFB::create_l(RtcpType::RTCP_RTPFB, (int) fmt, fci, fci_len); } const void *RtcpFB::getFciPtr() const { @@ -625,10 +625,9 @@ std::shared_ptr RtcpBye::create(const std::vector &ssrcs, con setupHeader(ptr, RtcpType::RTCP_BYE, ssrcs.size(), bytes); setupPadding(ptr, bytes - real_size); - auto ssrc_ptr = ((RtcpBye *) ptr)->ssrc; + int i = 0; for (auto ssrc : ssrcs) { - *ssrc_ptr = htonl(ssrc); - ++ssrc_ptr; + ((RtcpBye *) ptr)->ssrc[i++] = htonl(ssrc); } if (!reason.empty()) { @@ -642,12 +641,10 @@ std::shared_ptr RtcpBye::create(const std::vector &ssrcs, con }); } -vector RtcpBye::getSSRC() { +vector RtcpBye::getSSRC() { vector ret; - auto ssrc_ptr = ssrc; for (size_t i = 0; i < report_count; ++i) { - ret.emplace_back(ssrc_ptr); - ssrc_ptr += 1; + ret.emplace_back(&(ssrc[i])); } return ret; } @@ -663,7 +660,7 @@ string RtcpBye::getReason() const { string RtcpBye::dumpString() const { _StrPrinter printer; printer << RtcpHeader::dumpHeader(); - for(auto ssrc : ((RtcpBye *)this)->getSSRC()) { + for (auto ssrc : ((RtcpBye *) this)->getSSRC()) { printer << "ssrc:" << *ssrc << "\r\n"; } printer << "reason:" << getReason(); @@ -673,12 +670,10 @@ string RtcpBye::dumpString() const { void RtcpBye::net2Host(size_t size) { static const size_t kMinSize = sizeof(RtcpHeader); CHECK_MIN_SIZE(size, kMinSize); - auto ssrc_ptr = ssrc; size_t offset = kMinSize; size_t i = 0; for (; i < report_count && offset + sizeof(ssrc) <= size; ++i) { - *ssrc_ptr = ntohl(*ssrc_ptr); - ssrc_ptr += 1; + ssrc[i] = ntohl(ssrc[i]); offset += sizeof(ssrc); } //修正ssrc个数 diff --git a/src/Rtcp/RtcpFCI.cpp b/src/Rtcp/RtcpFCI.cpp index a5143e6a..f9ff90df 100644 --- a/src/Rtcp/RtcpFCI.cpp +++ b/src/Rtcp/RtcpFCI.cpp @@ -118,9 +118,9 @@ string FCI_REMB::create(const vector &ssrcs, uint32_t bitrate) { thiz->bitrate[3] = (uint8_t) (mantissa); //设置ssrc列表 - auto ptr = thiz->ssrc_feedback; + int i = 0; for (auto ssrc : ssrcs) { - *(ptr++) = htonl(ssrc); + thiz->ssrc_feedback[i++] = htonl(ssrc); } return ret; } @@ -136,9 +136,10 @@ uint32_t FCI_REMB::getBitRate() const { vector FCI_REMB::getSSRC() { vector ret; auto num_ssrc = bitrate[0]; - auto ptr = ssrc_feedback; + int i = 0; while (num_ssrc--) { - ret.emplace_back(ntohl(*ptr++)); + ret.emplace_back(ntohl(ssrc_feedback[i])); + ++i; } return ret; } @@ -537,7 +538,7 @@ string FCI_TWCC::create(uint32_t ref_time, uint8_t fb_pkt_count, TwccPacketStatu break; } } - vec.resize(MIN(vec.size(), 14 >> symbol)); + vec.resize(MIN(vec.size(), (size_t)14 >> symbol)); StatusVecChunk chunk(symbol, vec); fci.append((char *)&chunk, StatusVecChunk::kSize); appendDeltaString(delta_str, status, vec.size()); diff --git a/src/Rtsp/RtpCodec.cpp b/src/Rtsp/RtpCodec.cpp index 72f10432..fcdb649d 100644 --- a/src/Rtsp/RtpCodec.cpp +++ b/src/Rtsp/RtpCodec.cpp @@ -35,7 +35,8 @@ RtpPacket::Ptr RtpInfo::makeRtp(TrackType type, const void* data, size_t len, bo header->csrc = 0; header->mark = mark; header->pt = _pt; - header->seq = htons(_seq++); + header->seq = htons(_seq); + ++_seq; header->stamp = htonl(uint64_t(stamp) * _sample_rate / 1000); header->ssrc = htonl(_ssrc); diff --git a/tests/test_rtcp.cpp b/tests/test_rtcp.cpp deleted file mode 100644 index e535d677..00000000 --- a/tests/test_rtcp.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* - * 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 "Rtcp/Rtcp.h" -#include "Util/logger.h" -using namespace std; -using namespace toolkit; -using namespace mediakit; - -void printRtcp(const std::shared_ptr &buffer){ - auto rtcp_arr = RtcpHeader::loadFromBytes(buffer->data(), buffer->size()); - //转换为主机字节序方可打印 - InfoL << "\r\n" << rtcp_arr[0]->dumpString(); -} - -std::shared_ptr makeRtcpSR() { - auto rtcp = RtcpSR::create(3); - rtcp->ssrc = htonl(1); - struct timeval tv; - gettimeofday(&tv, NULL); - rtcp->setNtpStamp(tv); - rtcp->rtpts = htonl(2); - rtcp->packet_count = htonl(3); - rtcp->octet_count = htonl(4); - auto i = 5; - for (auto &ptr : rtcp->getItemList()) { - ReportItem *item = (ReportItem *) ptr; - item->ssrc = htonl(i++); - item->fraction = i++; - item->cumulative = htonl(i++) >> 8; - item->seq_cycles = htons(i++); - item->seq_max = htons(i++); - item->jitter = htonl(i++); - item->last_sr_stamp = htonl(i++); - item->delay_since_last_sr = htonl(i++); - } - //返回网络字节序 - return RtcpHeader::toBuffer(rtcp); -} - -std::shared_ptr makeRtcpRR() { - auto rtcp = RtcpRR::create(3); - rtcp->ssrc = htonl(1); - auto i = 5; - for (auto &ptr : rtcp->getItemList()) { - ReportItem *item = (ReportItem *) ptr; - item->ssrc = htonl(i++); - item->fraction = i++; - item->cumulative = htonl(i++) >> 8; - item->seq_cycles = htons(i++); - item->seq_max = htons(i++); - item->jitter = htonl(i++); - item->last_sr_stamp = htonl(i++); - item->delay_since_last_sr = htonl(i++); - } - //返回网络字节序 - return RtcpHeader::toBuffer(rtcp); -} - -std::shared_ptr makeRtcpSDES() { - auto rtcp = RtcpSdes::create({"zlmediakit", "", "https://github.com/xia-chu/ZLMediaKit", "1213642868@qq.com", "123456789012345678"}); - auto i = 5; - auto items = rtcp->getChunkList(); - items[0]->type = (uint8_t)SdesType::RTCP_SDES_CNAME; - items[0]->ssrc = htonl(i++); - - items[1]->type = (uint8_t)SdesType::RTCP_SDES_NOTE; - items[1]->ssrc = htonl(i++); - - items[2]->type = (uint8_t)SdesType::RTCP_SDES_LOC; - items[2]->ssrc = htonl(i++); - - items[3]->type = (uint8_t)SdesType::RTCP_SDES_EMAIL; - items[3]->ssrc = htonl(i++); - - items[4]->type = (uint8_t)SdesType::RTCP_SDES_PHONE; - items[4]->ssrc = htonl(i++); - - //返回网络字节序 - return RtcpHeader::toBuffer(rtcp); -} - - -int main(int argc, char *argv[]){ - Logger::Instance().add(std::make_shared()); - { - static char rtcp_data[] = "\x81\xca\x00\x05\x70\xd8\xac\x1b\x01\x0b\x7a\x73\x68\x50\x43\x40" - "\x7a\x73\x68\x50\x43\x00\x00\x00" - "\x81\xc9\x00\x07\x70\xd8\xac\x1b\x55\x66\x77\x88\x00\x00\x00\x00" - "\x00\x00\x0d\x21\x00\x00\x00\x32\xdd\xf1\x00\x00\x00\x03\x4f\x67" - "\x80\xc8\x00\x06\x55\x66\x77\x88\xe3\x70\xdd\xf1\x00\x00\xc2\xb8" - "\x00\x21\xe4\x90\x00\x00\x0b\x81\x00\x2f\x6a\x60"; - auto rtcp_arr = RtcpHeader::loadFromBytes(rtcp_data, sizeof(rtcp_data) - 1); - for (auto &rtcp : rtcp_arr) { - DebugL << "\r\n" << rtcp->dumpString(); - } - - } - - { - printRtcp(makeRtcpSR()); - printRtcp(makeRtcpRR()); - printRtcp(makeRtcpSDES()); - } - - { - string str; - auto sr = makeRtcpSR(); - auto rr = makeRtcpRR(); - auto sdes = makeRtcpSDES(); - str.append(sr->data(), sr->size()); - str.append(rr->data(), rr->size()); - str.append(sdes->data(), sdes->size()); - //测试内存越界 - char *data = new char[str.size()]; - memcpy(data, str.data(), str.size()); - auto rtcp_arr = RtcpHeader::loadFromBytes(data, str.size()); - for (auto &rtcp : rtcp_arr) { - WarnL << "\r\n" << rtcp->dumpString(); - } - delete [] data; - } - -} \ No newline at end of file diff --git a/webrtc/Nack.cpp b/webrtc/Nack.cpp index 56effeb2..91d4026d 100644 --- a/webrtc/Nack.cpp +++ b/webrtc/Nack.cpp @@ -94,7 +94,7 @@ void NackContext::received(uint16_t seq, bool is_rtx) { return; } - if (_seq.size() == diff + 1 && _last_max_seq + 1 == min_seq) { + if (_seq.size() == (size_t)diff + 1 && _last_max_seq + 1 == min_seq) { //都是连续的seq,未丢包 _seq.clear(); _last_max_seq = max_seq; @@ -107,10 +107,10 @@ void NackContext::received(uint16_t seq, bool is_rtx) { //有丢包,丢包从_last_max_seq开始 auto nack_rtp_count = FCI_NACK::kBitSize; - if (max_seq - _last_max_seq > nack_rtp_count) { + if (max_seq > nack_rtp_count + _last_max_seq) { vector vec; vec.resize(FCI_NACK::kBitSize, false); - for (auto i = 0; i < nack_rtp_count; ++i) { + for (size_t i = 0; i < nack_rtp_count; ++i) { vec[i] = _seq.find(_last_max_seq + i + 2) == _seq.end(); } doNack(FCI_NACK(_last_max_seq + 1, vec), true); @@ -224,7 +224,7 @@ uint64_t NackContext::reSendNack() { continue; } auto inc = *it - pid; - if (inc > FCI_NACK::kBitSize) { + if (inc > (ssize_t)FCI_NACK::kBitSize) { //新的nack包 doNack(FCI_NACK(pid, vec), false); pid = -1; diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index e78a4f5e..f6abf79e 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -843,7 +843,9 @@ void WebRtcTransportImp::onBeforeEncryptRtp(const char *buf, int &len, void *ctx auto origin_seq = ntohs(header->seq); //seq跟原来的不一样 - header->seq = htons(_rtx_seq[pr->second->media->type]++); + header->seq = htons(_rtx_seq[pr->second->media->type]); + ++_rtx_seq[pr->second->media->type]; + auto payload = header->getPayloadData(); auto payload_size = header->getPayloadSize(len); if (payload_size) {