正在显示
5 个修改的文件
包含
22 行增加
和
43 行删除
@@ -121,6 +121,7 @@ void SrsEdgeIngester::stop() | @@ -121,6 +121,7 @@ void SrsEdgeIngester::stop() | ||
121 | int SrsEdgeIngester::cycle() | 121 | int SrsEdgeIngester::cycle() |
122 | { | 122 | { |
123 | int ret = ERROR_SUCCESS; | 123 | int ret = ERROR_SUCCESS; |
124 | + | ||
124 | _source->on_source_id_changed(_srs_context->get_id()); | 125 | _source->on_source_id_changed(_srs_context->get_id()); |
125 | 126 | ||
126 | std::string ep_server, ep_port; | 127 | std::string ep_server, ep_port; |
@@ -384,8 +385,8 @@ int SrsEdgeIngester::connect_server(string& ep_server, string& ep_port) | @@ -384,8 +385,8 @@ int SrsEdgeIngester::connect_server(string& ep_server, string& ep_port) | ||
384 | 385 | ||
385 | kbps->set_io(io, io); | 386 | kbps->set_io(io, io); |
386 | 387 | ||
387 | - srs_trace("edge pull connected, can_publish=%d, url=%s/%s, server=%s:%d", | ||
388 | - _source->can_publish(), _req->tcUrl.c_str(), _req->stream.c_str(), server.c_str(), port); | 388 | + srs_trace("edge pull connected, url=%s/%s, server=%s:%d", |
389 | + _req->tcUrl.c_str(), _req->stream.c_str(), server.c_str(), port); | ||
389 | 390 | ||
390 | return ret; | 391 | return ret; |
391 | } | 392 | } |
@@ -424,13 +424,6 @@ int SrsRtmpConn::stream_service_cycle() | @@ -424,13 +424,6 @@ int SrsRtmpConn::stream_service_cycle() | ||
424 | } | 424 | } |
425 | srs_assert(source != NULL); | 425 | srs_assert(source != NULL); |
426 | 426 | ||
427 | - // check ASAP, to fail it faster if invalid. | ||
428 | - if (type != SrsRtmpConnPlay) { | ||
429 | - if ((ret = prepare_publish(source, vhost_is_edge)) != ERROR_SUCCESS) { | ||
430 | - return ret; | ||
431 | - } | ||
432 | - } | ||
433 | - | ||
434 | // update the statistic when source disconveried. | 427 | // update the statistic when source disconveried. |
435 | SrsStatistic* stat = SrsStatistic::instance(); | 428 | SrsStatistic* stat = SrsStatistic::instance(); |
436 | if ((ret = stat->on_client(_srs_context->get_id(), req)) != ERROR_SUCCESS) { | 429 | if ((ret = stat->on_client(_srs_context->get_id(), req)) != ERROR_SUCCESS) { |
@@ -438,6 +431,19 @@ int SrsRtmpConn::stream_service_cycle() | @@ -438,6 +431,19 @@ int SrsRtmpConn::stream_service_cycle() | ||
438 | return ret; | 431 | return ret; |
439 | } | 432 | } |
440 | 433 | ||
434 | + // check ASAP, to fail it faster if invalid. | ||
435 | + if (type != SrsRtmpConnPlay) { | ||
436 | + // check publish available | ||
437 | + if (!source->can_publish(vhost_is_edge)) { | ||
438 | + ret = ERROR_SYSTEM_STREAM_BUSY; | ||
439 | + srs_warn("stream %s is already publishing. ret=%d", | ||
440 | + req->get_stream_url().c_str(), ret); | ||
441 | + // to delay request | ||
442 | + st_usleep(SRS_STREAM_BUSY_SLEEP_US); | ||
443 | + return ret; | ||
444 | + } | ||
445 | + } | ||
446 | + | ||
441 | bool enabled_cache = _srs_config->get_gop_cache(req->vhost); | 447 | bool enabled_cache = _srs_config->get_gop_cache(req->vhost); |
442 | srs_trace("source url=%s, ip=%s, cache=%d, is_edge=%d, source_id=%d[%d]", | 448 | srs_trace("source url=%s, ip=%s, cache=%d, is_edge=%d, source_id=%d[%d]", |
443 | req->get_stream_url().c_str(), ip.c_str(), enabled_cache, vhost_is_edge, | 449 | req->get_stream_url().c_str(), ip.c_str(), enabled_cache, vhost_is_edge, |
@@ -1253,31 +1259,6 @@ int SrsRtmpConn::do_token_traverse_auth(SrsRtmpClient* client) | @@ -1253,31 +1259,6 @@ int SrsRtmpConn::do_token_traverse_auth(SrsRtmpClient* client) | ||
1253 | return ret; | 1259 | return ret; |
1254 | } | 1260 | } |
1255 | 1261 | ||
1256 | -int SrsRtmpConn::prepare_publish(SrsSource* source, bool vhost_is_edge) | ||
1257 | -{ | ||
1258 | - int ret = ERROR_SUCCESS; | ||
1259 | - srs_assert(source); | ||
1260 | - | ||
1261 | - // check publish available | ||
1262 | - bool can_publish = false; | ||
1263 | - if (vhost_is_edge) { | ||
1264 | - can_publish = source->proxy_can_publish(); | ||
1265 | - } else { | ||
1266 | - can_publish = source->can_publish(); | ||
1267 | - } | ||
1268 | - | ||
1269 | - if (!can_publish) { | ||
1270 | - ret = ERROR_SYSTEM_STREAM_BUSY; | ||
1271 | - srs_warn("stream %s is already publishing. ret=%d", | ||
1272 | - req->get_stream_url().c_str(), ret); | ||
1273 | - // to delay request | ||
1274 | - st_usleep(SRS_STREAM_BUSY_SLEEP_US); | ||
1275 | - return ret; | ||
1276 | - } | ||
1277 | - | ||
1278 | - return ret; | ||
1279 | -} | ||
1280 | - | ||
1281 | int SrsRtmpConn::http_hooks_on_connect() | 1262 | int SrsRtmpConn::http_hooks_on_connect() |
1282 | { | 1263 | { |
1283 | int ret = ERROR_SUCCESS; | 1264 | int ret = ERROR_SUCCESS; |
@@ -123,7 +123,6 @@ private: | @@ -123,7 +123,6 @@ private: | ||
123 | virtual int check_edge_token_traverse_auth(); | 123 | virtual int check_edge_token_traverse_auth(); |
124 | virtual int connect_server(int origin_index, st_netfd_t* pstsock); | 124 | virtual int connect_server(int origin_index, st_netfd_t* pstsock); |
125 | virtual int do_token_traverse_auth(SrsRtmpClient* client); | 125 | virtual int do_token_traverse_auth(SrsRtmpClient* client); |
126 | - virtual int prepare_publish(SrsSource* source, bool vhost_is_edge); | ||
127 | private: | 126 | private: |
128 | virtual int http_hooks_on_connect(); | 127 | virtual int http_hooks_on_connect(); |
129 | virtual void http_hooks_on_close(); | 128 | virtual void http_hooks_on_close(); |
@@ -1350,14 +1350,13 @@ int SrsSource::source_id() | @@ -1350,14 +1350,13 @@ int SrsSource::source_id() | ||
1350 | return _source_id; | 1350 | return _source_id; |
1351 | } | 1351 | } |
1352 | 1352 | ||
1353 | -bool SrsSource::can_publish() | ||
1354 | -{ | ||
1355 | - return _can_publish; | ||
1356 | -} | ||
1357 | - | ||
1358 | -bool SrsSource::proxy_can_publish() | 1353 | +bool SrsSource::can_publish(bool is_edge) |
1359 | { | 1354 | { |
1355 | + if (is_edge) { | ||
1360 | return publish_edge->can_publish(); | 1356 | return publish_edge->can_publish(); |
1357 | + } | ||
1358 | + | ||
1359 | + return _can_publish; | ||
1361 | } | 1360 | } |
1362 | 1361 | ||
1363 | int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata) | 1362 | int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata) |
@@ -537,8 +537,7 @@ public: | @@ -537,8 +537,7 @@ public: | ||
537 | virtual int source_id(); | 537 | virtual int source_id(); |
538 | // logic data methods | 538 | // logic data methods |
539 | public: | 539 | public: |
540 | - virtual bool can_publish(); | ||
541 | - virtual bool proxy_can_publish(); | 540 | + virtual bool can_publish(bool is_edge); |
542 | virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata); | 541 | virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata); |
543 | public: | 542 | public: |
544 | virtual int on_audio(SrsCommonMessage* audio); | 543 | virtual int on_audio(SrsCommonMessage* audio); |
-
请 注册 或 登录 后发表评论