正在显示
16 个修改的文件
包含
106 行增加
和
152 行删除
| @@ -276,6 +276,8 @@ int SrsDynamicHttpConn::connect() | @@ -276,6 +276,8 @@ int SrsDynamicHttpConn::connect() | ||
| 276 | if ((ret = transport->connect(req->host, req->port, ST_UTIME_NO_TIMEOUT)) != ERROR_SUCCESS) { | 276 | if ((ret = transport->connect(req->host, req->port, ST_UTIME_NO_TIMEOUT)) != ERROR_SUCCESS) { |
| 277 | return ret; | 277 | return ret; |
| 278 | } | 278 | } |
| 279 | + | ||
| 280 | + srs_freep(client); | ||
| 279 | client = new SrsRtmpClient(transport); | 281 | client = new SrsRtmpClient(transport); |
| 280 | 282 | ||
| 281 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); | 283 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); |
| @@ -63,13 +63,12 @@ using namespace std; | @@ -63,13 +63,12 @@ using namespace std; | ||
| 63 | 63 | ||
| 64 | SrsEdgeIngester::SrsEdgeIngester() | 64 | SrsEdgeIngester::SrsEdgeIngester() |
| 65 | { | 65 | { |
| 66 | - io = NULL; | 66 | + transport = new SrsTcpClient(); |
| 67 | kbps = new SrsKbps(); | 67 | kbps = new SrsKbps(); |
| 68 | client = NULL; | 68 | client = NULL; |
| 69 | _edge = NULL; | 69 | _edge = NULL; |
| 70 | _req = NULL; | 70 | _req = NULL; |
| 71 | stream_id = 0; | 71 | stream_id = 0; |
| 72 | - stfd = NULL; | ||
| 73 | lb = new SrsLbRoundRobin(); | 72 | lb = new SrsLbRoundRobin(); |
| 74 | pthread = new SrsReusableThread2("edge-igs", this, SRS_EDGE_INGESTER_SLEEP_US); | 73 | pthread = new SrsReusableThread2("edge-igs", this, SRS_EDGE_INGESTER_SLEEP_US); |
| 75 | } | 74 | } |
| @@ -78,6 +77,7 @@ SrsEdgeIngester::~SrsEdgeIngester() | @@ -78,6 +77,7 @@ SrsEdgeIngester::~SrsEdgeIngester() | ||
| 78 | { | 77 | { |
| 79 | stop(); | 78 | stop(); |
| 80 | 79 | ||
| 80 | + srs_freep(transport); | ||
| 81 | srs_freep(lb); | 81 | srs_freep(lb); |
| 82 | srs_freep(pthread); | 82 | srs_freep(pthread); |
| 83 | srs_freep(kbps); | 83 | srs_freep(kbps); |
| @@ -109,11 +109,9 @@ int SrsEdgeIngester::start() | @@ -109,11 +109,9 @@ int SrsEdgeIngester::start() | ||
| 109 | void SrsEdgeIngester::stop() | 109 | void SrsEdgeIngester::stop() |
| 110 | { | 110 | { |
| 111 | pthread->stop(); | 111 | pthread->stop(); |
| 112 | - | ||
| 113 | - close_underlayer_socket(); | 112 | + transport->close(); |
| 114 | 113 | ||
| 115 | srs_freep(client); | 114 | srs_freep(client); |
| 116 | - srs_freep(io); | ||
| 117 | kbps->set_io(NULL, NULL); | 115 | kbps->set_io(NULL, NULL); |
| 118 | 116 | ||
| 119 | // notice to unpublish. | 117 | // notice to unpublish. |
| @@ -336,17 +334,12 @@ int SrsEdgeIngester::process_publish_message(SrsCommonMessage* msg) | @@ -336,17 +334,12 @@ int SrsEdgeIngester::process_publish_message(SrsCommonMessage* msg) | ||
| 336 | return ret; | 334 | return ret; |
| 337 | } | 335 | } |
| 338 | 336 | ||
| 339 | -void SrsEdgeIngester::close_underlayer_socket() | ||
| 340 | -{ | ||
| 341 | - srs_close_stfd(stfd); | ||
| 342 | -} | ||
| 343 | - | ||
| 344 | int SrsEdgeIngester::connect_server(string& ep_server, int& ep_port) | 337 | int SrsEdgeIngester::connect_server(string& ep_server, int& ep_port) |
| 345 | { | 338 | { |
| 346 | int ret = ERROR_SUCCESS; | 339 | int ret = ERROR_SUCCESS; |
| 347 | 340 | ||
| 348 | // reopen | 341 | // reopen |
| 349 | - close_underlayer_socket(); | 342 | + transport->close(); |
| 350 | 343 | ||
| 351 | SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(_req->vhost); | 344 | SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(_req->vhost); |
| 352 | 345 | ||
| @@ -368,20 +361,16 @@ int SrsEdgeIngester::connect_server(string& ep_server, int& ep_port) | @@ -368,20 +361,16 @@ int SrsEdgeIngester::connect_server(string& ep_server, int& ep_port) | ||
| 368 | 361 | ||
| 369 | // open socket. | 362 | // open socket. |
| 370 | int64_t timeout = SRS_EDGE_INGESTER_TIMEOUT_US; | 363 | int64_t timeout = SRS_EDGE_INGESTER_TIMEOUT_US; |
| 371 | - if ((ret = srs_socket_connect(ep_server, ep_port, timeout, &stfd)) != ERROR_SUCCESS) { | 364 | + if ((ret = transport->connect(ep_server, ep_port, timeout)) != ERROR_SUCCESS) { |
| 372 | srs_warn("edge pull failed, stream=%s, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", | 365 | srs_warn("edge pull failed, stream=%s, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", |
| 373 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port, timeout, ret); | 366 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port, timeout, ret); |
| 374 | return ret; | 367 | return ret; |
| 375 | } | 368 | } |
| 376 | 369 | ||
| 377 | srs_freep(client); | 370 | srs_freep(client); |
| 378 | - srs_freep(io); | ||
| 379 | - | ||
| 380 | - srs_assert(stfd); | ||
| 381 | - io = new SrsStSocket(stfd); | ||
| 382 | - client = new SrsRtmpClient(io); | 371 | + client = new SrsRtmpClient(transport); |
| 383 | 372 | ||
| 384 | - kbps->set_io(io, io); | 373 | + kbps->set_io(transport, transport); |
| 385 | 374 | ||
| 386 | srs_trace("edge pull connected, url=%s/%s, server=%s:%d", | 375 | srs_trace("edge pull connected, url=%s/%s, server=%s:%d", |
| 387 | _req->tcUrl.c_str(), _req->stream.c_str(), ep_server.c_str(), ep_port); | 376 | _req->tcUrl.c_str(), _req->stream.c_str(), ep_server.c_str(), ep_port); |
| @@ -391,14 +380,13 @@ int SrsEdgeIngester::connect_server(string& ep_server, int& ep_port) | @@ -391,14 +380,13 @@ int SrsEdgeIngester::connect_server(string& ep_server, int& ep_port) | ||
| 391 | 380 | ||
| 392 | SrsEdgeForwarder::SrsEdgeForwarder() | 381 | SrsEdgeForwarder::SrsEdgeForwarder() |
| 393 | { | 382 | { |
| 394 | - io = NULL; | 383 | + transport = new SrsTcpClient(); |
| 395 | kbps = new SrsKbps(); | 384 | kbps = new SrsKbps(); |
| 396 | client = NULL; | 385 | client = NULL; |
| 397 | _edge = NULL; | 386 | _edge = NULL; |
| 398 | _req = NULL; | 387 | _req = NULL; |
| 399 | lb = new SrsLbRoundRobin(); | 388 | lb = new SrsLbRoundRobin(); |
| 400 | stream_id = 0; | 389 | stream_id = 0; |
| 401 | - stfd = NULL; | ||
| 402 | pthread = new SrsReusableThread2("edge-fwr", this, SRS_EDGE_FORWARDER_SLEEP_US); | 390 | pthread = new SrsReusableThread2("edge-fwr", this, SRS_EDGE_FORWARDER_SLEEP_US); |
| 403 | queue = new SrsMessageQueue(); | 391 | queue = new SrsMessageQueue(); |
| 404 | send_error_code = ERROR_SUCCESS; | 392 | send_error_code = ERROR_SUCCESS; |
| @@ -408,6 +396,7 @@ SrsEdgeForwarder::~SrsEdgeForwarder() | @@ -408,6 +396,7 @@ SrsEdgeForwarder::~SrsEdgeForwarder() | ||
| 408 | { | 396 | { |
| 409 | stop(); | 397 | stop(); |
| 410 | 398 | ||
| 399 | + srs_freep(transport); | ||
| 411 | srs_freep(lb); | 400 | srs_freep(lb); |
| 412 | srs_freep(pthread); | 401 | srs_freep(pthread); |
| 413 | srs_freep(queue); | 402 | srs_freep(queue); |
| @@ -473,13 +462,11 @@ int SrsEdgeForwarder::start() | @@ -473,13 +462,11 @@ int SrsEdgeForwarder::start() | ||
| 473 | void SrsEdgeForwarder::stop() | 462 | void SrsEdgeForwarder::stop() |
| 474 | { | 463 | { |
| 475 | pthread->stop(); | 464 | pthread->stop(); |
| 476 | - | ||
| 477 | - close_underlayer_socket(); | 465 | + transport->close(); |
| 478 | 466 | ||
| 479 | queue->clear(); | 467 | queue->clear(); |
| 480 | 468 | ||
| 481 | srs_freep(client); | 469 | srs_freep(client); |
| 482 | - srs_freep(io); | ||
| 483 | kbps->set_io(NULL, NULL); | 470 | kbps->set_io(NULL, NULL); |
| 484 | } | 471 | } |
| 485 | 472 | ||
| @@ -586,17 +573,12 @@ int SrsEdgeForwarder::proxy(SrsCommonMessage* msg) | @@ -586,17 +573,12 @@ int SrsEdgeForwarder::proxy(SrsCommonMessage* msg) | ||
| 586 | return ret; | 573 | return ret; |
| 587 | } | 574 | } |
| 588 | 575 | ||
| 589 | -void SrsEdgeForwarder::close_underlayer_socket() | ||
| 590 | -{ | ||
| 591 | - srs_close_stfd(stfd); | ||
| 592 | -} | ||
| 593 | - | ||
| 594 | int SrsEdgeForwarder::connect_server(string& ep_server, int& ep_port) | 576 | int SrsEdgeForwarder::connect_server(string& ep_server, int& ep_port) |
| 595 | { | 577 | { |
| 596 | int ret = ERROR_SUCCESS; | 578 | int ret = ERROR_SUCCESS; |
| 597 | 579 | ||
| 598 | // reopen | 580 | // reopen |
| 599 | - close_underlayer_socket(); | 581 | + transport->close(); |
| 600 | 582 | ||
| 601 | SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(_req->vhost); | 583 | SrsConfDirective* conf = _srs_config->get_vhost_edge_origin(_req->vhost); |
| 602 | srs_assert(conf); | 584 | srs_assert(conf); |
| @@ -610,20 +592,16 @@ int SrsEdgeForwarder::connect_server(string& ep_server, int& ep_port) | @@ -610,20 +592,16 @@ int SrsEdgeForwarder::connect_server(string& ep_server, int& ep_port) | ||
| 610 | 592 | ||
| 611 | // open socket. | 593 | // open socket. |
| 612 | int64_t timeout = SRS_EDGE_FORWARDER_TIMEOUT_US; | 594 | int64_t timeout = SRS_EDGE_FORWARDER_TIMEOUT_US; |
| 613 | - if ((ret = srs_socket_connect(ep_server, ep_port, timeout, &stfd)) != ERROR_SUCCESS) { | 595 | + if ((ret = transport->connect(ep_server, ep_port, timeout)) != ERROR_SUCCESS) { |
| 614 | srs_warn("edge push failed, stream=%s, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", | 596 | srs_warn("edge push failed, stream=%s, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", |
| 615 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port, timeout, ret); | 597 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port, timeout, ret); |
| 616 | return ret; | 598 | return ret; |
| 617 | } | 599 | } |
| 618 | 600 | ||
| 619 | srs_freep(client); | 601 | srs_freep(client); |
| 620 | - srs_freep(io); | ||
| 621 | - | ||
| 622 | - srs_assert(stfd); | ||
| 623 | - io = new SrsStSocket(stfd); | ||
| 624 | - client = new SrsRtmpClient(io); | 602 | + client = new SrsRtmpClient(transport); |
| 625 | 603 | ||
| 626 | - kbps->set_io(io, io); | 604 | + kbps->set_io(transport, transport); |
| 627 | 605 | ||
| 628 | // open socket. | 606 | // open socket. |
| 629 | srs_trace("edge push connected, stream=%s, tcUrl=%s to server=%s, port=%d", | 607 | srs_trace("edge push connected, stream=%s, tcUrl=%s to server=%s, port=%d", |
| @@ -47,6 +47,7 @@ class SrsMessageQueue; | @@ -47,6 +47,7 @@ class SrsMessageQueue; | ||
| 47 | class ISrsProtocolReaderWriter; | 47 | class ISrsProtocolReaderWriter; |
| 48 | class SrsKbps; | 48 | class SrsKbps; |
| 49 | class SrsLbRoundRobin; | 49 | class SrsLbRoundRobin; |
| 50 | +class SrsTcpClient; | ||
| 50 | 51 | ||
| 51 | /** | 52 | /** |
| 52 | * the state of edge, auto machine | 53 | * the state of edge, auto machine |
| @@ -85,8 +86,7 @@ private: | @@ -85,8 +86,7 @@ private: | ||
| 85 | SrsPlayEdge* _edge; | 86 | SrsPlayEdge* _edge; |
| 86 | SrsRequest* _req; | 87 | SrsRequest* _req; |
| 87 | SrsReusableThread2* pthread; | 88 | SrsReusableThread2* pthread; |
| 88 | - st_netfd_t stfd; | ||
| 89 | - ISrsProtocolReaderWriter* io; | 89 | + SrsTcpClient* transport; |
| 90 | SrsKbps* kbps; | 90 | SrsKbps* kbps; |
| 91 | SrsRtmpClient* client; | 91 | SrsRtmpClient* client; |
| 92 | SrsLbRoundRobin* lb; | 92 | SrsLbRoundRobin* lb; |
| @@ -103,7 +103,6 @@ public: | @@ -103,7 +103,6 @@ public: | ||
| 103 | virtual int cycle(); | 103 | virtual int cycle(); |
| 104 | private: | 104 | private: |
| 105 | virtual int ingest(); | 105 | virtual int ingest(); |
| 106 | - virtual void close_underlayer_socket(); | ||
| 107 | virtual int connect_server(std::string& ep_server, int& ep_port); | 106 | virtual int connect_server(std::string& ep_server, int& ep_port); |
| 108 | virtual int connect_app(std::string ep_server, int ep_port); | 107 | virtual int connect_app(std::string ep_server, int ep_port); |
| 109 | virtual int process_publish_message(SrsCommonMessage* msg); | 108 | virtual int process_publish_message(SrsCommonMessage* msg); |
| @@ -121,8 +120,7 @@ private: | @@ -121,8 +120,7 @@ private: | ||
| 121 | SrsPublishEdge* _edge; | 120 | SrsPublishEdge* _edge; |
| 122 | SrsRequest* _req; | 121 | SrsRequest* _req; |
| 123 | SrsReusableThread2* pthread; | 122 | SrsReusableThread2* pthread; |
| 124 | - st_netfd_t stfd; | ||
| 125 | - ISrsProtocolReaderWriter* io; | 123 | + SrsTcpClient* transport; |
| 126 | SrsKbps* kbps; | 124 | SrsKbps* kbps; |
| 127 | SrsRtmpClient* client; | 125 | SrsRtmpClient* client; |
| 128 | SrsLbRoundRobin* lb; | 126 | SrsLbRoundRobin* lb; |
| @@ -152,7 +150,6 @@ public: | @@ -152,7 +150,6 @@ public: | ||
| 152 | public: | 150 | public: |
| 153 | virtual int proxy(SrsCommonMessage* msg); | 151 | virtual int proxy(SrsCommonMessage* msg); |
| 154 | private: | 152 | private: |
| 155 | - virtual void close_underlayer_socket(); | ||
| 156 | virtual int connect_server(std::string& ep_server, int& ep_port); | 153 | virtual int connect_server(std::string& ep_server, int& ep_port); |
| 157 | virtual int connect_app(std::string ep_server, int ep_port); | 154 | virtual int connect_app(std::string ep_server, int ep_port); |
| 158 | }; | 155 | }; |
| @@ -54,9 +54,8 @@ SrsForwarder::SrsForwarder(SrsSource* _source) | @@ -54,9 +54,8 @@ SrsForwarder::SrsForwarder(SrsSource* _source) | ||
| 54 | source = _source; | 54 | source = _source; |
| 55 | 55 | ||
| 56 | _req = NULL; | 56 | _req = NULL; |
| 57 | - io = NULL; | ||
| 58 | client = NULL; | 57 | client = NULL; |
| 59 | - stfd = NULL; | 58 | + transport = new SrsTcpClient(); |
| 60 | kbps = new SrsKbps(); | 59 | kbps = new SrsKbps(); |
| 61 | stream_id = 0; | 60 | stream_id = 0; |
| 62 | 61 | ||
| @@ -71,6 +70,7 @@ SrsForwarder::~SrsForwarder() | @@ -71,6 +70,7 @@ SrsForwarder::~SrsForwarder() | ||
| 71 | { | 70 | { |
| 72 | on_unpublish(); | 71 | on_unpublish(); |
| 73 | 72 | ||
| 73 | + srs_freep(transport); | ||
| 74 | srs_freep(pthread); | 74 | srs_freep(pthread); |
| 75 | srs_freep(queue); | 75 | srs_freep(queue); |
| 76 | srs_freep(jitter); | 76 | srs_freep(jitter); |
| @@ -151,11 +151,9 @@ int SrsForwarder::on_publish() | @@ -151,11 +151,9 @@ int SrsForwarder::on_publish() | ||
| 151 | void SrsForwarder::on_unpublish() | 151 | void SrsForwarder::on_unpublish() |
| 152 | { | 152 | { |
| 153 | pthread->stop(); | 153 | pthread->stop(); |
| 154 | - | ||
| 155 | - close_underlayer_socket(); | 154 | + transport->close(); |
| 156 | 155 | ||
| 157 | srs_freep(client); | 156 | srs_freep(client); |
| 158 | - srs_freep(io); | ||
| 159 | kbps->set_io(NULL, NULL); | 157 | kbps->set_io(NULL, NULL); |
| 160 | } | 158 | } |
| 161 | 159 | ||
| @@ -271,11 +269,6 @@ int SrsForwarder::cycle() | @@ -271,11 +269,6 @@ int SrsForwarder::cycle() | ||
| 271 | return ret; | 269 | return ret; |
| 272 | } | 270 | } |
| 273 | 271 | ||
| 274 | -void SrsForwarder::close_underlayer_socket() | ||
| 275 | -{ | ||
| 276 | - srs_close_stfd(stfd); | ||
| 277 | -} | ||
| 278 | - | ||
| 279 | void SrsForwarder::discovery_ep(string& server, int& port, string& tc_url) | 272 | void SrsForwarder::discovery_ep(string& server, int& port, string& tc_url) |
| 280 | { | 273 | { |
| 281 | SrsRequest* req = _req; | 274 | SrsRequest* req = _req; |
| @@ -292,7 +285,7 @@ int SrsForwarder::connect_server(string& ep_server, int& ep_port) | @@ -292,7 +285,7 @@ int SrsForwarder::connect_server(string& ep_server, int& ep_port) | ||
| 292 | int ret = ERROR_SUCCESS; | 285 | int ret = ERROR_SUCCESS; |
| 293 | 286 | ||
| 294 | // reopen | 287 | // reopen |
| 295 | - close_underlayer_socket(); | 288 | + transport->close(); |
| 296 | 289 | ||
| 297 | // discovery the server port and tcUrl from req and ep_forward. | 290 | // discovery the server port and tcUrl from req and ep_forward. |
| 298 | string tc_url; | 291 | string tc_url; |
| @@ -300,20 +293,16 @@ int SrsForwarder::connect_server(string& ep_server, int& ep_port) | @@ -300,20 +293,16 @@ int SrsForwarder::connect_server(string& ep_server, int& ep_port) | ||
| 300 | 293 | ||
| 301 | // open socket. | 294 | // open socket. |
| 302 | int64_t timeout = SRS_FORWARDER_SLEEP_US; | 295 | int64_t timeout = SRS_FORWARDER_SLEEP_US; |
| 303 | - if ((ret = srs_socket_connect(ep_server, ep_port, timeout, &stfd)) != ERROR_SUCCESS) { | 296 | + if ((ret = transport->connect(ep_server, ep_port, timeout)) != ERROR_SUCCESS) { |
| 304 | srs_warn("forward failed, stream=%s, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", | 297 | srs_warn("forward failed, stream=%s, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", |
| 305 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port, timeout, ret); | 298 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port, timeout, ret); |
| 306 | return ret; | 299 | return ret; |
| 307 | } | 300 | } |
| 308 | 301 | ||
| 309 | srs_freep(client); | 302 | srs_freep(client); |
| 310 | - srs_freep(io); | ||
| 311 | - | ||
| 312 | - srs_assert(stfd); | ||
| 313 | - io = new SrsStSocket(stfd); | ||
| 314 | - client = new SrsRtmpClient(io); | 303 | + client = new SrsRtmpClient(transport); |
| 315 | 304 | ||
| 316 | - kbps->set_io(io, io); | 305 | + kbps->set_io(transport, transport); |
| 317 | 306 | ||
| 318 | srs_trace("forward connected, stream=%s, tcUrl=%s to server=%s, port=%d", | 307 | srs_trace("forward connected, stream=%s, tcUrl=%s to server=%s, port=%d", |
| 319 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port); | 308 | _req->stream.c_str(), _req->tcUrl.c_str(), ep_server.c_str(), ep_port); |
| @@ -56,11 +56,10 @@ private: | @@ -56,11 +56,10 @@ private: | ||
| 56 | SrsRequest* _req; | 56 | SrsRequest* _req; |
| 57 | int stream_id; | 57 | int stream_id; |
| 58 | private: | 58 | private: |
| 59 | - st_netfd_t stfd; | ||
| 60 | SrsReusableThread2* pthread; | 59 | SrsReusableThread2* pthread; |
| 61 | private: | 60 | private: |
| 62 | SrsSource* source; | 61 | SrsSource* source; |
| 63 | - ISrsProtocolReaderWriter* io; | 62 | + SrsTcpClient* transport; |
| 64 | SrsKbps* kbps; | 63 | SrsKbps* kbps; |
| 65 | SrsRtmpClient* client; | 64 | SrsRtmpClient* client; |
| 66 | SrsRtmpJitter* jitter; | 65 | SrsRtmpJitter* jitter; |
| @@ -99,7 +98,6 @@ public: | @@ -99,7 +98,6 @@ public: | ||
| 99 | public: | 98 | public: |
| 100 | virtual int cycle(); | 99 | virtual int cycle(); |
| 101 | private: | 100 | private: |
| 102 | - virtual void close_underlayer_socket(); | ||
| 103 | virtual void discovery_ep(std::string& server, int& port, std::string& tc_url); | 101 | virtual void discovery_ep(std::string& server, int& port, std::string& tc_url); |
| 104 | virtual int connect_server(std::string& ep_server, int& ep_port); | 102 | virtual int connect_server(std::string& ep_server, int& ep_port); |
| 105 | virtual int connect_app(std::string ep_server, int ep_port); | 103 | virtual int connect_app(std::string ep_server, int ep_port); |
| @@ -39,9 +39,7 @@ using namespace std; | @@ -39,9 +39,7 @@ using namespace std; | ||
| 39 | 39 | ||
| 40 | SrsHttpClient::SrsHttpClient() | 40 | SrsHttpClient::SrsHttpClient() |
| 41 | { | 41 | { |
| 42 | - connected = false; | ||
| 43 | - stfd = NULL; | ||
| 44 | - skt = NULL; | 42 | + transport = new SrsTcpClient(); |
| 45 | parser = NULL; | 43 | parser = NULL; |
| 46 | timeout_us = 0; | 44 | timeout_us = 0; |
| 47 | port = 0; | 45 | port = 0; |
| @@ -50,6 +48,8 @@ SrsHttpClient::SrsHttpClient() | @@ -50,6 +48,8 @@ SrsHttpClient::SrsHttpClient() | ||
| 50 | SrsHttpClient::~SrsHttpClient() | 48 | SrsHttpClient::~SrsHttpClient() |
| 51 | { | 49 | { |
| 52 | disconnect(); | 50 | disconnect(); |
| 51 | + | ||
| 52 | + srs_freep(transport); | ||
| 53 | srs_freep(parser); | 53 | srs_freep(parser); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| @@ -102,7 +102,7 @@ int SrsHttpClient::post(string path, string req, ISrsHttpMessage** ppmsg) | @@ -102,7 +102,7 @@ int SrsHttpClient::post(string path, string req, ISrsHttpMessage** ppmsg) | ||
| 102 | << req; | 102 | << req; |
| 103 | 103 | ||
| 104 | std::string data = ss.str(); | 104 | std::string data = ss.str(); |
| 105 | - if ((ret = skt->write((void*)data.c_str(), data.length(), NULL)) != ERROR_SUCCESS) { | 105 | + if ((ret = transport->write((void*)data.c_str(), data.length(), NULL)) != ERROR_SUCCESS) { |
| 106 | // disconnect when error. | 106 | // disconnect when error. |
| 107 | disconnect(); | 107 | disconnect(); |
| 108 | 108 | ||
| @@ -111,7 +111,7 @@ int SrsHttpClient::post(string path, string req, ISrsHttpMessage** ppmsg) | @@ -111,7 +111,7 @@ int SrsHttpClient::post(string path, string req, ISrsHttpMessage** ppmsg) | ||
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | ISrsHttpMessage* msg = NULL; | 113 | ISrsHttpMessage* msg = NULL; |
| 114 | - if ((ret = parser->parse_message(skt, NULL, &msg)) != ERROR_SUCCESS) { | 114 | + if ((ret = parser->parse_message(transport, NULL, &msg)) != ERROR_SUCCESS) { |
| 115 | srs_error("parse http post response failed. ret=%d", ret); | 115 | srs_error("parse http post response failed. ret=%d", ret); |
| 116 | return ret; | 116 | return ret; |
| 117 | } | 117 | } |
| @@ -148,7 +148,7 @@ int SrsHttpClient::get(string path, std::string req, ISrsHttpMessage** ppmsg) | @@ -148,7 +148,7 @@ int SrsHttpClient::get(string path, std::string req, ISrsHttpMessage** ppmsg) | ||
| 148 | << req; | 148 | << req; |
| 149 | 149 | ||
| 150 | std::string data = ss.str(); | 150 | std::string data = ss.str(); |
| 151 | - if ((ret = skt->write((void*)data.c_str(), data.length(), NULL)) != ERROR_SUCCESS) { | 151 | + if ((ret = transport->write((void*)data.c_str(), data.length(), NULL)) != ERROR_SUCCESS) { |
| 152 | // disconnect when error. | 152 | // disconnect when error. |
| 153 | disconnect(); | 153 | disconnect(); |
| 154 | 154 | ||
| @@ -157,7 +157,7 @@ int SrsHttpClient::get(string path, std::string req, ISrsHttpMessage** ppmsg) | @@ -157,7 +157,7 @@ int SrsHttpClient::get(string path, std::string req, ISrsHttpMessage** ppmsg) | ||
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | ISrsHttpMessage* msg = NULL; | 159 | ISrsHttpMessage* msg = NULL; |
| 160 | - if ((ret = parser->parse_message(skt, NULL, &msg)) != ERROR_SUCCESS) { | 160 | + if ((ret = parser->parse_message(transport, NULL, &msg)) != ERROR_SUCCESS) { |
| 161 | srs_error("parse http post response failed. ret=%d", ret); | 161 | srs_error("parse http post response failed. ret=%d", ret); |
| 162 | return ret; | 162 | return ret; |
| 163 | } | 163 | } |
| @@ -171,37 +171,30 @@ int SrsHttpClient::get(string path, std::string req, ISrsHttpMessage** ppmsg) | @@ -171,37 +171,30 @@ int SrsHttpClient::get(string path, std::string req, ISrsHttpMessage** ppmsg) | ||
| 171 | 171 | ||
| 172 | void SrsHttpClient::disconnect() | 172 | void SrsHttpClient::disconnect() |
| 173 | { | 173 | { |
| 174 | - connected = false; | ||
| 175 | - | ||
| 176 | - srs_close_stfd(stfd); | ||
| 177 | - srs_freep(skt); | 174 | + transport->close(); |
| 178 | } | 175 | } |
| 179 | 176 | ||
| 180 | int SrsHttpClient::connect() | 177 | int SrsHttpClient::connect() |
| 181 | { | 178 | { |
| 182 | int ret = ERROR_SUCCESS; | 179 | int ret = ERROR_SUCCESS; |
| 183 | 180 | ||
| 184 | - if (connected) { | 181 | + if (transport->connected()) { |
| 185 | return ret; | 182 | return ret; |
| 186 | } | 183 | } |
| 187 | 184 | ||
| 188 | disconnect(); | 185 | disconnect(); |
| 189 | 186 | ||
| 190 | // open socket. | 187 | // open socket. |
| 191 | - if ((ret = srs_socket_connect(host, port, timeout_us, &stfd)) != ERROR_SUCCESS) { | 188 | + if ((ret = transport->connect(host, port, timeout_us)) != ERROR_SUCCESS) { |
| 192 | srs_warn("http client failed, server=%s, port=%d, timeout=%"PRId64", ret=%d", | 189 | srs_warn("http client failed, server=%s, port=%d, timeout=%"PRId64", ret=%d", |
| 193 | host.c_str(), port, timeout_us, ret); | 190 | host.c_str(), port, timeout_us, ret); |
| 194 | return ret; | 191 | return ret; |
| 195 | } | 192 | } |
| 196 | srs_info("connect to server success. server=%s, port=%d", host.c_str(), port); | 193 | srs_info("connect to server success. server=%s, port=%d", host.c_str(), port); |
| 197 | 194 | ||
| 198 | - srs_assert(!skt); | ||
| 199 | - skt = new SrsStSocket(stfd); | ||
| 200 | - connected = true; | ||
| 201 | - | ||
| 202 | // set the recv/send timeout in us. | 195 | // set the recv/send timeout in us. |
| 203 | - skt->set_recv_timeout(timeout_us); | ||
| 204 | - skt->set_send_timeout(timeout_us); | 196 | + transport->set_recv_timeout(timeout_us); |
| 197 | + transport->set_send_timeout(timeout_us); | ||
| 205 | 198 | ||
| 206 | return ret; | 199 | return ret; |
| 207 | } | 200 | } |
| @@ -49,9 +49,7 @@ class SrsStSocket; | @@ -49,9 +49,7 @@ class SrsStSocket; | ||
| 49 | class SrsHttpClient | 49 | class SrsHttpClient |
| 50 | { | 50 | { |
| 51 | private: | 51 | private: |
| 52 | - bool connected; | ||
| 53 | - st_netfd_t stfd; | ||
| 54 | - SrsStSocket* skt; | 52 | + SrsTcpClient* transport; |
| 55 | SrsHttpParser* parser; | 53 | SrsHttpParser* parser; |
| 56 | private: | 54 | private: |
| 57 | int64_t timeout_us; | 55 | int64_t timeout_us; |
| @@ -303,7 +303,7 @@ int SrsHttpResponseWriter::send_header(char* data, int size) | @@ -303,7 +303,7 @@ int SrsHttpResponseWriter::send_header(char* data, int size) | ||
| 303 | return skt->write((void*)buf.c_str(), buf.length(), NULL); | 303 | return skt->write((void*)buf.c_str(), buf.length(), NULL); |
| 304 | } | 304 | } |
| 305 | 305 | ||
| 306 | -SrsHttpResponseReader::SrsHttpResponseReader(SrsHttpMessage* msg, SrsStSocket* io) | 306 | +SrsHttpResponseReader::SrsHttpResponseReader(SrsHttpMessage* msg, ISrsProtocolReaderWriter* io) |
| 307 | { | 307 | { |
| 308 | skt = io; | 308 | skt = io; |
| 309 | owner = msg; | 309 | owner = msg; |
| @@ -494,7 +494,7 @@ int SrsHttpResponseReader::read_specified(char* data, int nb_data, int* nb_read) | @@ -494,7 +494,7 @@ int SrsHttpResponseReader::read_specified(char* data, int nb_data, int* nb_read) | ||
| 494 | return ret; | 494 | return ret; |
| 495 | } | 495 | } |
| 496 | 496 | ||
| 497 | -SrsHttpMessage::SrsHttpMessage(SrsStSocket* io, SrsConnection* c) : ISrsHttpMessage() | 497 | +SrsHttpMessage::SrsHttpMessage(ISrsProtocolReaderWriter* io, SrsConnection* c) : ISrsHttpMessage() |
| 498 | { | 498 | { |
| 499 | conn = c; | 499 | conn = c; |
| 500 | chunked = false; | 500 | chunked = false; |
| @@ -870,7 +870,7 @@ int SrsHttpParser::initialize(enum http_parser_type type, bool allow_jsonp) | @@ -870,7 +870,7 @@ int SrsHttpParser::initialize(enum http_parser_type type, bool allow_jsonp) | ||
| 870 | return ret; | 870 | return ret; |
| 871 | } | 871 | } |
| 872 | 872 | ||
| 873 | -int SrsHttpParser::parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttpMessage** ppmsg) | 873 | +int SrsHttpParser::parse_message(ISrsProtocolReaderWriter* io, SrsConnection* conn, ISrsHttpMessage** ppmsg) |
| 874 | { | 874 | { |
| 875 | *ppmsg = NULL; | 875 | *ppmsg = NULL; |
| 876 | 876 | ||
| @@ -887,7 +887,7 @@ int SrsHttpParser::parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttp | @@ -887,7 +887,7 @@ int SrsHttpParser::parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttp | ||
| 887 | header_parsed = 0; | 887 | header_parsed = 0; |
| 888 | 888 | ||
| 889 | // do parse | 889 | // do parse |
| 890 | - if ((ret = parse_message_imp(skt)) != ERROR_SUCCESS) { | 890 | + if ((ret = parse_message_imp(io)) != ERROR_SUCCESS) { |
| 891 | if (!srs_is_client_gracefully_close(ret)) { | 891 | if (!srs_is_client_gracefully_close(ret)) { |
| 892 | srs_error("parse http msg failed. ret=%d", ret); | 892 | srs_error("parse http msg failed. ret=%d", ret); |
| 893 | } | 893 | } |
| @@ -895,7 +895,7 @@ int SrsHttpParser::parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttp | @@ -895,7 +895,7 @@ int SrsHttpParser::parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttp | ||
| 895 | } | 895 | } |
| 896 | 896 | ||
| 897 | // create msg | 897 | // create msg |
| 898 | - SrsHttpMessage* msg = new SrsHttpMessage(skt, conn); | 898 | + SrsHttpMessage* msg = new SrsHttpMessage(io, conn); |
| 899 | 899 | ||
| 900 | // initalize http msg, parse url. | 900 | // initalize http msg, parse url. |
| 901 | if ((ret = msg->update(url, jsonp, &header, buffer, headers)) != ERROR_SUCCESS) { | 901 | if ((ret = msg->update(url, jsonp, &header, buffer, headers)) != ERROR_SUCCESS) { |
| @@ -910,7 +910,7 @@ int SrsHttpParser::parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttp | @@ -910,7 +910,7 @@ int SrsHttpParser::parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttp | ||
| 910 | return ret; | 910 | return ret; |
| 911 | } | 911 | } |
| 912 | 912 | ||
| 913 | -int SrsHttpParser::parse_message_imp(SrsStSocket* skt) | 913 | +int SrsHttpParser::parse_message_imp(ISrsProtocolReaderWriter* io) |
| 914 | { | 914 | { |
| 915 | int ret = ERROR_SUCCESS; | 915 | int ret = ERROR_SUCCESS; |
| 916 | 916 | ||
| @@ -944,7 +944,7 @@ int SrsHttpParser::parse_message_imp(SrsStSocket* skt) | @@ -944,7 +944,7 @@ int SrsHttpParser::parse_message_imp(SrsStSocket* skt) | ||
| 944 | // when nothing parsed, read more to parse. | 944 | // when nothing parsed, read more to parse. |
| 945 | if (nparsed == 0) { | 945 | if (nparsed == 0) { |
| 946 | // when requires more, only grow 1bytes, but the buffer will cache more. | 946 | // when requires more, only grow 1bytes, but the buffer will cache more. |
| 947 | - if ((ret = buffer->grow(skt, buffer->size() + 1)) != ERROR_SUCCESS) { | 947 | + if ((ret = buffer->grow(io, buffer->size() + 1)) != ERROR_SUCCESS) { |
| 948 | if (!srs_is_client_gracefully_close(ret)) { | 948 | if (!srs_is_client_gracefully_close(ret)) { |
| 949 | srs_error("read body from server failed. ret=%d", ret); | 949 | srs_error("read body from server failed. ret=%d", ret); |
| 950 | } | 950 | } |
| @@ -120,7 +120,7 @@ public: | @@ -120,7 +120,7 @@ public: | ||
| 120 | class SrsHttpResponseReader : virtual public ISrsHttpResponseReader | 120 | class SrsHttpResponseReader : virtual public ISrsHttpResponseReader |
| 121 | { | 121 | { |
| 122 | private: | 122 | private: |
| 123 | - SrsStSocket* skt; | 123 | + ISrsProtocolReaderWriter* skt; |
| 124 | SrsHttpMessage* owner; | 124 | SrsHttpMessage* owner; |
| 125 | SrsFastStream* buffer; | 125 | SrsFastStream* buffer; |
| 126 | bool is_eof; | 126 | bool is_eof; |
| @@ -131,7 +131,7 @@ private: | @@ -131,7 +131,7 @@ private: | ||
| 131 | // already read total bytes. | 131 | // already read total bytes. |
| 132 | int64_t nb_total_read; | 132 | int64_t nb_total_read; |
| 133 | public: | 133 | public: |
| 134 | - SrsHttpResponseReader(SrsHttpMessage* msg, SrsStSocket* io); | 134 | + SrsHttpResponseReader(SrsHttpMessage* msg, ISrsProtocolReaderWriter* io); |
| 135 | virtual ~SrsHttpResponseReader(); | 135 | virtual ~SrsHttpResponseReader(); |
| 136 | public: | 136 | public: |
| 137 | /** | 137 | /** |
| @@ -208,7 +208,7 @@ private: | @@ -208,7 +208,7 @@ private: | ||
| 208 | // the method in QueryString will override the HTTP method. | 208 | // the method in QueryString will override the HTTP method. |
| 209 | std::string jsonp_method; | 209 | std::string jsonp_method; |
| 210 | public: | 210 | public: |
| 211 | - SrsHttpMessage(SrsStSocket* io, SrsConnection* c); | 211 | + SrsHttpMessage(ISrsProtocolReaderWriter* io, SrsConnection* c); |
| 212 | virtual ~SrsHttpMessage(); | 212 | virtual ~SrsHttpMessage(); |
| 213 | public: | 213 | public: |
| 214 | /** | 214 | /** |
| @@ -332,12 +332,12 @@ public: | @@ -332,12 +332,12 @@ public: | ||
| 332 | * or error and *ppmsg must be NULL. | 332 | * or error and *ppmsg must be NULL. |
| 333 | * @remark, if success, *ppmsg always NOT-NULL, *ppmsg always is_complete(). | 333 | * @remark, if success, *ppmsg always NOT-NULL, *ppmsg always is_complete(). |
| 334 | */ | 334 | */ |
| 335 | - virtual int parse_message(SrsStSocket* skt, SrsConnection* conn, ISrsHttpMessage** ppmsg); | 335 | + virtual int parse_message(ISrsProtocolReaderWriter* io, SrsConnection* conn, ISrsHttpMessage** ppmsg); |
| 336 | private: | 336 | private: |
| 337 | /** | 337 | /** |
| 338 | * parse the HTTP message to member field: msg. | 338 | * parse the HTTP message to member field: msg. |
| 339 | */ | 339 | */ |
| 340 | - virtual int parse_message_imp(SrsStSocket* skt); | 340 | + virtual int parse_message_imp(ISrsProtocolReaderWriter* io); |
| 341 | private: | 341 | private: |
| 342 | static int on_message_begin(http_parser* parser); | 342 | static int on_message_begin(http_parser* parser); |
| 343 | static int on_headers_complete(http_parser* parser); | 343 | static int on_headers_complete(http_parser* parser); |
| @@ -132,9 +132,8 @@ SrsMpegtsOverUdp::SrsMpegtsOverUdp(SrsConfDirective* c) | @@ -132,9 +132,8 @@ SrsMpegtsOverUdp::SrsMpegtsOverUdp(SrsConfDirective* c) | ||
| 132 | output = _srs_config->get_stream_caster_output(c); | 132 | output = _srs_config->get_stream_caster_output(c); |
| 133 | 133 | ||
| 134 | req = NULL; | 134 | req = NULL; |
| 135 | - io = NULL; | ||
| 136 | client = NULL; | 135 | client = NULL; |
| 137 | - stfd = NULL; | 136 | + transport = new SrsTcpClient(); |
| 138 | stream_id = 0; | 137 | stream_id = 0; |
| 139 | 138 | ||
| 140 | avc = new SrsRawH264Stream(); | 139 | avc = new SrsRawH264Stream(); |
| @@ -150,6 +149,7 @@ SrsMpegtsOverUdp::~SrsMpegtsOverUdp() | @@ -150,6 +149,7 @@ SrsMpegtsOverUdp::~SrsMpegtsOverUdp() | ||
| 150 | { | 149 | { |
| 151 | close(); | 150 | close(); |
| 152 | 151 | ||
| 152 | + srs_freep(transport); | ||
| 153 | srs_freep(buffer); | 153 | srs_freep(buffer); |
| 154 | srs_freep(stream); | 154 | srs_freep(stream); |
| 155 | srs_freep(context); | 155 | srs_freep(context); |
| @@ -345,8 +345,8 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) | @@ -345,8 +345,8 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsBuffer* avs) | ||
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | // ts tbn to flv tbn. | 347 | // ts tbn to flv tbn. |
| 348 | - u_int32_t dts = msg->dts / 90; | ||
| 349 | - u_int32_t pts = msg->dts / 90; | 348 | + u_int32_t dts = (u_int32_t)(msg->dts / 90); |
| 349 | + u_int32_t pts = (u_int32_t)(msg->dts / 90); | ||
| 350 | 350 | ||
| 351 | // send each frame. | 351 | // send each frame. |
| 352 | while (!avs->empty()) { | 352 | while (!avs->empty()) { |
| @@ -504,7 +504,7 @@ int SrsMpegtsOverUdp::on_ts_audio(SrsTsMessage* msg, SrsBuffer* avs) | @@ -504,7 +504,7 @@ int SrsMpegtsOverUdp::on_ts_audio(SrsTsMessage* msg, SrsBuffer* avs) | ||
| 504 | } | 504 | } |
| 505 | 505 | ||
| 506 | // ts tbn to flv tbn. | 506 | // ts tbn to flv tbn. |
| 507 | - u_int32_t dts = msg->dts / 90; | 507 | + u_int32_t dts = (u_int32_t)(msg->dts / 90); |
| 508 | 508 | ||
| 509 | // send each frame. | 509 | // send each frame. |
| 510 | while (!avs->empty()) { | 510 | while (!avs->empty()) { |
| @@ -604,7 +604,7 @@ int SrsMpegtsOverUdp::connect() | @@ -604,7 +604,7 @@ int SrsMpegtsOverUdp::connect() | ||
| 604 | 604 | ||
| 605 | // when ok, ignore. | 605 | // when ok, ignore. |
| 606 | // TODO: FIXME: should reconnect when disconnected. | 606 | // TODO: FIXME: should reconnect when disconnected. |
| 607 | - if (io || client) { | 607 | + if (transport->connected()) { |
| 608 | return ret; | 608 | return ret; |
| 609 | } | 609 | } |
| 610 | 610 | ||
| @@ -616,12 +616,13 @@ int SrsMpegtsOverUdp::connect() | @@ -616,12 +616,13 @@ int SrsMpegtsOverUdp::connect() | ||
| 616 | } | 616 | } |
| 617 | 617 | ||
| 618 | // connect host. | 618 | // connect host. |
| 619 | - if ((ret = srs_socket_connect(req->host, req->port, ST_UTIME_NO_TIMEOUT, &stfd)) != ERROR_SUCCESS) { | 619 | + if ((ret = transport->connect(req->host, req->port, ST_UTIME_NO_TIMEOUT)) != ERROR_SUCCESS) { |
| 620 | srs_error("mpegts: connect server %s:%d failed. ret=%d", req->host.c_str(), req->port, ret); | 620 | srs_error("mpegts: connect server %s:%d failed. ret=%d", req->host.c_str(), req->port, ret); |
| 621 | return ret; | 621 | return ret; |
| 622 | } | 622 | } |
| 623 | - io = new SrsStSocket(stfd); | ||
| 624 | - client = new SrsRtmpClient(io); | 623 | + |
| 624 | + srs_freep(client); | ||
| 625 | + client = new SrsRtmpClient(transport); | ||
| 625 | 626 | ||
| 626 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); | 627 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); |
| 627 | client->set_send_timeout(SRS_CONSTS_RTMP_SEND_TIMEOUT_US); | 628 | client->set_send_timeout(SRS_CONSTS_RTMP_SEND_TIMEOUT_US); |
| @@ -704,9 +705,9 @@ int SrsMpegtsOverUdp::connect_app(string ep_server, int ep_port) | @@ -704,9 +705,9 @@ int SrsMpegtsOverUdp::connect_app(string ep_server, int ep_port) | ||
| 704 | void SrsMpegtsOverUdp::close() | 705 | void SrsMpegtsOverUdp::close() |
| 705 | { | 706 | { |
| 706 | srs_freep(client); | 707 | srs_freep(client); |
| 707 | - srs_freep(io); | ||
| 708 | srs_freep(req); | 708 | srs_freep(req); |
| 709 | - srs_close_stfd(stfd); | 709 | + |
| 710 | + transport->close(); | ||
| 710 | } | 711 | } |
| 711 | 712 | ||
| 712 | #endif | 713 | #endif |
| @@ -86,8 +86,7 @@ private: | @@ -86,8 +86,7 @@ private: | ||
| 86 | std::string output; | 86 | std::string output; |
| 87 | private: | 87 | private: |
| 88 | SrsRequest* req; | 88 | SrsRequest* req; |
| 89 | - st_netfd_t stfd; | ||
| 90 | - SrsStSocket* io; | 89 | + SrsTcpClient* transport; |
| 91 | SrsRtmpClient* client; | 90 | SrsRtmpClient* client; |
| 92 | int stream_id; | 91 | int stream_id; |
| 93 | private: | 92 | private: |
| @@ -1229,11 +1229,13 @@ int SrsRtmpConn::check_edge_token_traverse_auth() | @@ -1229,11 +1229,13 @@ int SrsRtmpConn::check_edge_token_traverse_auth() | ||
| 1229 | 1229 | ||
| 1230 | srs_assert(req); | 1230 | srs_assert(req); |
| 1231 | 1231 | ||
| 1232 | - st_netfd_t stsock = NULL; | 1232 | + SrsTcpClient* transport = new SrsTcpClient(); |
| 1233 | + SrsAutoFree(SrsTcpClient, transport); | ||
| 1234 | + | ||
| 1233 | vector<string> args = _srs_config->get_vhost_edge_origin(req->vhost)->args; | 1235 | vector<string> args = _srs_config->get_vhost_edge_origin(req->vhost)->args; |
| 1234 | for (int i = 0; i < (int)args.size(); i++) { | 1236 | for (int i = 0; i < (int)args.size(); i++) { |
| 1235 | string hostport = args.at(i); | 1237 | string hostport = args.at(i); |
| 1236 | - if ((ret = connect_server(hostport, &stsock)) == ERROR_SUCCESS) { | 1238 | + if ((ret = connect_server(hostport, transport)) == ERROR_SUCCESS) { |
| 1237 | break; | 1239 | break; |
| 1238 | } | 1240 | } |
| 1239 | } | 1241 | } |
| @@ -1242,20 +1244,13 @@ int SrsRtmpConn::check_edge_token_traverse_auth() | @@ -1242,20 +1244,13 @@ int SrsRtmpConn::check_edge_token_traverse_auth() | ||
| 1242 | return ret; | 1244 | return ret; |
| 1243 | } | 1245 | } |
| 1244 | 1246 | ||
| 1245 | - srs_assert(stsock); | ||
| 1246 | - SrsStSocket* io = new SrsStSocket(stsock); | ||
| 1247 | - SrsRtmpClient* client = new SrsRtmpClient(io); | ||
| 1248 | - | ||
| 1249 | - ret = do_token_traverse_auth(client); | 1247 | + SrsRtmpClient* client = new SrsRtmpClient(transport); |
| 1248 | + SrsAutoFree(SrsRtmpClient, client); | ||
| 1250 | 1249 | ||
| 1251 | - srs_freep(client); | ||
| 1252 | - srs_freep(io); | ||
| 1253 | - srs_close_stfd(stsock); | ||
| 1254 | - | ||
| 1255 | - return ret; | 1250 | + return do_token_traverse_auth(client); |
| 1256 | } | 1251 | } |
| 1257 | 1252 | ||
| 1258 | -int SrsRtmpConn::connect_server(string hostport, st_netfd_t* pstsock) | 1253 | +int SrsRtmpConn::connect_server(string hostport, SrsTcpClient* transport) |
| 1259 | { | 1254 | { |
| 1260 | int ret = ERROR_SUCCESS; | 1255 | int ret = ERROR_SUCCESS; |
| 1261 | 1256 | ||
| @@ -1268,16 +1263,14 @@ int SrsRtmpConn::connect_server(string hostport, st_netfd_t* pstsock) | @@ -1268,16 +1263,14 @@ int SrsRtmpConn::connect_server(string hostport, st_netfd_t* pstsock) | ||
| 1268 | srs_parse_hostport(hostport, server, port); | 1263 | srs_parse_hostport(hostport, server, port); |
| 1269 | 1264 | ||
| 1270 | // open socket. | 1265 | // open socket. |
| 1271 | - st_netfd_t stsock = NULL; | ||
| 1272 | int64_t timeout = SRS_EDGE_TOKEN_TRAVERSE_TIMEOUT_US; | 1266 | int64_t timeout = SRS_EDGE_TOKEN_TRAVERSE_TIMEOUT_US; |
| 1273 | - if ((ret = srs_socket_connect(server, port, timeout, &stsock)) != ERROR_SUCCESS) { | 1267 | + if ((ret = transport->connect(server, port, timeout)) != ERROR_SUCCESS) { |
| 1274 | srs_warn("edge token traverse failed, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", | 1268 | srs_warn("edge token traverse failed, tcUrl=%s to server=%s, port=%d, timeout=%"PRId64", ret=%d", |
| 1275 | req->tcUrl.c_str(), server.c_str(), port, timeout, ret); | 1269 | req->tcUrl.c_str(), server.c_str(), port, timeout, ret); |
| 1276 | return ret; | 1270 | return ret; |
| 1277 | } | 1271 | } |
| 1278 | srs_info("edge token auth connected, url=%s/%s, server=%s:%d", req->tcUrl.c_str(), req->stream.c_str(), server.c_str(), port); | 1272 | srs_info("edge token auth connected, url=%s/%s, server=%s:%d", req->tcUrl.c_str(), req->stream.c_str(), server.c_str(), port); |
| 1279 | 1273 | ||
| 1280 | - *pstsock = stsock; | ||
| 1281 | return ret; | 1274 | return ret; |
| 1282 | } | 1275 | } |
| 1283 | 1276 |
| @@ -134,7 +134,7 @@ private: | @@ -134,7 +134,7 @@ private: | ||
| 134 | virtual void set_sock_options(); | 134 | virtual void set_sock_options(); |
| 135 | private: | 135 | private: |
| 136 | virtual int check_edge_token_traverse_auth(); | 136 | virtual int check_edge_token_traverse_auth(); |
| 137 | - virtual int connect_server(std::string hostport, st_netfd_t* pstsock); | 137 | + virtual int connect_server(std::string hostport, SrsTcpClient* transport); |
| 138 | virtual int do_token_traverse_auth(SrsRtmpClient* client); | 138 | virtual int do_token_traverse_auth(SrsRtmpClient* client); |
| 139 | /** | 139 | /** |
| 140 | * when the connection disconnect, call this method. | 140 | * when the connection disconnect, call this method. |
| @@ -195,8 +195,8 @@ SrsRtspConn::SrsRtspConn(SrsRtspCaster* c, st_netfd_t fd, std::string o) | @@ -195,8 +195,8 @@ SrsRtspConn::SrsRtspConn(SrsRtspCaster* c, st_netfd_t fd, std::string o) | ||
| 195 | trd = new SrsOneCycleThread("rtsp", this); | 195 | trd = new SrsOneCycleThread("rtsp", this); |
| 196 | 196 | ||
| 197 | req = NULL; | 197 | req = NULL; |
| 198 | - io = NULL; | ||
| 199 | client = NULL; | 198 | client = NULL; |
| 199 | + transport = new SrsTcpClient(); | ||
| 200 | stream_id = 0; | 200 | stream_id = 0; |
| 201 | vjitter = new SrsRtspJitter(); | 201 | vjitter = new SrsRtspJitter(); |
| 202 | ajitter = new SrsRtspJitter(); | 202 | ajitter = new SrsRtspJitter(); |
| @@ -219,7 +219,7 @@ SrsRtspConn::~SrsRtspConn() | @@ -219,7 +219,7 @@ SrsRtspConn::~SrsRtspConn() | ||
| 219 | srs_freep(rtsp); | 219 | srs_freep(rtsp); |
| 220 | 220 | ||
| 221 | srs_freep(client); | 221 | srs_freep(client); |
| 222 | - srs_freep(io); | 222 | + srs_freep(transport); |
| 223 | srs_freep(req); | 223 | srs_freep(req); |
| 224 | 224 | ||
| 225 | srs_freep(vjitter); | 225 | srs_freep(vjitter); |
| @@ -254,7 +254,7 @@ int SrsRtspConn::do_cycle() | @@ -254,7 +254,7 @@ int SrsRtspConn::do_cycle() | ||
| 254 | srs_info("rtsp: got rtsp request"); | 254 | srs_info("rtsp: got rtsp request"); |
| 255 | 255 | ||
| 256 | if (req->is_options()) { | 256 | if (req->is_options()) { |
| 257 | - SrsRtspOptionsResponse* res = new SrsRtspOptionsResponse(req->seq); | 257 | + SrsRtspOptionsResponse* res = new SrsRtspOptionsResponse((int)req->seq); |
| 258 | res->session = session; | 258 | res->session = session; |
| 259 | if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) { | 259 | if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) { |
| 260 | if (!srs_is_client_gracefully_close(ret)) { | 260 | if (!srs_is_client_gracefully_close(ret)) { |
| @@ -288,7 +288,7 @@ int SrsRtspConn::do_cycle() | @@ -288,7 +288,7 @@ int SrsRtspConn::do_cycle() | ||
| 288 | audio_sample_rate, audio_channel, rtsp_tcUrl.c_str(), rtsp_stream.c_str() | 288 | audio_sample_rate, audio_channel, rtsp_tcUrl.c_str(), rtsp_stream.c_str() |
| 289 | ); | 289 | ); |
| 290 | 290 | ||
| 291 | - SrsRtspResponse* res = new SrsRtspResponse(req->seq); | 291 | + SrsRtspResponse* res = new SrsRtspResponse((int)req->seq); |
| 292 | res->session = session; | 292 | res->session = session; |
| 293 | if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) { | 293 | if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) { |
| 294 | if (!srs_is_client_gracefully_close(ret)) { | 294 | if (!srs_is_client_gracefully_close(ret)) { |
| @@ -328,7 +328,7 @@ int SrsRtspConn::do_cycle() | @@ -328,7 +328,7 @@ int SrsRtspConn::do_cycle() | ||
| 328 | session = "O9EaZ4bf"; // TODO: FIXME: generate session id. | 328 | session = "O9EaZ4bf"; // TODO: FIXME: generate session id. |
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | - SrsRtspSetupResponse* res = new SrsRtspSetupResponse(req->seq); | 331 | + SrsRtspSetupResponse* res = new SrsRtspSetupResponse((int)req->seq); |
| 332 | res->client_port_min = req->transport->client_port_min; | 332 | res->client_port_min = req->transport->client_port_min; |
| 333 | res->client_port_max = req->transport->client_port_max; | 333 | res->client_port_max = req->transport->client_port_max; |
| 334 | res->local_port_min = lpm; | 334 | res->local_port_min = lpm; |
| @@ -341,7 +341,7 @@ int SrsRtspConn::do_cycle() | @@ -341,7 +341,7 @@ int SrsRtspConn::do_cycle() | ||
| 341 | return ret; | 341 | return ret; |
| 342 | } | 342 | } |
| 343 | } else if (req->is_record()) { | 343 | } else if (req->is_record()) { |
| 344 | - SrsRtspResponse* res = new SrsRtspResponse(req->seq); | 344 | + SrsRtspResponse* res = new SrsRtspResponse((int)req->seq); |
| 345 | res->session = session; | 345 | res->session = session; |
| 346 | if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) { | 346 | if ((ret = rtsp->send_message(res)) != ERROR_SUCCESS) { |
| 347 | if (!srs_is_client_gracefully_close(ret)) { | 347 | if (!srs_is_client_gracefully_close(ret)) { |
| @@ -434,7 +434,11 @@ int SrsRtspConn::on_rtp_video(SrsRtpPacket* pkt, int64_t dts, int64_t pts) | @@ -434,7 +434,11 @@ int SrsRtspConn::on_rtp_video(SrsRtpPacket* pkt, int64_t dts, int64_t pts) | ||
| 434 | return ret; | 434 | return ret; |
| 435 | } | 435 | } |
| 436 | 436 | ||
| 437 | - if ((ret = write_h264_ipb_frame(pkt->payload->bytes(), pkt->payload->length(), dts / 90, pts / 90)) != ERROR_SUCCESS) { | 437 | + char* bytes = pkt->payload->bytes(); |
| 438 | + int length = pkt->payload->length(); | ||
| 439 | + u_int32_t fdts = (u_int32_t)(dts / 90); | ||
| 440 | + u_int32_t fpts = (u_int32_t)(pts / 90); | ||
| 441 | + if ((ret = write_h264_ipb_frame(bytes, length, fdts, fpts)) != ERROR_SUCCESS) { | ||
| 438 | return ret; | 442 | return ret; |
| 439 | } | 443 | } |
| 440 | 444 | ||
| @@ -476,7 +480,7 @@ int SrsRtspConn::kickoff_audio_cache(SrsRtpPacket* pkt, int64_t dts) | @@ -476,7 +480,7 @@ int SrsRtspConn::kickoff_audio_cache(SrsRtpPacket* pkt, int64_t dts) | ||
| 476 | int nb_frame = acache->audio_samples->sample_units[i].size; | 480 | int nb_frame = acache->audio_samples->sample_units[i].size; |
| 477 | int64_t timestamp = (acache->dts + delta * i) / 90; | 481 | int64_t timestamp = (acache->dts + delta * i) / 90; |
| 478 | acodec->aac_packet_type = 1; | 482 | acodec->aac_packet_type = 1; |
| 479 | - if ((ret = write_audio_raw_frame(frame, nb_frame, acodec, timestamp)) != ERROR_SUCCESS) { | 483 | + if ((ret = write_audio_raw_frame(frame, nb_frame, acodec, (u_int32_t)timestamp)) != ERROR_SUCCESS) { |
| 480 | return ret; | 484 | return ret; |
| 481 | } | 485 | } |
| 482 | } | 486 | } |
| @@ -497,7 +501,7 @@ int SrsRtspConn::write_sequence_header() | @@ -497,7 +501,7 @@ int SrsRtspConn::write_sequence_header() | ||
| 497 | int64_t dts = vjitter->timestamp() / 90; | 501 | int64_t dts = vjitter->timestamp() / 90; |
| 498 | 502 | ||
| 499 | // send video sps/pps | 503 | // send video sps/pps |
| 500 | - if ((ret = write_h264_sps_pps(dts, dts)) != ERROR_SUCCESS) { | 504 | + if ((ret = write_h264_sps_pps((u_int32_t)dts, (u_int32_t)dts)) != ERROR_SUCCESS) { |
| 501 | return ret; | 505 | return ret; |
| 502 | } | 506 | } |
| 503 | 507 | ||
| @@ -535,7 +539,7 @@ int SrsRtspConn::write_sequence_header() | @@ -535,7 +539,7 @@ int SrsRtspConn::write_sequence_header() | ||
| 535 | break; | 539 | break; |
| 536 | }; | 540 | }; |
| 537 | 541 | ||
| 538 | - if ((ret = write_audio_raw_frame((char*)sh.data(), (int)sh.length(), acodec, dts)) != ERROR_SUCCESS) { | 542 | + if ((ret = write_audio_raw_frame((char*)sh.data(), (int)sh.length(), acodec, (u_int32_t)dts)) != ERROR_SUCCESS) { |
| 539 | return ret; | 543 | return ret; |
| 540 | } | 544 | } |
| 541 | } | 545 | } |
| @@ -642,7 +646,8 @@ int SrsRtspConn::connect() | @@ -642,7 +646,8 @@ int SrsRtspConn::connect() | ||
| 642 | int ret = ERROR_SUCCESS; | 646 | int ret = ERROR_SUCCESS; |
| 643 | 647 | ||
| 644 | // when ok, ignore. | 648 | // when ok, ignore. |
| 645 | - if (io || client) { | 649 | + // TODO: FIXME: support reconnect. |
| 650 | + if (transport->connected()) { | ||
| 646 | return ret; | 651 | return ret; |
| 647 | } | 652 | } |
| 648 | 653 | ||
| @@ -663,12 +668,13 @@ int SrsRtspConn::connect() | @@ -663,12 +668,13 @@ int SrsRtspConn::connect() | ||
| 663 | } | 668 | } |
| 664 | 669 | ||
| 665 | // connect host. | 670 | // connect host. |
| 666 | - if ((ret = srs_socket_connect(req->host, req->port, ST_UTIME_NO_TIMEOUT, &stfd)) != ERROR_SUCCESS) { | 671 | + if ((ret = transport->connect(req->host, req->port, ST_UTIME_NO_TIMEOUT)) != ERROR_SUCCESS) { |
| 667 | srs_error("rtsp: connect server %s:%d failed. ret=%d", req->host.c_str(), req->port, ret); | 672 | srs_error("rtsp: connect server %s:%d failed. ret=%d", req->host.c_str(), req->port, ret); |
| 668 | return ret; | 673 | return ret; |
| 669 | } | 674 | } |
| 670 | - io = new SrsStSocket(stfd); | ||
| 671 | - client = new SrsRtmpClient(io); | 675 | + |
| 676 | + srs_freep(client); | ||
| 677 | + client = new SrsRtmpClient(transport); | ||
| 672 | 678 | ||
| 673 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); | 679 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); |
| 674 | client->set_send_timeout(SRS_CONSTS_RTMP_SEND_TIMEOUT_US); | 680 | client->set_send_timeout(SRS_CONSTS_RTMP_SEND_TIMEOUT_US); |
| @@ -139,7 +139,7 @@ private: | @@ -139,7 +139,7 @@ private: | ||
| 139 | SrsOneCycleThread* trd; | 139 | SrsOneCycleThread* trd; |
| 140 | private: | 140 | private: |
| 141 | SrsRequest* req; | 141 | SrsRequest* req; |
| 142 | - SrsStSocket* io; | 142 | + SrsTcpClient* transport; |
| 143 | SrsRtmpClient* client; | 143 | SrsRtmpClient* client; |
| 144 | SrsRtspJitter* vjitter; | 144 | SrsRtspJitter* vjitter; |
| 145 | SrsRtspJitter* ajitter; | 145 | SrsRtspJitter* ajitter; |
| @@ -637,8 +637,7 @@ private: | @@ -637,8 +637,7 @@ private: | ||
| 637 | int64_t raw_aac_dts; | 637 | int64_t raw_aac_dts; |
| 638 | private: | 638 | private: |
| 639 | SrsRequest* req; | 639 | SrsRequest* req; |
| 640 | - st_netfd_t stfd; | ||
| 641 | - SrsStSocket* io; | 640 | + SrsTcpClient* transport; |
| 642 | SrsRtmpClient* client; | 641 | SrsRtmpClient* client; |
| 643 | int stream_id; | 642 | int stream_id; |
| 644 | private: | 643 | private: |
| @@ -658,9 +657,8 @@ public: | @@ -658,9 +657,8 @@ public: | ||
| 658 | raw_aac_dts = srs_update_system_time_ms(); | 657 | raw_aac_dts = srs_update_system_time_ms(); |
| 659 | 658 | ||
| 660 | req = NULL; | 659 | req = NULL; |
| 661 | - io = NULL; | ||
| 662 | client = NULL; | 660 | client = NULL; |
| 663 | - stfd = NULL; | 661 | + transport = new SrsTcpClient(); |
| 664 | stream_id = 0; | 662 | stream_id = 0; |
| 665 | 663 | ||
| 666 | avc = new SrsRawH264Stream(); | 664 | avc = new SrsRawH264Stream(); |
| @@ -672,6 +670,7 @@ public: | @@ -672,6 +670,7 @@ public: | ||
| 672 | virtual ~SrsIngestSrsOutput() { | 670 | virtual ~SrsIngestSrsOutput() { |
| 673 | close(); | 671 | close(); |
| 674 | 672 | ||
| 673 | + srs_freep(transport); | ||
| 675 | srs_freep(avc); | 674 | srs_freep(avc); |
| 676 | srs_freep(aac); | 675 | srs_freep(aac); |
| 677 | 676 | ||
| @@ -1211,7 +1210,7 @@ int SrsIngestSrsOutput::connect() | @@ -1211,7 +1210,7 @@ int SrsIngestSrsOutput::connect() | ||
| 1211 | 1210 | ||
| 1212 | // when ok, ignore. | 1211 | // when ok, ignore. |
| 1213 | // TODO: FIXME: should reconnect when disconnected. | 1212 | // TODO: FIXME: should reconnect when disconnected. |
| 1214 | - if (io || client) { | 1213 | + if (transport->connected()) { |
| 1215 | return ret; | 1214 | return ret; |
| 1216 | } | 1215 | } |
| 1217 | 1216 | ||
| @@ -1235,12 +1234,13 @@ int SrsIngestSrsOutput::connect() | @@ -1235,12 +1234,13 @@ int SrsIngestSrsOutput::connect() | ||
| 1235 | } | 1234 | } |
| 1236 | 1235 | ||
| 1237 | // connect host. | 1236 | // connect host. |
| 1238 | - if ((ret = srs_socket_connect(req->host, req->port, ST_UTIME_NO_TIMEOUT, &stfd)) != ERROR_SUCCESS) { | 1237 | + if ((ret = transport->connect(req->host, req->port, ST_UTIME_NO_TIMEOUT)) != ERROR_SUCCESS) { |
| 1239 | srs_error("mpegts: connect server %s:%d failed. ret=%d", req->host.c_str(), req->port, ret); | 1238 | srs_error("mpegts: connect server %s:%d failed. ret=%d", req->host.c_str(), req->port, ret); |
| 1240 | return ret; | 1239 | return ret; |
| 1241 | } | 1240 | } |
| 1242 | - io = new SrsStSocket(stfd); | ||
| 1243 | - client = new SrsRtmpClient(io); | 1241 | + |
| 1242 | + srs_freep(client); | ||
| 1243 | + client = new SrsRtmpClient(transport); | ||
| 1244 | 1244 | ||
| 1245 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); | 1245 | client->set_recv_timeout(SRS_CONSTS_RTMP_RECV_TIMEOUT_US); |
| 1246 | client->set_send_timeout(SRS_CONSTS_RTMP_SEND_TIMEOUT_US); | 1246 | client->set_send_timeout(SRS_CONSTS_RTMP_SEND_TIMEOUT_US); |
| @@ -1326,9 +1326,9 @@ void SrsIngestSrsOutput::close() | @@ -1326,9 +1326,9 @@ void SrsIngestSrsOutput::close() | ||
| 1326 | h264_sps_pps_sent = false; | 1326 | h264_sps_pps_sent = false; |
| 1327 | 1327 | ||
| 1328 | srs_freep(client); | 1328 | srs_freep(client); |
| 1329 | - srs_freep(io); | ||
| 1330 | srs_freep(req); | 1329 | srs_freep(req); |
| 1331 | - srs_close_stfd(stfd); | 1330 | + |
| 1331 | + transport->close(); | ||
| 1332 | } | 1332 | } |
| 1333 | 1333 | ||
| 1334 | // the context for ingest hls stream. | 1334 | // the context for ingest hls stream. |
-
请 注册 或 登录 后发表评论