Refactor RTC, create source once

pull/1753/head
winlin 5 years ago
parent cef1ba9385
commit e4329fd1a0

@ -46,7 +46,7 @@
</div>
<label></label>
<video id="rtc_media_player" controls autoplay></video>
<video id="rtc_media_player" autoplay muted></video>
<footer>
<p></p>

@ -2145,29 +2145,20 @@ srs_error_t SrsRtcPublisher::notify(int type, srs_utime_t interval, srs_utime_t
SrsRtcSession::SrsRtcSession(SrsRtcServer* s, SrsRequest* r, const std::string& un, int context_id)
{
rtc_server = s;
session_state = INIT;
dtls_session = new SrsDtlsSession(this);
// TODO: FIXME: Check error.
dtls_session->initialize(req);
sender = NULL;
username = un;
last_stun_time = srs_get_system_time();
req = r->copy();
source = NULL;
cid = context_id;
encrypt = true;
// TODO: FIXME: Support reload.
sessionStunTimeout = _srs_config->get_rtc_stun_timeout(req->vhost);
source = NULL;
publisher = NULL;
sender = NULL;
rtc_server = s;
dtls_session = new SrsDtlsSession(this);
session_state = INIT;
last_stun_time = 0;
sessionStunTimeout = 0;
}
SrsRtcSession::~SrsRtcSession()
@ -2188,6 +2179,21 @@ void SrsRtcSession::switch_to_context()
_srs_context->set_id(cid);
}
srs_error_t SrsRtcSession::initialize()
{
srs_error_t err = srs_success;
if ((err = dtls_session->initialize(req)) != srs_success) {
return srs_error_wrap(err, "init");
}
// TODO: FIXME: Support reload.
sessionStunTimeout = _srs_config->get_rtc_stun_timeout(req->vhost);
last_stun_time = srs_get_system_time();
return err;
}
srs_error_t SrsRtcSession::on_stun(SrsUdpMuxSocket* skt, SrsStunPacket* stun_req)
{
srs_error_t err = srs_success;
@ -3110,7 +3116,13 @@ srs_error_t SrsRtcServer::create_rtc_session(
int cid = _srs_context->get_id();
SrsRtcSession* session = new SrsRtcSession(this, req, username, cid);
if ((err = session->initialize()) != srs_success) {
srs_freep(session);
return srs_error_wrap(err, "init");
}
map_username_session.insert(make_pair(username, session));
*psession = session;
local_sdp.set_ice_ufrag(local_ufrag);
local_sdp.set_ice_pwd(local_pwd);
@ -3132,8 +3144,6 @@ srs_error_t SrsRtcServer::create_rtc_session(
session->set_session_state(WAITING_STUN);
*psession = session;
return err;
}

@ -354,6 +354,7 @@ public:
void switch_to_context();
public:
srs_error_t initialize();
srs_error_t on_stun(SrsUdpMuxSocket* skt, SrsStunPacket* stun_req);
srs_error_t on_dtls(SrsUdpMuxSocket* skt);
srs_error_t on_rtcp(SrsUdpMuxSocket* skt);

Loading…
Cancel
Save