fix bug: using port of input source server as the input port of the source of transcoding
正在显示
8 个修改的文件
包含
26 行增加
和
25 行删除
| @@ -96,7 +96,7 @@ int SrsEdgeIngester::start() | @@ -96,7 +96,7 @@ int SrsEdgeIngester::start() | ||
| 96 | { | 96 | { |
| 97 | int ret = ERROR_SUCCESS; | 97 | int ret = ERROR_SUCCESS; |
| 98 | 98 | ||
| 99 | - if ((ret = _source->on_publish()) != ERROR_SUCCESS) { | 99 | + if ((ret = _source->on_publish(_req)) != ERROR_SUCCESS) { |
| 100 | srs_error("edge pull stream then publish to edge failed. ret=%d", ret); | 100 | srs_error("edge pull stream then publish to edge failed. ret=%d", ret); |
| 101 | return ret; | 101 | return ret; |
| 102 | } | 102 | } |
| @@ -253,6 +253,8 @@ int SrsEncoder::parse_ffmpeg(SrsRequest* req, SrsConfDirective* conf) | @@ -253,6 +253,8 @@ int SrsEncoder::parse_ffmpeg(SrsRequest* req, SrsConfDirective* conf) | ||
| 253 | return ret; | 253 | return ret; |
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | +extern char rtmp_port[16]; | ||
| 257 | + | ||
| 256 | int SrsEncoder::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsRequest* req, SrsConfDirective* engine) | 258 | int SrsEncoder::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsRequest* req, SrsConfDirective* engine) |
| 257 | { | 259 | { |
| 258 | int ret = ERROR_SUCCESS; | 260 | int ret = ERROR_SUCCESS; |
| @@ -263,7 +265,7 @@ int SrsEncoder::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsRequest* req, SrsConfDir | @@ -263,7 +265,7 @@ int SrsEncoder::initialize_ffmpeg(SrsFFMPEG* ffmpeg, SrsRequest* req, SrsConfDir | ||
| 263 | input = "rtmp://"; | 265 | input = "rtmp://"; |
| 264 | input += SRS_CONSTS_LOCALHOST; | 266 | input += SRS_CONSTS_LOCALHOST; |
| 265 | input += ":"; | 267 | input += ":"; |
| 266 | - input += req->port; | 268 | + input += rtmp_port; |
| 267 | input += "/"; | 269 | input += "/"; |
| 268 | input += req->app; | 270 | input += req->app; |
| 269 | input += "?vhost="; | 271 | input += "?vhost="; |
| @@ -82,7 +82,7 @@ SrsForwarder::~SrsForwarder() | @@ -82,7 +82,7 @@ SrsForwarder::~SrsForwarder() | ||
| 82 | int SrsForwarder::check_dead_loop(SrsRequest* req, std::string ep_forward) | 82 | int SrsForwarder::check_dead_loop(SrsRequest* req, std::string ep_forward) |
| 83 | { | 83 | { |
| 84 | int ret = ERROR_SUCCESS; | 84 | int ret = ERROR_SUCCESS; |
| 85 | - std::string server, port, tc_url; | 85 | + std::string server, port; |
| 86 | 86 | ||
| 87 | server = ep_forward; | 87 | server = ep_forward; |
| 88 | port = SRS_CONSTS_RTMP_DEFAULT_PORT; | 88 | port = SRS_CONSTS_RTMP_DEFAULT_PORT; |
| @@ -94,16 +94,12 @@ int SrsForwarder::check_dead_loop(SrsRequest* req, std::string ep_forward) | @@ -94,16 +94,12 @@ int SrsForwarder::check_dead_loop(SrsRequest* req, std::string ep_forward) | ||
| 94 | server = ep_forward.substr(0, pos); | 94 | server = ep_forward.substr(0, pos); |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | - // generate tcUrl | ||
| 98 | - tc_url = srs_generate_tc_url(server, req->vhost, req->app, port, req->param); | ||
| 99 | - | ||
| 100 | // dead loop check | 97 | // dead loop check |
| 101 | std::string source_ep = "rtmp://"; | 98 | std::string source_ep = "rtmp://"; |
| 102 | source_ep += req->host; | 99 | source_ep += req->host; |
| 103 | source_ep += ":"; | 100 | source_ep += ":"; |
| 104 | source_ep += req->port; | 101 | source_ep += req->port; |
| 105 | - source_ep += "?vhost="; | ||
| 106 | - source_ep += req->vhost; | 102 | + |
| 107 | 103 | ||
| 108 | std::string dest_ep = "rtmp://"; | 104 | std::string dest_ep = "rtmp://"; |
| 109 | if (ep_forward == SRS_CONSTS_LOCALHOST) { | 105 | if (ep_forward == SRS_CONSTS_LOCALHOST) { |
| @@ -114,8 +110,6 @@ int SrsForwarder::check_dead_loop(SrsRequest* req, std::string ep_forward) | @@ -114,8 +110,6 @@ int SrsForwarder::check_dead_loop(SrsRequest* req, std::string ep_forward) | ||
| 114 | } | 110 | } |
| 115 | dest_ep += ":"; | 111 | dest_ep += ":"; |
| 116 | dest_ep += port; | 112 | dest_ep += port; |
| 117 | - dest_ep += "?vhost="; | ||
| 118 | - dest_ep += req->vhost; | ||
| 119 | 113 | ||
| 120 | if (source_ep == dest_ep) { | 114 | if (source_ep == dest_ep) { |
| 121 | ret = ERROR_SYSTEM_FORWARD_LOOP; | 115 | ret = ERROR_SYSTEM_FORWARD_LOOP; |
| @@ -986,7 +986,7 @@ int SrsRtmpConn::acquire_publish(SrsSource* source, bool is_edge) | @@ -986,7 +986,7 @@ int SrsRtmpConn::acquire_publish(SrsSource* source, bool is_edge) | ||
| 986 | return ret; | 986 | return ret; |
| 987 | } | 987 | } |
| 988 | } else { | 988 | } else { |
| 989 | - if ((ret = source->on_publish()) != ERROR_SUCCESS) { | 989 | + if ((ret = source->on_publish(req)) != ERROR_SUCCESS) { |
| 990 | srs_error("notify publish failed. ret=%d", ret); | 990 | srs_error("notify publish failed. ret=%d", ret); |
| 991 | return ret; | 991 | return ret; |
| 992 | } | 992 | } |
| @@ -1068,6 +1068,8 @@ int SrsServer::do_cycle() | @@ -1068,6 +1068,8 @@ int SrsServer::do_cycle() | ||
| 1068 | return ret; | 1068 | return ret; |
| 1069 | } | 1069 | } |
| 1070 | 1070 | ||
| 1071 | +char rtmp_port[16] = SRS_CONSTS_RTMP_DEFAULT_PORT; | ||
| 1072 | + | ||
| 1071 | int SrsServer::listen_rtmp() | 1073 | int SrsServer::listen_rtmp() |
| 1072 | { | 1074 | { |
| 1073 | int ret = ERROR_SUCCESS; | 1075 | int ret = ERROR_SUCCESS; |
| @@ -1078,6 +1080,8 @@ int SrsServer::listen_rtmp() | @@ -1078,6 +1080,8 @@ int SrsServer::listen_rtmp() | ||
| 1078 | 1080 | ||
| 1079 | close_listeners(SrsListenerRtmpStream); | 1081 | close_listeners(SrsListenerRtmpStream); |
| 1080 | 1082 | ||
| 1083 | + int first_port = 0; | ||
| 1084 | + | ||
| 1081 | for (int i = 0; i < (int)ip_ports.size(); i++) { | 1085 | for (int i = 0; i < (int)ip_ports.size(); i++) { |
| 1082 | SrsListener* listener = new SrsStreamListener(this, SrsListenerRtmpStream); | 1086 | SrsListener* listener = new SrsStreamListener(this, SrsListenerRtmpStream); |
| 1083 | listeners.push_back(listener); | 1087 | listeners.push_back(listener); |
| @@ -1090,7 +1094,13 @@ int SrsServer::listen_rtmp() | @@ -1090,7 +1094,13 @@ int SrsServer::listen_rtmp() | ||
| 1090 | srs_error("RTMP stream listen at %s:%d failed. ret=%d", ip.c_str(), port, ret); | 1094 | srs_error("RTMP stream listen at %s:%d failed. ret=%d", ip.c_str(), port, ret); |
| 1091 | return ret; | 1095 | return ret; |
| 1092 | } | 1096 | } |
| 1097 | + | ||
| 1098 | + if(!first_port){ | ||
| 1099 | + first_port = port; | ||
| 1093 | } | 1100 | } |
| 1101 | + } | ||
| 1102 | + | ||
| 1103 | + snprintf(rtmp_port, 16, "%d", first_port); | ||
| 1094 | 1104 | ||
| 1095 | return ret; | 1105 | return ret; |
| 1096 | } | 1106 | } |
| @@ -1233,7 +1233,7 @@ int SrsSource::on_reload_vhost_forward(string vhost) | @@ -1233,7 +1233,7 @@ int SrsSource::on_reload_vhost_forward(string vhost) | ||
| 1233 | return ret; | 1233 | return ret; |
| 1234 | } | 1234 | } |
| 1235 | 1235 | ||
| 1236 | - if ((ret = create_forwarders()) != ERROR_SUCCESS) { | 1236 | + if ((ret = create_forwarders(_req)) != ERROR_SUCCESS) { |
| 1237 | srs_error("create forwarders failed. ret=%d", ret); | 1237 | srs_error("create forwarders failed. ret=%d", ret); |
| 1238 | return ret; | 1238 | return ret; |
| 1239 | } | 1239 | } |
| @@ -2193,7 +2193,7 @@ int SrsSource::on_aggregate(SrsCommonMessage* msg) | @@ -2193,7 +2193,7 @@ int SrsSource::on_aggregate(SrsCommonMessage* msg) | ||
| 2193 | return ret; | 2193 | return ret; |
| 2194 | } | 2194 | } |
| 2195 | 2195 | ||
| 2196 | -int SrsSource::on_publish() | 2196 | +int SrsSource::on_publish(SrsRequest* req) |
| 2197 | { | 2197 | { |
| 2198 | int ret = ERROR_SUCCESS; | 2198 | int ret = ERROR_SUCCESS; |
| 2199 | 2199 | ||
| @@ -2214,7 +2214,7 @@ int SrsSource::on_publish() | @@ -2214,7 +2214,7 @@ int SrsSource::on_publish() | ||
| 2214 | last_packet_time = 0; | 2214 | last_packet_time = 0; |
| 2215 | 2215 | ||
| 2216 | // create forwarders | 2216 | // create forwarders |
| 2217 | - if ((ret = create_forwarders()) != ERROR_SUCCESS) { | 2217 | + if ((ret = create_forwarders(req)) != ERROR_SUCCESS) { |
| 2218 | srs_error("create forwarders failed. ret=%d", ret); | 2218 | srs_error("create forwarders failed. ret=%d", ret); |
| 2219 | return ret; | 2219 | return ret; |
| 2220 | } | 2220 | } |
| @@ -2420,7 +2420,7 @@ void SrsSource::on_edge_proxy_unpublish() | @@ -2420,7 +2420,7 @@ void SrsSource::on_edge_proxy_unpublish() | ||
| 2420 | publish_edge->on_proxy_unpublish(); | 2420 | publish_edge->on_proxy_unpublish(); |
| 2421 | } | 2421 | } |
| 2422 | 2422 | ||
| 2423 | -int SrsSource::create_forwarders() | 2423 | +int SrsSource::create_forwarders(SrsRequest* req) |
| 2424 | { | 2424 | { |
| 2425 | int ret = ERROR_SUCCESS; | 2425 | int ret = ERROR_SUCCESS; |
| 2426 | 2426 | ||
| @@ -2429,7 +2429,7 @@ int SrsSource::create_forwarders() | @@ -2429,7 +2429,7 @@ int SrsSource::create_forwarders() | ||
| 2429 | for (int i = 0; conf && i < (int)conf->args.size(); i++) { | 2429 | for (int i = 0; conf && i < (int)conf->args.size(); i++) { |
| 2430 | std::string forward_server = conf->args.at(i); | 2430 | std::string forward_server = conf->args.at(i); |
| 2431 | 2431 | ||
| 2432 | - if (SrsForwarder::check_dead_loop(_req, forward_server)) {//if the source is from any of the peer list,don't forward it | 2432 | + if (SrsForwarder::check_dead_loop(req, forward_server)) {//if the source is from any of the peer list,don't forward it |
| 2433 | srs_trace("the source is come from forward_peer,don't forward it any more: " | 2433 | srs_trace("the source is come from forward_peer,don't forward it any more: " |
| 2434 | "vhost=%s, app=%s, stream=%s, forward-to=%s", | 2434 | "vhost=%s, app=%s, stream=%s, forward-to=%s", |
| 2435 | _req->vhost.c_str(), _req->app.c_str(), _req->stream.c_str(), | 2435 | _req->vhost.c_str(), _req->app.c_str(), _req->stream.c_str(), |
| @@ -2470,7 +2470,7 @@ int SrsSource::create_forwarders() | @@ -2470,7 +2470,7 @@ int SrsSource::create_forwarders() | ||
| 2470 | for (int i = 0; conf && i < (int)conf->args.size(); i++) { | 2470 | for (int i = 0; conf && i < (int)conf->args.size(); i++) { |
| 2471 | std::string forward_server = conf->args.at(i); | 2471 | std::string forward_server = conf->args.at(i); |
| 2472 | 2472 | ||
| 2473 | - if (SrsForwarder::check_dead_loop(_req, forward_server)) { | 2473 | + if (SrsForwarder::check_dead_loop(req, forward_server)) { |
| 2474 | srs_trace("start forward,dead loop checked,don't forward it: " | 2474 | srs_trace("start forward,dead loop checked,don't forward it: " |
| 2475 | "vhost=%s, app=%s, stream=%s, forward-to=%s", | 2475 | "vhost=%s, app=%s, stream=%s, forward-to=%s", |
| 2476 | _req->vhost.c_str(), _req->app.c_str(), _req->stream.c_str(), | 2476 | _req->vhost.c_str(), _req->app.c_str(), _req->stream.c_str(), |
| @@ -2519,7 +2519,7 @@ int SrsSource::create_forwarders() | @@ -2519,7 +2519,7 @@ int SrsSource::create_forwarders() | ||
| 2519 | std::string forward_server = conf->args.at(server_index); | 2519 | std::string forward_server = conf->args.at(server_index); |
| 2520 | server_index ++; | 2520 | server_index ++; |
| 2521 | 2521 | ||
| 2522 | - if (SrsForwarder::check_dead_loop(_req, forward_server)) { | 2522 | + if (SrsForwarder::check_dead_loop(req, forward_server)) { |
| 2523 | srs_trace("start forward_in_turn,dead loop checked,don't forward it: " | 2523 | srs_trace("start forward_in_turn,dead loop checked,don't forward it: " |
| 2524 | "vhost=%s, app=%s, stream=%s, forward-to=%s", | 2524 | "vhost=%s, app=%s, stream=%s, forward-to=%s", |
| 2525 | _req->vhost.c_str(), _req->app.c_str(), _req->stream.c_str(), | 2525 | _req->vhost.c_str(), _req->app.c_str(), _req->stream.c_str(), |
| @@ -571,7 +571,7 @@ public: | @@ -571,7 +571,7 @@ public: | ||
| 571 | * @param _req the request from client, the source will deep copy it, | 571 | * @param _req the request from client, the source will deep copy it, |
| 572 | * for when reload the request of client maybe invalid. | 572 | * for when reload the request of client maybe invalid. |
| 573 | */ | 573 | */ |
| 574 | - virtual int on_publish(); | 574 | + virtual int on_publish(SrsRequest* req); |
| 575 | virtual void on_unpublish(); | 575 | virtual void on_unpublish(); |
| 576 | // consumer methods | 576 | // consumer methods |
| 577 | public: | 577 | public: |
| @@ -598,7 +598,7 @@ public: | @@ -598,7 +598,7 @@ public: | ||
| 598 | // for edge, proxy stop publish | 598 | // for edge, proxy stop publish |
| 599 | virtual void on_edge_proxy_unpublish(); | 599 | virtual void on_edge_proxy_unpublish(); |
| 600 | private: | 600 | private: |
| 601 | - virtual int create_forwarders(); | 601 | + virtual int create_forwarders(SrsRequest* req); |
| 602 | virtual void destroy_forwarders(); | 602 | virtual void destroy_forwarders(); |
| 603 | }; | 603 | }; |
| 604 | 604 |
| @@ -1765,11 +1765,6 @@ void SrsRequest::update_auth(SrsRequest* req) | @@ -1765,11 +1765,6 @@ void SrsRequest::update_auth(SrsRequest* req) | ||
| 1765 | swfUrl = req->swfUrl; | 1765 | swfUrl = req->swfUrl; |
| 1766 | tcUrl = req->tcUrl; | 1766 | tcUrl = req->tcUrl; |
| 1767 | 1767 | ||
| 1768 | - vhost = req->vhost; | ||
| 1769 | - app = req->app; | ||
| 1770 | - param = req->param; | ||
| 1771 | - port = req->port; | ||
| 1772 | - | ||
| 1773 | if (args) { | 1768 | if (args) { |
| 1774 | srs_freep(args); | 1769 | srs_freep(args); |
| 1775 | } | 1770 | } |
-
请 注册 或 登录 后发表评论