From c617d2aaa59fb2970cccc0870791286a00e64ad4 Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 10 May 2015 10:35:35 +0800 Subject: [PATCH] support push flv stream over HTTP POST to SRS. --- README.md | 3 +++ trunk/src/app/srs_app_caster_flv.cpp | 17 ++++++++++++++--- trunk/src/app/srs_app_caster_flv.hpp | 3 +++ trunk/src/core/srs_core.hpp | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8ea7cb403..fab5c9d27 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). @@ -560,6 +562,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. diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 0a419c5aa..5d39ca714 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 161 +#define VERSION_REVISION 162 // server info. #define RTMP_SIG_SRS_KEY "SRS"