mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
For #1575, use RTMP redirect as tcUrl and redirect2 as RTMP URL. 3.0.100
This commit is contained in:
parent
7240fe3040
commit
0e750ab3eb
8 changed files with 47 additions and 17 deletions
|
@ -146,6 +146,7 @@ For previous versions, please read:
|
||||||
|
|
||||||
## V3 changes
|
## V3 changes
|
||||||
|
|
||||||
|
* v3.0, 2020-01-16, For [#1575][bug #1575], use RTMP redirect as tcUrl and redirect2 as RTMP URL. 3.0.100
|
||||||
* v3.0, 2020-01-15, For [#1509][bug #1509], decrease the fast vector init size from 64KB to 64B. 3.0.99
|
* v3.0, 2020-01-15, For [#1509][bug #1509], decrease the fast vector init size from 64KB to 64B. 3.0.99
|
||||||
* v3.0, 2020-01-15, For [#1509][bug #1509], release coroutine when source is idle. 3.0.98
|
* v3.0, 2020-01-15, For [#1509][bug #1509], release coroutine when source is idle. 3.0.98
|
||||||
* <strong>v3.0, 2020-01-10, [3.0 alpha8(3.0.97)][r3.0a8] released. 121555 lines.</strong>
|
* <strong>v3.0, 2020-01-10, [3.0 alpha8(3.0.97)][r3.0a8] released. 121555 lines.</strong>
|
||||||
|
@ -1595,6 +1596,7 @@ Winlin
|
||||||
[bug #1255]: https://github.com/ossrs/srs/issues/1255
|
[bug #1255]: https://github.com/ossrs/srs/issues/1255
|
||||||
[bug #1543]: https://github.com/ossrs/srs/issues/1543
|
[bug #1543]: https://github.com/ossrs/srs/issues/1543
|
||||||
[bug #1509]: https://github.com/ossrs/srs/issues/1509
|
[bug #1509]: https://github.com/ossrs/srs/issues/1509
|
||||||
|
[bug #1575]: https://github.com/ossrs/srs/issues/1575
|
||||||
[bug #xxxxxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxxxxx
|
[bug #xxxxxxxxxxxxx]: https://github.com/ossrs/srs/issues/xxxxxxxxxxxxx
|
||||||
|
|
||||||
[exo #828]: https://github.com/google/ExoPlayer/pull/828
|
[exo #828]: https://github.com/google/ExoPlayer/pull/828
|
||||||
|
|
|
@ -417,8 +417,13 @@ srs_error_t SrsEdgeIngester::process_publish_message(SrsCommonMessage* msg, stri
|
||||||
}
|
}
|
||||||
SrsAmf0Object* ex = prop->to_object();
|
SrsAmf0Object* ex = prop->to_object();
|
||||||
|
|
||||||
if ((prop = ex->ensure_property_string("redirect")) == NULL) {
|
// The redirect is tcUrl while redirect2 is RTMP URL.
|
||||||
return err;
|
// https://github.com/ossrs/srs/issues/1575#issuecomment-574999798
|
||||||
|
if ((prop = ex->ensure_property_string("redirect2")) == NULL) {
|
||||||
|
// TODO: FIXME: Remove it when SRS3 released, it's temporarily support for SRS3 alpha versions(a0 to a8).
|
||||||
|
if ((prop = ex->ensure_property_string("redirect")) == NULL) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
redirect = prop->to_str();
|
redirect = prop->to_str();
|
||||||
|
|
||||||
|
|
|
@ -621,8 +621,10 @@ srs_error_t SrsRtmpConn::playing(SrsSource* source)
|
||||||
}
|
}
|
||||||
return srs_error_wrap(err, "discover coworkers, url=%s", url.c_str());
|
return srs_error_wrap(err, "discover coworkers, url=%s", url.c_str());
|
||||||
}
|
}
|
||||||
srs_trace("rtmp: redirect in cluster, from=%s:%d, target=%s:%d, url=%s",
|
|
||||||
req->host.c_str(), req->port, host.c_str(), port, url.c_str());
|
string rurl = srs_generate_rtmp_url(host, port, req->host, req->vhost, req->app, req->stream, req->param);
|
||||||
|
srs_trace("rtmp: redirect in cluster, from=%s:%d, target=%s:%d, url=%s, rurl=%s",
|
||||||
|
req->host.c_str(), req->port, host.c_str(), port, url.c_str(), rurl.c_str());
|
||||||
|
|
||||||
// Ignore if host or port is invalid.
|
// Ignore if host or port is invalid.
|
||||||
if (host.empty() || port == 0) {
|
if (host.empty() || port == 0) {
|
||||||
|
@ -630,7 +632,7 @@ srs_error_t SrsRtmpConn::playing(SrsSource* source)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool accepted = false;
|
bool accepted = false;
|
||||||
if ((err = rtmp->redirect(req, host, port, accepted)) != srs_success) {
|
if ((err = rtmp->redirect(req, rurl, accepted)) != srs_success) {
|
||||||
srs_error_reset(err);
|
srs_error_reset(err);
|
||||||
} else {
|
} else {
|
||||||
return srs_error_new(ERROR_CONTROL_REDIRECT, "redirected");
|
return srs_error_new(ERROR_CONTROL_REDIRECT, "redirected");
|
||||||
|
|
|
@ -217,7 +217,7 @@ void SrsFastVector::push_back(SrsSharedPtrMessage* msg)
|
||||||
for (int i = 0; i < nb_msgs; i++) {
|
for (int i = 0; i < nb_msgs; i++) {
|
||||||
buf[i] = msgs[i];
|
buf[i] = msgs[i];
|
||||||
}
|
}
|
||||||
srs_warn("fast vector incrase %d=>%d", nb_msgs, size);
|
srs_info("fast vector incrase %d=>%d", nb_msgs, size);
|
||||||
|
|
||||||
// use new array.
|
// use new array.
|
||||||
srs_freepa(msgs);
|
srs_freepa(msgs);
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
// The version config.
|
// The version config.
|
||||||
#define VERSION_MAJOR 3
|
#define VERSION_MAJOR 3
|
||||||
#define VERSION_MINOR 0
|
#define VERSION_MINOR 0
|
||||||
#define VERSION_REVISION 99
|
#define VERSION_REVISION 100
|
||||||
|
|
||||||
// The macros generated by configure script.
|
// The macros generated by configure script.
|
||||||
#include <srs_auto_headers.hpp>
|
#include <srs_auto_headers.hpp>
|
||||||
|
|
|
@ -2415,16 +2415,19 @@ srs_error_t SrsRtmpServer::response_connect_app(SrsRequest *req, const char* ser
|
||||||
}
|
}
|
||||||
|
|
||||||
#define SRS_RTMP_REDIRECT_TIMEOUT (3 * SRS_UTIME_SECONDS)
|
#define SRS_RTMP_REDIRECT_TIMEOUT (3 * SRS_UTIME_SECONDS)
|
||||||
srs_error_t SrsRtmpServer::redirect(SrsRequest* r, string host, int port, bool& accepted)
|
srs_error_t SrsRtmpServer::redirect(SrsRequest* r, string url, bool& accepted)
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
string url = srs_generate_rtmp_url(host, port, r->host, r->vhost, r->app, r->stream, r->param);
|
|
||||||
|
|
||||||
SrsAmf0Object* ex = SrsAmf0Any::object();
|
SrsAmf0Object* ex = SrsAmf0Any::object();
|
||||||
ex->set("code", SrsAmf0Any::number(302));
|
ex->set("code", SrsAmf0Any::number(302));
|
||||||
ex->set("redirect", SrsAmf0Any::str(url.c_str()));
|
|
||||||
|
// The redirect is tcUrl while redirect2 is RTMP URL.
|
||||||
|
// https://github.com/ossrs/srs/issues/1575#issuecomment-574999798
|
||||||
|
string tcUrl = srs_path_dirname(url);
|
||||||
|
ex->set("redirect", SrsAmf0Any::str(tcUrl.c_str()));
|
||||||
|
ex->set("redirect2", SrsAmf0Any::str(url.c_str()));
|
||||||
|
|
||||||
SrsOnStatusCallPacket* pkt = new SrsOnStatusCallPacket();
|
SrsOnStatusCallPacket* pkt = new SrsOnStatusCallPacket();
|
||||||
|
|
||||||
|
|
|
@ -707,9 +707,9 @@ public:
|
||||||
// @param server_ip the ip of server.
|
// @param server_ip the ip of server.
|
||||||
virtual srs_error_t response_connect_app(SrsRequest* req, const char* server_ip = NULL);
|
virtual srs_error_t response_connect_app(SrsRequest* req, const char* server_ip = NULL);
|
||||||
// Redirect the connection to another rtmp server.
|
// Redirect the connection to another rtmp server.
|
||||||
// @param the hostname or ip of target.
|
// @param a RTMP url to redirect to.
|
||||||
// @param whether the client accept the redirect.
|
// @param whether the client accept the redirect.
|
||||||
virtual srs_error_t redirect(SrsRequest* r, std::string host, int port, bool& accepted);
|
virtual srs_error_t redirect(SrsRequest* r, std::string url, bool& accepted);
|
||||||
// Reject the connect app request.
|
// Reject the connect app request.
|
||||||
virtual void response_connect_reject(SrsRequest* req, const char* desc);
|
virtual void response_connect_reject(SrsRequest* req, const char* desc);
|
||||||
// Response client the onBWDone message.
|
// Response client the onBWDone message.
|
||||||
|
|
|
@ -1751,7 +1751,8 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect)
|
||||||
string host = "target.net";
|
string host = "target.net";
|
||||||
int port = 8888;
|
int port = 8888;
|
||||||
bool accepted = false;
|
bool accepted = false;
|
||||||
HELPER_EXPECT_SUCCESS(r.redirect(&req, host, port, accepted));
|
string rurl = srs_generate_rtmp_url(host, port, req.host, req.vhost, req.app, req.stream, req.param);
|
||||||
|
HELPER_EXPECT_SUCCESS(r.redirect(&req, rurl, accepted));
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
MockBufferIO tio;
|
MockBufferIO tio;
|
||||||
|
@ -1776,6 +1777,14 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect)
|
||||||
|
|
||||||
prop = ex->get_property("redirect");
|
prop = ex->get_property("redirect");
|
||||||
ASSERT_TRUE(prop && prop->is_string());
|
ASSERT_TRUE(prop && prop->is_string());
|
||||||
|
// The recirect is tcUrl, not RTMP URL.
|
||||||
|
// https://github.com/ossrs/srs/issues/1575#issuecomment-574995475
|
||||||
|
EXPECT_STREQ("rtmp://target.net:8888/live", prop->to_str().c_str());
|
||||||
|
|
||||||
|
prop = ex->get_property("redirect2");
|
||||||
|
ASSERT_TRUE(prop && prop->is_string());
|
||||||
|
// The recirect2 is RTMP URL.
|
||||||
|
// https://github.com/ossrs/srs/issues/1575#issuecomment-574999798
|
||||||
EXPECT_STREQ("rtmp://target.net:8888/live/livestream", prop->to_str().c_str());
|
EXPECT_STREQ("rtmp://target.net:8888/live/livestream", prop->to_str().c_str());
|
||||||
|
|
||||||
srs_freep(msg);
|
srs_freep(msg);
|
||||||
|
@ -1808,7 +1817,8 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect)
|
||||||
string host = "target.net";
|
string host = "target.net";
|
||||||
int port = 8888;
|
int port = 8888;
|
||||||
bool accepted = false;
|
bool accepted = false;
|
||||||
HELPER_EXPECT_SUCCESS(r.redirect(&req, host, port, accepted));
|
string rurl = srs_generate_rtmp_url(host, port, req.host, req.vhost, req.app, req.stream, req.param);
|
||||||
|
HELPER_EXPECT_SUCCESS(r.redirect(&req, rurl, accepted));
|
||||||
EXPECT_TRUE(accepted);
|
EXPECT_TRUE(accepted);
|
||||||
|
|
||||||
if (true) {
|
if (true) {
|
||||||
|
@ -1834,6 +1844,14 @@ VOID TEST(ProtocolRTMPTest, ServerRedirect)
|
||||||
|
|
||||||
prop = ex->get_property("redirect");
|
prop = ex->get_property("redirect");
|
||||||
ASSERT_TRUE(prop && prop->is_string());
|
ASSERT_TRUE(prop && prop->is_string());
|
||||||
|
// The recirect is tcUrl, not RTMP URL.
|
||||||
|
// https://github.com/ossrs/srs/issues/1575#issuecomment-574995475
|
||||||
|
EXPECT_STREQ("rtmp://target.net:8888/live", prop->to_str().c_str());
|
||||||
|
|
||||||
|
prop = ex->get_property("redirect2");
|
||||||
|
ASSERT_TRUE(prop && prop->is_string());
|
||||||
|
// The recirect2 is RTMP URL.
|
||||||
|
// https://github.com/ossrs/srs/issues/1575#issuecomment-574999798
|
||||||
EXPECT_STREQ("rtmp://target.net:8888/live/livestream", prop->to_str().c_str());
|
EXPECT_STREQ("rtmp://target.net:8888/live/livestream", prop->to_str().c_str());
|
||||||
|
|
||||||
srs_freep(msg);
|
srs_freep(msg);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue