diff --git a/README.md b/README.md index 597f6d37c..439f29d2e 100755 --- a/README.md +++ b/README.md @@ -522,6 +522,8 @@ Supported operating systems and hardware: [#250](https://github.com/simple-rtmp-server/srs/issues/250). 1. [experiment] Support push RTSP to SRS, read [#133](https://github.com/simple-rtmp-server/srs/issues/133). +1. [experiment] Support push flv stream over HTTP POST to SRS, read +[wiki](https://github.com/simple-rtmp-server/srs/wiki/v2_CN_Streamer#push-http-flv-to-srs). 1. Start [2.0release branch](https://github.com/simple-rtmp-server/srs/tree/2.0release). 1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). 1. [no-plan] Support RTMP 302 redirect [#92](https://github.com/simple-rtmp-server/srs/issues/92). @@ -564,6 +566,7 @@ Supported operating systems and hardware: ### SRS 2.0 history +* v2.0, 2015-05-10, support push flv stream over HTTP POST to SRS. * v2.0, 2015-04-20, support ingest hls live stream to RTMP. * v2.0, 2015-04-15, for [#383](https://github.com/simple-rtmp-server/srs/issues/383), support mix_correct algorithm. 2.0.161. * v2.0, 2015-04-13, for [#381](https://github.com/simple-rtmp-server/srs/issues/381), support reap hls/ts by gop or not. 2.0.160. diff --git a/trunk/src/app/srs_app_caster_flv.cpp b/trunk/src/app/srs_app_caster_flv.cpp index 8e88f37fb..146820f42 100644 --- a/trunk/src/app/srs_app_caster_flv.cpp +++ b/trunk/src/app/srs_app_caster_flv.cpp @@ -175,6 +175,17 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: return ret; } + ret = do_proxy(rr, &dec); + close(); + + return ret; +} + +int SrsDynamicHttpConn::do_proxy(ISrsHttpResponseReader* rr, SrsFlvDecoder* dec) +{ + int ret = ERROR_SUCCESS; + + char pps[4]; while (!rr->eof()) { pprint->elapse(); @@ -185,7 +196,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: char type; int32_t size; u_int32_t time; - if ((ret = dec.read_tag_header(&type, &size, &time)) != ERROR_SUCCESS) { + if ((ret = dec->read_tag_header(&type, &size, &time)) != ERROR_SUCCESS) { if (!srs_is_client_gracefully_close(ret)) { srs_error("flv: proxy tag header failed. ret=%d", ret); } @@ -193,7 +204,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: } char* data = new char[size]; - if ((ret = dec.read_tag_data(data, size)) != ERROR_SUCCESS) { + if ((ret = dec->read_tag_data(data, size)) != ERROR_SUCCESS) { srs_freep(data); if (!srs_is_client_gracefully_close(ret)) { srs_error("flv: proxy tag data failed. ret=%d", ret); @@ -208,7 +219,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: return ret; } - if ((ret = dec.read_previous_tag_size(pps)) != ERROR_SUCCESS) { + if ((ret = dec->read_previous_tag_size(pps)) != ERROR_SUCCESS) { if (!srs_is_client_gracefully_close(ret)) { srs_error("flv: proxy tag header pps failed. ret=%d", ret); } diff --git a/trunk/src/app/srs_app_caster_flv.hpp b/trunk/src/app/srs_app_caster_flv.hpp index ac8987fd2..58de503f9 100644 --- a/trunk/src/app/srs_app_caster_flv.hpp +++ b/trunk/src/app/srs_app_caster_flv.hpp @@ -42,6 +42,8 @@ class SrsRtmpClient; class SrsStSocket; class SrsRequest; class SrsPithyPrint; +class ISrsHttpResponseReader; +class SrsFlvDecoder; #include #include @@ -98,6 +100,7 @@ public: public: virtual int proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std::string o); private: + virtual int do_proxy(ISrsHttpResponseReader* rr, SrsFlvDecoder* dec); virtual int rtmp_write_packet(char type, u_int32_t timestamp, char* data, int size); private: // connect to rtmp output url.