![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/thread-self/root/usr/local/lib/node_modules/mediasoup/worker/include/RTC/ |
Upload File : |
#ifndef MS_RTC_RTP_STREAM_RECV_HPP #define MS_RTC_RTP_STREAM_RECV_HPP #include "RTC/NackGenerator.hpp" #include "RTC/RTCP/XrDelaySinceLastRr.hpp" #include "RTC/RateCalculator.hpp" #include "RTC/RtpStream.hpp" #include "handles/Timer.hpp" #include <vector> namespace RTC { class RtpStreamRecv : public RTC::RtpStream, public RTC::NackGenerator::Listener, public Timer::Listener { public: class Listener : public RTC::RtpStream::Listener { public: virtual void OnRtpStreamSendRtcpPacket( RTC::RtpStreamRecv* rtpStream, RTC::RTCP::Packet* packet) = 0; virtual void OnRtpStreamNeedWorstRemoteFractionLost( RTC::RtpStreamRecv* rtpStream, uint8_t& worstRemoteFractionLost) = 0; }; public: class TransmissionCounter { public: TransmissionCounter(uint8_t spatialLayers, uint8_t temporalLayers, size_t windowSize); void Update(RTC::RtpPacket* packet); uint32_t GetBitrate(uint64_t nowMs); uint32_t GetBitrate(uint64_t nowMs, uint8_t spatialLayer, uint8_t temporalLayer); uint32_t GetSpatialLayerBitrate(uint64_t nowMs, uint8_t spatialLayer); uint32_t GetLayerBitrate(uint64_t nowMs, uint8_t spatialLayer, uint8_t temporalLayer); size_t GetPacketCount() const; size_t GetBytes() const; private: std::vector<std::vector<RTC::RtpDataCounter>> spatialLayerCounters; }; public: RtpStreamRecv(RTC::RtpStreamRecv::Listener* listener, RTC::RtpStream::Params& params); ~RtpStreamRecv(); void FillJsonStats(json& jsonObject) override; bool ReceivePacket(RTC::RtpPacket* packet) override; bool ReceiveRtxPacket(RTC::RtpPacket* packet); RTC::RTCP::ReceiverReport* GetRtcpReceiverReport(); RTC::RTCP::ReceiverReport* GetRtxRtcpReceiverReport(); void ReceiveRtcpSenderReport(RTC::RTCP::SenderReport* report); void ReceiveRtxRtcpSenderReport(RTC::RTCP::SenderReport* report); void ReceiveRtcpXrDelaySinceLastRr(RTC::RTCP::DelaySinceLastRr::SsrcInfo* ssrcInfo); void RequestKeyFrame(); void Pause() override; void Resume() override; uint32_t GetBitrate(uint64_t nowMs) override { return this->transmissionCounter.GetBitrate(nowMs); } uint32_t GetBitrate(uint64_t nowMs, uint8_t spatialLayer, uint8_t temporalLayer) override { return this->transmissionCounter.GetBitrate(nowMs, spatialLayer, temporalLayer); } uint32_t GetSpatialLayerBitrate(uint64_t nowMs, uint8_t spatialLayer) override { return this->transmissionCounter.GetSpatialLayerBitrate(nowMs, spatialLayer); } uint32_t GetLayerBitrate(uint64_t nowMs, uint8_t spatialLayer, uint8_t temporalLayer) override { return this->transmissionCounter.GetLayerBitrate(nowMs, spatialLayer, temporalLayer); } private: void CalculateJitter(uint32_t rtpTimestamp); void UpdateScore(); /* Pure virtual methods inherited from Timer. */ protected: void OnTimer(Timer* timer) override; /* Pure virtual methods inherited from RTC::NackGenerator. */ protected: void OnNackGeneratorNackRequired(const std::vector<uint16_t>& seqNumbers) override; void OnNackGeneratorKeyFrameRequired() override; private: uint32_t expectedPrior{ 0u }; // Packets expected at last interval. uint32_t expectedPriorScore{ 0u }; // Packets expected at last interval for score calculation. uint32_t receivedPrior{ 0u }; // Packets received at last interval. uint32_t receivedPriorScore{ 0u }; // Packets received at last interval for score calculation. uint32_t lastSrTimestamp{ 0u }; // The middle 32 bits out of 64 in the NTP // timestamp received in the most recent // sender report. uint64_t lastSrReceived{ 0u }; // Wallclock time representing the most recent // sender report arrival. uint32_t transit{ 0u }; // Relative transit time for prev packet. uint32_t jitter{ 0u }; uint8_t firSeqNumber{ 0u }; uint32_t reportedPacketLost{ 0u }; std::unique_ptr<RTC::NackGenerator> nackGenerator; Timer* inactivityCheckPeriodicTimer{ nullptr }; bool inactive{ false }; TransmissionCounter transmissionCounter; // Valid media + valid RTX. RTC::RtpDataCounter mediaTransmissionCounter; // Just valid media. }; } // namespace RTC #endif