正在显示
4 个修改的文件
包含
54 行增加
和
3 行删除
@@ -192,6 +192,7 @@ Supported operating systems and hardware: | @@ -192,6 +192,7 @@ Supported operating systems and hardware: | ||
192 | * 2013-10-17, Created.<br/> | 192 | * 2013-10-17, Created.<br/> |
193 | 193 | ||
194 | ## History | 194 | ## History |
195 | +* v1.0, 2014-04-27, support basic edge(play/publish) RTMP server. 0.9.78 | ||
195 | * v1.0, 2014-04-25, add donation page. 0.9.76 | 196 | * v1.0, 2014-04-25, add donation page. 0.9.76 |
196 | * v1.0, 2014-04-24, support live flashP2P(integrated by chnvideo VDN). 0.9.75 | 197 | * v1.0, 2014-04-24, support live flashP2P(integrated by chnvideo VDN). 0.9.75 |
197 | * v1.0, 2014-04-21, support android app to start srs for internal edge. 0.9.72 | 198 | * v1.0, 2014-04-21, support android app to start srs for internal edge. 0.9.72 |
@@ -49,6 +49,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -49,6 +49,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
49 | // when edge timeout, retry next. | 49 | // when edge timeout, retry next. |
50 | #define SRS_EDGE_INGESTER_TIMEOUT_US (int64_t)(3*1000*1000LL) | 50 | #define SRS_EDGE_INGESTER_TIMEOUT_US (int64_t)(3*1000*1000LL) |
51 | 51 | ||
52 | +// when error, edge ingester sleep for a while and retry. | ||
53 | +#define SRS_EDGE_FORWARDER_SLEEP_US (int64_t)(1*1000*1000LL) | ||
54 | + | ||
55 | +// when edge timeout, retry next. | ||
56 | +#define SRS_EDGE_FORWARDER_TIMEOUT_US (int64_t)(3*1000*1000LL) | ||
57 | + | ||
52 | SrsEdgeIngester::SrsEdgeIngester() | 58 | SrsEdgeIngester::SrsEdgeIngester() |
53 | { | 59 | { |
54 | io = NULL; | 60 | io = NULL; |
@@ -316,6 +322,7 @@ SrsEdgeForwarder::SrsEdgeForwarder() | @@ -316,6 +322,7 @@ SrsEdgeForwarder::SrsEdgeForwarder() | ||
316 | origin_index = 0; | 322 | origin_index = 0; |
317 | stream_id = 0; | 323 | stream_id = 0; |
318 | stfd = NULL; | 324 | stfd = NULL; |
325 | + pthread = new SrsThread(this, SRS_EDGE_FORWARDER_SLEEP_US); | ||
319 | } | 326 | } |
320 | 327 | ||
321 | SrsEdgeForwarder::~SrsEdgeForwarder() | 328 | SrsEdgeForwarder::~SrsEdgeForwarder() |
@@ -367,17 +374,54 @@ int SrsEdgeForwarder::start() | @@ -367,17 +374,54 @@ int SrsEdgeForwarder::start() | ||
367 | return ret; | 374 | return ret; |
368 | } | 375 | } |
369 | 376 | ||
370 | - return ret; | 377 | + return pthread->start(); |
371 | } | 378 | } |
372 | 379 | ||
373 | void SrsEdgeForwarder::stop() | 380 | void SrsEdgeForwarder::stop() |
374 | { | 381 | { |
382 | + pthread->stop(); | ||
383 | + | ||
375 | close_underlayer_socket(); | 384 | close_underlayer_socket(); |
376 | 385 | ||
377 | srs_freep(client); | 386 | srs_freep(client); |
378 | srs_freep(io); | 387 | srs_freep(io); |
379 | } | 388 | } |
380 | 389 | ||
390 | +int SrsEdgeForwarder::cycle() | ||
391 | +{ | ||
392 | + int ret = ERROR_SUCCESS; | ||
393 | + | ||
394 | + client->set_recv_timeout(SRS_EDGE_FORWARDER_TIMEOUT_US); | ||
395 | + | ||
396 | + SrsPithyPrint pithy_print(SRS_STAGE_EDGE); | ||
397 | + | ||
398 | + while (pthread->can_loop()) { | ||
399 | + // switch to other st-threads. | ||
400 | + st_usleep(0); | ||
401 | + | ||
402 | + pithy_print.elapse(); | ||
403 | + | ||
404 | + // pithy print | ||
405 | + if (pithy_print.can_print()) { | ||
406 | + srs_trace("-> time=%"PRId64", obytes=%"PRId64", ibytes=%"PRId64", okbps=%d, ikbps=%d", | ||
407 | + pithy_print.age(), client->get_send_bytes(), client->get_recv_bytes(), client->get_send_kbps(), client->get_recv_kbps()); | ||
408 | + } | ||
409 | + | ||
410 | + // read from client. | ||
411 | + SrsCommonMessage* msg = NULL; | ||
412 | + if ((ret = client->recv_message(&msg)) != ERROR_SUCCESS) { | ||
413 | + srs_info("ignore forwarder recv origin server message failed. ret=%d", ret); | ||
414 | + continue; | ||
415 | + } | ||
416 | + srs_verbose("edge loop recv message. ret=%d", ret); | ||
417 | + | ||
418 | + srs_assert(msg); | ||
419 | + SrsAutoFree(SrsCommonMessage, msg, false); | ||
420 | + } | ||
421 | + | ||
422 | + return ret; | ||
423 | +} | ||
424 | + | ||
381 | int SrsEdgeForwarder::proxy(SrsCommonMessage* msg) | 425 | int SrsEdgeForwarder::proxy(SrsCommonMessage* msg) |
382 | { | 426 | { |
383 | int ret = ERROR_SUCCESS; | 427 | int ret = ERROR_SUCCESS; |
@@ -104,7 +104,7 @@ private: | @@ -104,7 +104,7 @@ private: | ||
104 | /** | 104 | /** |
105 | * edge used to forward stream to origin. | 105 | * edge used to forward stream to origin. |
106 | */ | 106 | */ |
107 | -class SrsEdgeForwarder | 107 | +class SrsEdgeForwarder : public ISrsThreadHandler |
108 | { | 108 | { |
109 | private: | 109 | private: |
110 | int stream_id; | 110 | int stream_id; |
@@ -112,6 +112,7 @@ private: | @@ -112,6 +112,7 @@ private: | ||
112 | SrsSource* _source; | 112 | SrsSource* _source; |
113 | SrsPublishEdge* _edge; | 113 | SrsPublishEdge* _edge; |
114 | SrsRequest* _req; | 114 | SrsRequest* _req; |
115 | + SrsThread* pthread; | ||
115 | st_netfd_t stfd; | 116 | st_netfd_t stfd; |
116 | ISrsProtocolReaderWriter* io; | 117 | ISrsProtocolReaderWriter* io; |
117 | SrsRtmpClient* client; | 118 | SrsRtmpClient* client; |
@@ -123,6 +124,9 @@ public: | @@ -123,6 +124,9 @@ public: | ||
123 | virtual int initialize(SrsSource* source, SrsPublishEdge* edge, SrsRequest* req); | 124 | virtual int initialize(SrsSource* source, SrsPublishEdge* edge, SrsRequest* req); |
124 | virtual int start(); | 125 | virtual int start(); |
125 | virtual void stop(); | 126 | virtual void stop(); |
127 | +// interface ISrsThreadHandler | ||
128 | +public: | ||
129 | + virtual int cycle(); | ||
126 | public: | 130 | public: |
127 | virtual int proxy(SrsCommonMessage* msg); | 131 | virtual int proxy(SrsCommonMessage* msg); |
128 | private: | 132 | private: |
@@ -134,6 +138,7 @@ private: | @@ -134,6 +138,7 @@ private: | ||
134 | * play edge control service. | 138 | * play edge control service. |
135 | * downloading edge speed-up. | 139 | * downloading edge speed-up. |
136 | */ | 140 | */ |
141 | +// TODO: FIXME: support reload | ||
137 | class SrsPlayEdge | 142 | class SrsPlayEdge |
138 | { | 143 | { |
139 | private: | 144 | private: |
@@ -164,6 +169,7 @@ public: | @@ -164,6 +169,7 @@ public: | ||
164 | * publish edge control service. | 169 | * publish edge control service. |
165 | * uploading edge speed-up. | 170 | * uploading edge speed-up. |
166 | */ | 171 | */ |
172 | +// TODO: FIXME: support reload | ||
167 | class SrsPublishEdge | 173 | class SrsPublishEdge |
168 | { | 174 | { |
169 | private: | 175 | private: |
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
31 | // current release version | 31 | // current release version |
32 | #define VERSION_MAJOR "0" | 32 | #define VERSION_MAJOR "0" |
33 | #define VERSION_MINOR "9" | 33 | #define VERSION_MINOR "9" |
34 | -#define VERSION_REVISION "77" | 34 | +#define VERSION_REVISION "78" |
35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION | 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION |
36 | // server info. | 36 | // server info. |
37 | #define RTMP_SIG_SRS_KEY "srs" | 37 | #define RTMP_SIG_SRS_KEY "srs" |
-
请 注册 或 登录 后发表评论