add config directive forward_in_turn to support forward streams to one of the server
in forward_in_turn list in turn
正在显示
4 个修改的文件
包含
56 行增加
和
1 行删除
| @@ -9,6 +9,8 @@ daemon off; | @@ -9,6 +9,8 @@ daemon off; | ||
| 9 | srs_log_tank console; | 9 | srs_log_tank console; |
| 10 | vhost __defaultVhost__ { | 10 | vhost __defaultVhost__ { |
| 11 | forward 127.0.0.1:19350; | 11 | forward 127.0.0.1:19350; |
| 12 | +#select on of the listed servers in turn to forward,not all of them | ||
| 13 | + forward_in_turn 127.0.0.1:19351 127.0.0.1:19352; | ||
| 12 | #the forward destination server type,default true. if the server is not srs server,connect app maybe fail,try config as false | 14 | #the forward destination server type,default true. if the server is not srs server,connect app maybe fail,try config as false |
| 13 | forward_server_srs true; | 15 | forward_server_srs true; |
| 14 | } | 16 | } |
| @@ -1823,7 +1823,7 @@ int SrsConfig::check_config() | @@ -1823,7 +1823,7 @@ int SrsConfig::check_config() | ||
| 1823 | && n != "dvr" && n != "ingest" && n != "hls" && n != "http_hooks" | 1823 | && n != "dvr" && n != "ingest" && n != "hls" && n != "http_hooks" |
| 1824 | && n != "gop_cache" && n != "queue_length" | 1824 | && n != "gop_cache" && n != "queue_length" |
| 1825 | && n != "refer" && n != "refer_publish" && n != "refer_play" | 1825 | && n != "refer" && n != "refer_publish" && n != "refer_play" |
| 1826 | - && n != "forward" && n != "forward_server_srs" && n != "transcode" && n != "bandcheck" | 1826 | + && n != "forward" && n != "forward_server_srs" && n != "forward_in_turn" && n != "transcode" && n != "bandcheck" |
| 1827 | && n != "time_jitter" && n != "mix_correct" | 1827 | && n != "time_jitter" && n != "mix_correct" |
| 1828 | && n != "atc" && n != "atc_auto" | 1828 | && n != "atc" && n != "atc_auto" |
| 1829 | && n != "debug_srs_upnode" | 1829 | && n != "debug_srs_upnode" |
| @@ -2772,6 +2772,17 @@ bool SrsConfig::get_forward_server_srs(string vhost) | @@ -2772,6 +2772,17 @@ bool SrsConfig::get_forward_server_srs(string vhost) | ||
| 2772 | return conf->arg0()=="true"; | 2772 | return conf->arg0()=="true"; |
| 2773 | } | 2773 | } |
| 2774 | 2774 | ||
| 2775 | +SrsConfDirective* SrsConfig::get_forward_in_turn(string vhost) | ||
| 2776 | +{ | ||
| 2777 | + SrsConfDirective* conf = get_vhost(vhost); | ||
| 2778 | + | ||
| 2779 | + if (!conf) { | ||
| 2780 | + return NULL; | ||
| 2781 | + } | ||
| 2782 | + | ||
| 2783 | + return conf->get("forward_in_turn"); | ||
| 2784 | +} | ||
| 2785 | + | ||
| 2775 | SrsConfDirective* SrsConfig::get_vhost_http_hooks(string vhost) | 2786 | SrsConfDirective* SrsConfig::get_vhost_http_hooks(string vhost) |
| 2776 | { | 2787 | { |
| 2777 | SrsConfDirective* conf = get_vhost(vhost); | 2788 | SrsConfDirective* conf = get_vhost(vhost); |
| @@ -573,6 +573,10 @@ public: | @@ -573,6 +573,10 @@ public: | ||
| 573 | * get the forward server type of vhost,if srs return true,else false. | 573 | * get the forward server type of vhost,if srs return true,else false. |
| 574 | */ | 574 | */ |
| 575 | virtual bool get_forward_server_srs(std::string vhost); | 575 | virtual bool get_forward_server_srs(std::string vhost); |
| 576 | + /** | ||
| 577 | + * get the forward_in_turn directive of vhost. | ||
| 578 | + */ | ||
| 579 | + virtual SrsConfDirective* get_forward_in_turn(std::string vhost); | ||
| 576 | // http_hooks section | 580 | // http_hooks section |
| 577 | private: | 581 | private: |
| 578 | /** | 582 | /** |
| @@ -2448,6 +2448,44 @@ int SrsSource::create_forwarders() | @@ -2448,6 +2448,44 @@ int SrsSource::create_forwarders() | ||
| 2448 | } | 2448 | } |
| 2449 | } | 2449 | } |
| 2450 | 2450 | ||
| 2451 | + //forward a server in forward_in_turn | ||
| 2452 | + static int server_index = 0; | ||
| 2453 | + conf = _srs_config->get_forward_in_turn(_req->vhost); | ||
| 2454 | + if(!conf){ | ||
| 2455 | + return ret; | ||
| 2456 | + } | ||
| 2457 | + | ||
| 2458 | + int servers_size = (int)conf->args.size(); | ||
| 2459 | + if(servers_size <= 0){ | ||
| 2460 | + return ret; | ||
| 2461 | + } | ||
| 2462 | + | ||
| 2463 | + if(server_index >= servers_size){ | ||
| 2464 | + server_index = 0; | ||
| 2465 | + } | ||
| 2466 | + | ||
| 2467 | + std::string forward_server = conf->args.at(server_index); | ||
| 2468 | + server_index ++; | ||
| 2469 | + | ||
| 2470 | + SrsForwarder* forwarder = new SrsForwarder(this); | ||
| 2471 | + forwarders.push_back(forwarder); | ||
| 2472 | + | ||
| 2473 | + // initialize the forwarder with request. | ||
| 2474 | + if ((ret = forwarder->initialize(_req, forward_server)) != ERROR_SUCCESS) { | ||
| 2475 | + return ret; | ||
| 2476 | + } | ||
| 2477 | + | ||
| 2478 | + double queue_size = _srs_config->get_queue_length(_req->vhost); | ||
| 2479 | + forwarder->set_queue_size(queue_size); | ||
| 2480 | + | ||
| 2481 | + if ((ret = forwarder->on_publish()) != ERROR_SUCCESS) { | ||
| 2482 | + srs_error("start forwarder failed. " | ||
| 2483 | + "vhost=%s, app=%s, stream=%s, forward-to=%s", | ||
| 2484 | + _req->vhost.c_str(), _req->app.c_str(), _req->stream.c_str(), | ||
| 2485 | + forward_server.c_str()); | ||
| 2486 | + return ret; | ||
| 2487 | + } | ||
| 2488 | + | ||
| 2451 | return ret; | 2489 | return ret; |
| 2452 | } | 2490 | } |
| 2453 | 2491 |
-
请 注册 或 登录 后发表评论