1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

Refine shared fast timer. 4.0.105

This commit is contained in:
winlin 2021-05-08 16:50:26 +08:00
parent f370259c9d
commit 2ad24b2313
5 changed files with 186 additions and 122 deletions

View file

@ -66,6 +66,7 @@ class SrsPithyPrint;
class SrsStatistic;
class SrsRtcUserConfig;
class SrsRtcSendTrack;
class SrsRtcPublishStream;
const uint8_t kSR = 200;
const uint8_t kRR = 201;
@ -213,7 +214,7 @@ public:
// A RTC play stream, client pull and play stream from SRS.
class SrsRtcPlayStream : public ISrsCoroutineHandler, public ISrsReloadHandler
, public ISrsFastTimer, public ISrsRtcPLIWorkerHandler, public ISrsRtcStreamChangeCallback
, public ISrsRtcPLIWorkerHandler, public ISrsRtcStreamChangeCallback
{
private:
SrsContextId cid_;
@ -269,9 +270,6 @@ private:
public:
// Directly set the status of track, generally for init to set the default value.
void set_all_tracks_status(bool status);
// interface ISrsFastTimer
private:
srs_error_t on_timer(srs_utime_t interval);
public:
srs_error_t on_rtcp(SrsRtcpCommon* rtcp);
private:
@ -285,10 +283,41 @@ public:
virtual srs_error_t do_request_keyframe(uint32_t ssrc, SrsContextId cid);
};
// A fast timer for publish stream, for RTCP feedback.
class SrsRtcPublishRtcpTimer : public ISrsFastTimer
{
private:
SrsRtcPublishStream* p_;
public:
SrsRtcPublishRtcpTimer(SrsRtcPublishStream* p);
virtual ~SrsRtcPublishRtcpTimer();
// interface ISrsFastTimer
private:
srs_error_t on_timer(srs_utime_t interval);
};
// A fast timer for publish stream, for TWCC feedback.
class SrsRtcPublishTwccTimer : public ISrsFastTimer
{
private:
SrsRtcPublishStream* p_;
public:
SrsRtcPublishTwccTimer(SrsRtcPublishStream* p);
virtual ~SrsRtcPublishTwccTimer();
// interface ISrsFastTimer
private:
srs_error_t on_timer(srs_utime_t interval);
};
// A RTC publish stream, client push and publish stream to SRS.
class SrsRtcPublishStream : public ISrsFastTimer, public ISrsRtpPacketDecodeHandler
class SrsRtcPublishStream : public ISrsRtpPacketDecodeHandler
, public ISrsRtcPublishStream, public ISrsRtcPLIWorkerHandler
{
private:
friend class SrsRtcPublishRtcpTimer;
friend class SrsRtcPublishTwccTimer;
SrsRtcPublishRtcpTimer* timer_rtcp_;
SrsRtcPublishTwccTimer* timer_twcc_;
private:
SrsContextId cid_;
uint64_t nn_audio_frames;
@ -353,9 +382,6 @@ private:
public:
void request_keyframe(uint32_t ssrc);
virtual srs_error_t do_request_keyframe(uint32_t ssrc, SrsContextId cid);
// interface ISrsFastTimer
private:
srs_error_t on_timer(srs_utime_t interval);
public:
void simulate_nack_drop(int nn);
private:
@ -396,15 +422,31 @@ public:
virtual srs_error_t on_dtls_done() = 0;
};
// A fast timer for conntion, for NACK feedback.
class SrsRtcConnectionNackTimer : public ISrsFastTimer
{
private:
SrsRtcConnection* p_;
public:
SrsRtcConnectionNackTimer(SrsRtcConnection* p);
virtual ~SrsRtcConnectionNackTimer();
// interface ISrsFastTimer
private:
srs_error_t on_timer(srs_utime_t interval);
};
// A RTC Peer Connection, SDP level object.
//
// For performance, we use non-virtual public from resource,
// see https://stackoverflow.com/questions/3747066/c-cannot-convert-from-base-a-to-derived-type-b-via-virtual-base-a
class SrsRtcConnection : public ISrsResource, public ISrsFastTimer, public ISrsDisposingHandler
class SrsRtcConnection : public ISrsResource, public ISrsDisposingHandler
{
friend class SrsSecurityTransport;
friend class SrsRtcPlayStream;
friend class SrsRtcPublishStream;
private:
friend class SrsRtcConnectionNackTimer;
SrsRtcConnectionNackTimer* timer_nack_;
public:
bool disposing_;
SrsRtcConnectionStatistic* stat_;
@ -513,9 +555,6 @@ public:
bool is_alive();
void alive();
void update_sendonly_socket(SrsUdpMuxSocket* skt);
// interface ISrsFastTimer
private:
srs_error_t on_timer(srs_utime_t interval);
public:
// send rtcp
srs_error_t send_rtcp(char *data, int nb_data);