From 574ae58adc0646bb86622ff86acd0c84c9c73637 Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 7 Apr 2020 11:36:26 +0800 Subject: [PATCH] For #307, support mock server eip by API --- trunk/research/players/rtc_player.html | 2 ++ trunk/src/app/srs_app_http_api.cpp | 9 ++++++--- trunk/src/app/srs_app_rtc_conn.cpp | 14 ++++++++++---- trunk/src/app/srs_app_rtc_conn.hpp | 2 +- trunk/src/service/srs_service_st.cpp | 2 +- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/trunk/research/players/rtc_player.html b/trunk/research/players/rtc_player.html index dcae3f092..e1eb61eeb 100644 --- a/trunk/research/players/rtc_player.html +++ b/trunk/research/players/rtc_player.html @@ -94,6 +94,8 @@ url += '&' + key + '=' + urlObject.user_query[key]; } } + // Replace /rtc/v1/play/&k=v to /rtc/v1/play/?k=v + url = url.replace(api + '&', api + '?'); // @see https://github.com/rtcdn/rtcdn-draft var data = { diff --git a/trunk/src/app/srs_app_http_api.cpp b/trunk/src/app/srs_app_http_api.cpp index a8166f977..70f06f814 100644 --- a/trunk/src/app/srs_app_http_api.cpp +++ b/trunk/src/app/srs_app_http_api.cpp @@ -879,8 +879,11 @@ srs_error_t SrsGoApiRtcPlay::do_serve_http(ISrsHttpResponseWriter* w, ISrsHttpMe srs_discovery_tc_url(tcUrl, schema, host, vhost, app, stream_name, port, param); } - srs_trace("RTC play %s, api=%s, clientip=%s, app=%s, stream=%s, offer=%dB", - streamurl.c_str(), api.c_str(), clientip.c_str(), app.c_str(), stream_name.c_str(), remote_sdp_str.length()); + // For client to specifies the EIP of server. + string eip = r->query_get("eip"); + + srs_trace("RTC play %s, api=%s, clientip=%s, app=%s, stream=%s, offer=%dB, eip=%s", + streamurl.c_str(), api.c_str(), clientip.c_str(), app.c_str(), stream_name.c_str(), remote_sdp_str.length(), eip.c_str()); // TODO: FIXME: It seems remote_sdp doesn't represents the full SDP information. SrsSdp remote_sdp; @@ -903,7 +906,7 @@ srs_error_t SrsGoApiRtcPlay::do_serve_http(ISrsHttpResponseWriter* w, ISrsHttpMe // TODO: FIXME: Maybe need a better name? // TODO: FIXME: When server enabled, but vhost disabled, should report error. - SrsRtcSession* rtc_session = rtc_server->create_rtc_session(request, remote_sdp, local_sdp); + SrsRtcSession* rtc_session = rtc_server->create_rtc_session(request, remote_sdp, local_sdp, eip); ostringstream os; if ((err = local_sdp.encode(os)) != srs_success) { diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 6ab3ed171..63eebc8dd 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -1152,7 +1152,7 @@ srs_error_t SrsRtcServer::listen_api() return err; } -SrsRtcSession* SrsRtcServer::create_rtc_session(const SrsRequest& req, const SrsSdp& remote_sdp, SrsSdp& local_sdp) +SrsRtcSession* SrsRtcServer::create_rtc_session(const SrsRequest& req, const SrsSdp& remote_sdp, SrsSdp& local_sdp, const string& mock_eip) { std::string local_pwd = gen_random_str(32); std::string local_ufrag = ""; @@ -1173,9 +1173,15 @@ SrsRtcSession* SrsRtcServer::create_rtc_session(const SrsRequest& req, const Srs local_sdp.set_ice_pwd(local_pwd); local_sdp.set_fingerprint_algo("sha-256"); local_sdp.set_fingerprint(SrsDtls::instance()->get_fingerprint()); - std::vector candidate_ips = get_candidate_ips(); - for (int i = 0; i < (int)candidate_ips.size(); ++i) { - local_sdp.add_candidate(candidate_ips[i], _srs_config->get_rtc_server_listen(), "host"); + + // We allows to mock the eip of server. + if (!mock_eip.empty()) { + local_sdp.add_candidate(mock_eip, _srs_config->get_rtc_server_listen(), "host"); + } else { + std::vector candidate_ips = get_candidate_ips(); + for (int i = 0; i < (int)candidate_ips.size(); ++i) { + local_sdp.add_candidate(candidate_ips[i], _srs_config->get_rtc_server_listen(), "host"); + } } session->set_remote_sdp(remote_sdp); diff --git a/trunk/src/app/srs_app_rtc_conn.hpp b/trunk/src/app/srs_app_rtc_conn.hpp index 8746653d1..9d43be88d 100644 --- a/trunk/src/app/srs_app_rtc_conn.hpp +++ b/trunk/src/app/srs_app_rtc_conn.hpp @@ -233,7 +233,7 @@ public: virtual srs_error_t on_udp_packet(SrsUdpMuxSocket* udp_mux_skt); public: virtual srs_error_t listen_api(); - SrsRtcSession* create_rtc_session(const SrsRequest& req, const SrsSdp& remote_sdp, SrsSdp& local_sdp); + SrsRtcSession* create_rtc_session(const SrsRequest& req, const SrsSdp& remote_sdp, SrsSdp& local_sdp, const std::string& mock_eip); bool insert_into_id_sessions(const std::string& peer_id, SrsRtcSession* rtc_session); void check_and_clean_timeout_session(); private: diff --git a/trunk/src/service/srs_service_st.cpp b/trunk/src/service/srs_service_st.cpp index c9650379e..3d36023ba 100644 --- a/trunk/src/service/srs_service_st.cpp +++ b/trunk/src/service/srs_service_st.cpp @@ -429,7 +429,7 @@ int srs_sendmmsg(srs_netfd_t stfd, struct mmsghdr *msgvec, unsigned int vlen, in return vlen; #else if (vlen == 1) { - #if 0 + #if 1 int r0 = srs_sendmsg(stfd, &msgvec->msg_hdr, flags, timeout); if (r0 < 0) { return r0;