![]() 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/self/root/usr/local/lib/node_modules/mediasoup/worker/include/RTC/ |
Upload File : |
#ifndef MS_KEY_FRAME_REQUEST_MANAGER_HPP #define MS_KEY_FRAME_REQUEST_MANAGER_HPP #include "handles/Timer.hpp" #include <map> namespace RTC { class PendingKeyFrameInfo : public Timer::Listener { public: class Listener { public: virtual void OnKeyFrameRequestTimeout(PendingKeyFrameInfo* keyFrameRequestInfo) = 0; }; public: PendingKeyFrameInfo(Listener* listener, uint32_t ssrc); ~PendingKeyFrameInfo(); uint32_t GetSsrc() const { return this->ssrc; } void SetRetryOnTimeout(bool notify) { this->retryOnTimeout = notify; } bool GetRetryOnTimeout() const { return this->retryOnTimeout; } void Restart() { return this->timer->Restart(); } /* Pure virtual methods inherited from Timer::Listener. */ public: void OnTimer(Timer* timer) override; private: Listener* listener{ nullptr }; uint32_t ssrc; Timer* timer{ nullptr }; bool retryOnTimeout{ true }; }; class KeyFrameRequestDelayer : public Timer::Listener { public: class Listener { public: virtual void OnKeyFrameDelayTimeout(KeyFrameRequestDelayer* keyFrameRequestDelayer) = 0; }; public: KeyFrameRequestDelayer(Listener* listener, uint32_t ssrc, uint32_t delay); ~KeyFrameRequestDelayer(); uint32_t GetSsrc() const { return this->ssrc; } bool GetKeyFrameRequested() const { return this->keyFrameRequested; } void SetKeyFrameRequested(bool flag) { this->keyFrameRequested = flag; } /* Pure virtual methods inherited from Timer::Listener. */ public: void OnTimer(Timer* timer) override; private: Listener* listener{ nullptr }; uint32_t ssrc; Timer* timer{ nullptr }; bool keyFrameRequested{ false }; }; class KeyFrameRequestManager : public PendingKeyFrameInfo::Listener, public KeyFrameRequestDelayer::Listener { public: class Listener { public: virtual void OnKeyFrameNeeded(KeyFrameRequestManager* keyFrameRequestManager, uint32_t ssrc) = 0; }; public: explicit KeyFrameRequestManager(Listener* listener, uint32_t keyFrameRequestDelay); virtual ~KeyFrameRequestManager(); void KeyFrameNeeded(uint32_t ssrc); void ForceKeyFrameNeeded(uint32_t ssrc); void KeyFrameReceived(uint32_t ssrc); /* Pure virtual methods inherited from PendingKeyFrameInfo::Listener. */ public: void OnKeyFrameRequestTimeout(PendingKeyFrameInfo* pendingKeyFrameInfo) override; /* Pure virtual methods inherited from PendingKeyFrameInfo::Listener. */ public: void OnKeyFrameDelayTimeout(KeyFrameRequestDelayer* keyFrameRequestDelayer) override; private: Listener* listener{ nullptr }; uint32_t keyFrameRequestDelay{ 0u }; // 0 means disabled. std::map<uint32_t, PendingKeyFrameInfo*> mapSsrcPendingKeyFrameInfo; std::map<uint32_t, KeyFrameRequestDelayer*> mapSsrcKeyFrameRequestDelayer; }; } // namespace RTC #endif