From 8e4f2152d2f1d8f0eaea8434d5236267e113b955 Mon Sep 17 00:00:00 2001 From: "dmytro.bogovych" Date: Fri, 8 Mar 2019 13:01:24 +0200 Subject: [PATCH] - fixed problem with loss packet counter (it was higher than real value) --- src/engine/helper/HL_Rtp.cpp | 8 ++++++++ src/engine/helper/HL_Rtp.h | 1 + src/engine/media/MT_AudioReceiver.cpp | 22 ++++++++++++++++++---- src/engine/media/MT_AudioStream.cpp | 6 ++++-- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/engine/helper/HL_Rtp.cpp b/src/engine/helper/HL_Rtp.cpp index 15ad7937..483faf02 100644 --- a/src/engine/helper/HL_Rtp.cpp +++ b/src/engine/helper/HL_Rtp.cpp @@ -79,6 +79,14 @@ int RtpHelper::findPtype(const void* buffer, size_t length) return -1; } +int RtpHelper::findPacketNo(const void *buffer, size_t length) +{ + if (isRtp(buffer, length)) + return ntohs(reinterpret_cast(buffer)->seq); + else + return -1; +} + int RtpHelper::findPayloadLength(const void* buffer, size_t length) { if (isRtp(buffer, length)) diff --git a/src/engine/helper/HL_Rtp.h b/src/engine/helper/HL_Rtp.h index 4a6b0ab5..7fe373b7 100644 --- a/src/engine/helper/HL_Rtp.h +++ b/src/engine/helper/HL_Rtp.h @@ -35,6 +35,7 @@ class RtpHelper public: static bool isRtp(const void* buffer, size_t length); static int findPtype(const void* buffer, size_t length); + static int findPacketNo(const void* buffer, size_t length); static bool isRtpOrRtcp(const void* buffer, size_t length); static bool isRtcp(const void* buffer, size_t length); static unsigned findSsrc(const void* buffer, size_t length); diff --git a/src/engine/media/MT_AudioReceiver.cpp b/src/engine/media/MT_AudioReceiver.cpp index bd5695ba..667749be 100644 --- a/src/engine/media/MT_AudioReceiver.cpp +++ b/src/engine/media/MT_AudioReceiver.cpp @@ -108,7 +108,7 @@ bool RtpBuffer::add(std::shared_ptr packet, int timelength, Lock l(mGuard); // Update statistics - mStat.mSsrc = packet->GetSSRC(); + mStat.mSsrc = static_cast(packet->GetSSRC()); // Update jitter ICELogMedia(<< "Adding new packet into jitter buffer"); @@ -149,12 +149,14 @@ bool RtpBuffer::add(std::shared_ptr packet, int timelength, // Limit by max timelength available = findTimelength(); - while (available > mHigh && mPacketList.size()) + if (available > mHigh) + ICELogMedia(<< "Available " << available << "ms with limit " << mHigh << "ms"); + /*while (available > mHigh && mPacketList.size()) { - //ICELogMedia( << "Dropping RTP packet from jitter"); + ICELogDebug( << "Dropping RTP packet from jitter buffer"); available -= mPacketList.front().timelength(); mPacketList.erase(mPacketList.begin()); - } + }*/ } else { @@ -176,6 +178,18 @@ RtpBuffer::FetchResult RtpBuffer::fetch(ResultList& rl) // See if there is enough information in buffer int total = findTimelength(); + while (total > mHigh && mPacketList.size()) + { + ICELogMedia( << "Dropping RTP packets from jitter buffer"); + total -= mPacketList.front().timelength(); + + // Save it as last packet however - to not confuse loss packet counter + mFetchedPacket = mPacketList.front(); + + // Erase from packet list + mPacketList.erase(mPacketList.begin()); + } + if (total < mLow) result = FetchResult::NoPacket; else diff --git a/src/engine/media/MT_AudioStream.cpp b/src/engine/media/MT_AudioStream.cpp index 40058dac..ecb8d198 100644 --- a/src/engine/media/MT_AudioStream.cpp +++ b/src/engine/media/MT_AudioStream.cpp @@ -313,7 +313,9 @@ void AudioStream::dataArrived(PDatagramSocket s, const void* buffer, int length, return; } } - + + //ICELogDebug(<< "Packet no: " << RtpHelper::findPacketNo(mReceiveBuffer, receiveLength)); + switch (source.family()) { case AF_INET: @@ -362,7 +364,7 @@ void AudioStream::dataArrived(PDatagramSocket s, const void* buffer, int length, // Process incoming data packet rtpStream->process(packet); - + double rtt = mRtpSession.GetCurrentSourceInfo()->INF_GetRoundtripTime().GetDouble(); if (rtt > 0) mStat.mRttDelay.process(rtt);