RTC: Connection support hijack

pull/1925/head
winlin 5 years ago
parent b0590ef4fe
commit 8c9935db44

@ -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…
Cancel
Save