From ef64c5e2bda8d40f891759a5c6a8e86f5095c33c Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 3 May 2020 13:11:38 +0800 Subject: [PATCH] Refine RTC, reject when config disabled. --- trunk/research/players/rtc_player.html | 4 ++++ trunk/research/players/rtc_publisher.html | 9 +++++++++ trunk/src/app/srs_app_config.cpp | 2 +- trunk/src/app/srs_app_config.hpp | 2 +- trunk/src/app/srs_app_http_api.cpp | 22 ++++++++++++++++++++++ trunk/src/app/srs_app_sdp.cpp | 2 +- trunk/src/kernel/srs_kernel_error.hpp | 1 + 7 files changed, 39 insertions(+), 3 deletions(-) diff --git a/trunk/research/players/rtc_player.html b/trunk/research/players/rtc_player.html index c78fcdb5b..03d23bd13 100644 --- a/trunk/research/players/rtc_player.html +++ b/trunk/research/players/rtc_player.html @@ -112,6 +112,9 @@ contentType:'application/json', dataType: 'json' }).done(function(data) { console.log("Got answer: ", data); + if (data.code) { + reject(data); return; + } resolve(data.sdp); }).fail(function(reason){ reject(reason); @@ -120,6 +123,7 @@ }).then(function(answer) { return pc.setRemoteDescription(new RTCSessionDescription({type: 'answer', sdp: answer})); }).catch(function(reason) { + pc.close(); $('#rtc_media_player').hide(); throw reason; }); }; diff --git a/trunk/research/players/rtc_publisher.html b/trunk/research/players/rtc_publisher.html index ce183782d..0035a20aa 100644 --- a/trunk/research/players/rtc_publisher.html +++ b/trunk/research/players/rtc_publisher.html @@ -124,6 +124,9 @@ contentType:'application/json', dataType: 'json' }).done(function(data) { console.log("Got answer: ", data); + if (data.code) { + reject(data); return; + } resolve(data.sdp); }).fail(function(reason){ reject(reason); @@ -132,6 +135,12 @@ }).then(function(answer) { return pc.setRemoteDescription(new RTCSessionDescription({type: 'answer', sdp: answer})); }).catch(function(reason) { + pc.getLocalStreams().forEach(function(stream){ + stream.getTracks().forEach(function(track) { + track.stop(); + }); + }); + pc.close(); $('#rtc_media_player').hide(); throw reason; }); }; diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index b234d3f38..3f740346a 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -4679,7 +4679,7 @@ srs_utime_t SrsConfig::get_stream_caster_gb28181_sip_query_catalog_interval(SrsC return (srs_utime_t)(::atoi(conf->arg0().c_str()) * SRS_UTIME_SECONDS); } -int SrsConfig::get_rtc_server_enabled() +bool SrsConfig::get_rtc_server_enabled() { SrsConfDirective* conf = root->get("rtc_server"); return get_rtc_server_enabled(conf); diff --git a/trunk/src/app/srs_app_config.hpp b/trunk/src/app/srs_app_config.hpp index ab9ac5ac2..44d4ccb00 100644 --- a/trunk/src/app/srs_app_config.hpp +++ b/trunk/src/app/srs_app_config.hpp @@ -521,7 +521,7 @@ public: // rtc section public: - virtual int get_rtc_server_enabled(); + virtual bool get_rtc_server_enabled(); virtual bool get_rtc_server_enabled(SrsConfDirective* conf); virtual int get_rtc_server_listen(); virtual std::string get_rtc_server_candidates(); diff --git a/trunk/src/app/srs_app_http_api.cpp b/trunk/src/app/srs_app_http_api.cpp index 50ca4a328..57b67453e 100644 --- a/trunk/src/app/srs_app_http_api.cpp +++ b/trunk/src/app/srs_app_http_api.cpp @@ -918,6 +918,17 @@ srs_error_t SrsGoApiRtcPlay::do_serve_http(ISrsHttpResponseWriter* w, ISrsHttpMe request.vhost = parsed_vhost->arg0(); } + // Whether enabled. + bool server_enabled = _srs_config->get_rtc_server_enabled(); + bool rtc_enabled = _srs_config->get_rtc_enabled(request.vhost); + if (server_enabled && !rtc_enabled) { + srs_warn("RTC disabled in vhost %s", request.vhost.c_str()); + } + if (!server_enabled || !rtc_enabled) { + return srs_error_new(ERROR_RTC_DISABLED, "Disabled server=%d, rtc=%d, vhost=%s", + server_enabled, rtc_enabled, request.vhost.c_str()); + } + // TODO: FIXME: Maybe need a better name? // TODO: FIXME: When server enabled, but vhost disabled, should report error. SrsRtcSession* rtc_session = NULL; @@ -1232,6 +1243,17 @@ srs_error_t SrsGoApiRtcPublish::do_serve_http(ISrsHttpResponseWriter* w, ISrsHtt request.vhost = parsed_vhost->arg0(); } + // Whether enabled. + bool server_enabled = _srs_config->get_rtc_server_enabled(); + bool rtc_enabled = _srs_config->get_rtc_enabled(request.vhost); + if (server_enabled && !rtc_enabled) { + srs_warn("RTC disabled in vhost %s", request.vhost.c_str()); + } + if (!server_enabled || !rtc_enabled) { + return srs_error_new(ERROR_RTC_DISABLED, "Disabled server=%d, rtc=%d, vhost=%s", + server_enabled, rtc_enabled, request.vhost.c_str()); + } + // TODO: FIXME: Maybe need a better name? // TODO: FIXME: When server enabled, but vhost disabled, should report error. SrsRtcSession* rtc_session = NULL; diff --git a/trunk/src/app/srs_app_sdp.cpp b/trunk/src/app/srs_app_sdp.cpp index 9fc227be6..0dc001f60 100644 --- a/trunk/src/app/srs_app_sdp.cpp +++ b/trunk/src/app/srs_app_sdp.cpp @@ -528,7 +528,7 @@ srs_error_t SrsMediaDesc::parse_attr_mid(const std::string& value) std::istringstream is(value); // mid_ means m-line id FETCH(is, mid_); - srs_trace("mid=%s", mid_.c_str()); + srs_verbose("mid=%s", mid_.c_str()); return err; } diff --git a/trunk/src/kernel/srs_kernel_error.hpp b/trunk/src/kernel/srs_kernel_error.hpp index 9f88c1dda..597d0bb32 100644 --- a/trunk/src/kernel/srs_kernel_error.hpp +++ b/trunk/src/kernel/srs_kernel_error.hpp @@ -349,6 +349,7 @@ #define ERROR_RTC_SDP_EXCHANGE 5018 #define ERROR_RTC_API_BODY 5019 #define ERROR_RTC_SOURCE_BUSY 5020 +#define ERROR_RTC_DISABLED 5021 /////////////////////////////////////////////////////// // GB28181 API error.