mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 11:51:57 +00:00
RTC: Add callback for all consumers done
This commit is contained in:
parent
88d4314a3c
commit
ab221fa842
4 changed files with 25 additions and 0 deletions
|
@ -1272,6 +1272,11 @@ void SrsRtcPublishStream::request_keyframe(uint32_t ssrc)
|
||||||
session_->stat_->nn_pli++;
|
session_->stat_->nn_pli++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtcPublishStream::on_consumers_finished()
|
||||||
|
{
|
||||||
|
session_->on_consumers_finished(req->get_stream_url());
|
||||||
|
}
|
||||||
|
|
||||||
srs_error_t SrsRtcPublishStream::notify(int type, srs_utime_t interval, srs_utime_t tick)
|
srs_error_t SrsRtcPublishStream::notify(int type, srs_utime_t interval, srs_utime_t tick)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
@ -1863,6 +1868,13 @@ srs_error_t SrsRtcConnection::on_rtcp_feedback_remb(SrsRtcpPsfbCommon *rtcp)
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtcConnection::on_consumers_finished(std::string url)
|
||||||
|
{
|
||||||
|
if (hijacker_) {
|
||||||
|
hijacker_->on_consumers_finished(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SrsRtcConnection::set_hijacker(ISrsRtcConnectionHijacker* h)
|
void SrsRtcConnection::set_hijacker(ISrsRtcConnectionHijacker* h)
|
||||||
{
|
{
|
||||||
hijacker_ = h;
|
hijacker_ = h;
|
||||||
|
|
|
@ -321,6 +321,7 @@ private:
|
||||||
srs_error_t on_rtcp_xr(SrsRtcpXr* rtcp);
|
srs_error_t on_rtcp_xr(SrsRtcpXr* rtcp);
|
||||||
public:
|
public:
|
||||||
void request_keyframe(uint32_t ssrc);
|
void request_keyframe(uint32_t ssrc);
|
||||||
|
void on_consumers_finished();
|
||||||
// interface ISrsHourGlass
|
// interface ISrsHourGlass
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t notify(int type, srs_utime_t interval, srs_utime_t tick);
|
virtual srs_error_t notify(int type, srs_utime_t interval, srs_utime_t tick);
|
||||||
|
@ -362,6 +363,8 @@ public:
|
||||||
virtual ~ISrsRtcConnectionHijacker();
|
virtual ~ISrsRtcConnectionHijacker();
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t on_dtls_done() = 0;
|
virtual srs_error_t on_dtls_done() = 0;
|
||||||
|
// Notify when all consumers of publisher(specified by url) is finished.
|
||||||
|
virtual void on_consumers_finished(std::string url) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// A RTC Peer Connection, SDP level object.
|
// A RTC Peer Connection, SDP level object.
|
||||||
|
@ -450,6 +453,8 @@ private:
|
||||||
public:
|
public:
|
||||||
srs_error_t on_rtcp_feedback_twcc(char* buf, int nb_buf);
|
srs_error_t on_rtcp_feedback_twcc(char* buf, int nb_buf);
|
||||||
srs_error_t on_rtcp_feedback_remb(SrsRtcpPsfbCommon *rtcp);
|
srs_error_t on_rtcp_feedback_remb(SrsRtcpPsfbCommon *rtcp);
|
||||||
|
public:
|
||||||
|
void on_consumers_finished(std::string url);
|
||||||
void set_hijacker(ISrsRtcConnectionHijacker* h);
|
void set_hijacker(ISrsRtcConnectionHijacker* h);
|
||||||
public:
|
public:
|
||||||
srs_error_t on_connection_established();
|
srs_error_t on_connection_established();
|
||||||
|
|
|
@ -406,6 +406,11 @@ void SrsRtcStream::on_consumer_destroy(SrsRtcConsumer* consumer)
|
||||||
if (it != consumers.end()) {
|
if (it != consumers.end()) {
|
||||||
consumers.erase(it);
|
consumers.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When all consumers finished, notify publisher to handle it.
|
||||||
|
if (publish_stream_ && consumers.empty()) {
|
||||||
|
publish_stream_->on_consumers_finished();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SrsRtcStream::can_publish()
|
bool SrsRtcStream::can_publish()
|
||||||
|
|
|
@ -129,7 +129,10 @@ public:
|
||||||
ISrsRtcPublishStream();
|
ISrsRtcPublishStream();
|
||||||
virtual ~ISrsRtcPublishStream();
|
virtual ~ISrsRtcPublishStream();
|
||||||
public:
|
public:
|
||||||
|
// Request keyframe(PLI) from publisher, for fresh consumer.
|
||||||
virtual void request_keyframe(uint32_t ssrc) = 0;
|
virtual void request_keyframe(uint32_t ssrc) = 0;
|
||||||
|
// Notify publisher that all consumers is finished.
|
||||||
|
virtual void on_consumers_finished() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// A Source is a stream, to publish and to play with, binding to SrsRtcPublishStream and SrsRtcPlayStream.
|
// A Source is a stream, to publish and to play with, binding to SrsRtcPublishStream and SrsRtcPlayStream.
|
||||||
|
|
Loading…
Reference in a new issue