mirror of
https://github.com/ossrs/srs.git
synced 2025-02-15 04:42:04 +00:00
RTC: Connection support hijack
This commit is contained in:
parent
b0590ef4fe
commit
8c9935db44
2 changed files with 32 additions and 0 deletions
|
@ -1754,6 +1754,14 @@ string SrsRtcConnectionStatistic::summary()
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ISrsRtcConnectionHijacker::ISrsRtcConnectionHijacker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ISrsRtcConnectionHijacker::~ISrsRtcConnectionHijacker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
SrsRtcConnection::SrsRtcConnection(SrsRtcServer* s, SrsContextId context_id)
|
SrsRtcConnection::SrsRtcConnection(SrsRtcServer* s, SrsContextId context_id)
|
||||||
{
|
{
|
||||||
req = NULL;
|
req = NULL;
|
||||||
|
@ -1761,6 +1769,7 @@ SrsRtcConnection::SrsRtcConnection(SrsRtcServer* s, SrsContextId context_id)
|
||||||
cid = context_id;
|
cid = context_id;
|
||||||
stat_ = new SrsRtcConnectionStatistic();
|
stat_ = new SrsRtcConnectionStatistic();
|
||||||
timer_ = new SrsHourGlass(this, 1000 * SRS_UTIME_MILLISECONDS);
|
timer_ = new SrsHourGlass(this, 1000 * SRS_UTIME_MILLISECONDS);
|
||||||
|
hijacker_ = NULL;
|
||||||
|
|
||||||
publisher_ = NULL;
|
publisher_ = NULL;
|
||||||
player_ = NULL;
|
player_ = NULL;
|
||||||
|
@ -2067,6 +2076,11 @@ srs_error_t SrsRtcConnection::on_rtcp_feedback(char* data, int nb_data)
|
||||||
return srs_success;
|
return srs_success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SrsRtcConnection::set_hijacker(ISrsRtcConnectionHijacker* h)
|
||||||
|
{
|
||||||
|
hijacker_ = h;
|
||||||
|
}
|
||||||
|
|
||||||
srs_error_t SrsRtcConnection::on_rtp(char* data, int nb_data)
|
srs_error_t SrsRtcConnection::on_rtp(char* data, int nb_data)
|
||||||
{
|
{
|
||||||
if (publisher_ == NULL) {
|
if (publisher_ == NULL) {
|
||||||
|
@ -2094,6 +2108,12 @@ srs_error_t SrsRtcConnection::on_connection_established()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hijacker_) {
|
||||||
|
if ((err = hijacker_->on_dtls_done()) != srs_success) {
|
||||||
|
return srs_error_wrap(err, "hijack on dtls done");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -364,6 +364,16 @@ public:
|
||||||
std::string summary();
|
std::string summary();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Callback for RTC connection.
|
||||||
|
class ISrsRtcConnectionHijacker
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ISrsRtcConnectionHijacker();
|
||||||
|
virtual ~ISrsRtcConnectionHijacker();
|
||||||
|
public:
|
||||||
|
virtual srs_error_t on_dtls_done() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
// A RTC Peer Connection, SDP level object.
|
// A RTC Peer Connection, SDP level object.
|
||||||
class SrsRtcConnection : virtual public ISrsHourGlass
|
class SrsRtcConnection : virtual public ISrsHourGlass
|
||||||
{
|
{
|
||||||
|
@ -373,6 +383,7 @@ class SrsRtcConnection : virtual public ISrsHourGlass
|
||||||
public:
|
public:
|
||||||
bool disposing_;
|
bool disposing_;
|
||||||
SrsRtcConnectionStatistic* stat_;
|
SrsRtcConnectionStatistic* stat_;
|
||||||
|
ISrsRtcConnectionHijacker* hijacker_;
|
||||||
private:
|
private:
|
||||||
SrsRtcServer* server_;
|
SrsRtcServer* server_;
|
||||||
SrsRtcConnectionStateType state_;
|
SrsRtcConnectionStateType state_;
|
||||||
|
@ -439,6 +450,7 @@ public:
|
||||||
srs_error_t on_rtp(char* data, int nb_data);
|
srs_error_t on_rtp(char* data, int nb_data);
|
||||||
srs_error_t on_rtcp(char* data, int nb_data);
|
srs_error_t on_rtcp(char* data, int nb_data);
|
||||||
srs_error_t on_rtcp_feedback(char* buf, int nb_buf);
|
srs_error_t on_rtcp_feedback(char* buf, int nb_buf);
|
||||||
|
void set_hijacker(ISrsRtcConnectionHijacker* h);
|
||||||
public:
|
public:
|
||||||
srs_error_t on_connection_established();
|
srs_error_t on_connection_established();
|
||||||
srs_error_t start_play();
|
srs_error_t start_play();
|
||||||
|
|
Loading…
Reference in a new issue