胡斌

fix bug: using port of input source server as the input port of the source of transcoding

@@ -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 }