正在显示
4 个修改的文件
包含
21 行增加
和
4 行删除
| @@ -522,6 +522,8 @@ Supported operating systems and hardware: | @@ -522,6 +522,8 @@ Supported operating systems and hardware: | ||
| 522 | [#250](https://github.com/simple-rtmp-server/srs/issues/250). | 522 | [#250](https://github.com/simple-rtmp-server/srs/issues/250). |
| 523 | 1. [experiment] Support push RTSP to SRS, read | 523 | 1. [experiment] Support push RTSP to SRS, read |
| 524 | [#133](https://github.com/simple-rtmp-server/srs/issues/133). | 524 | [#133](https://github.com/simple-rtmp-server/srs/issues/133). |
| 525 | +1. [experiment] Support push flv stream over HTTP POST to SRS, read | ||
| 526 | +[wiki](https://github.com/simple-rtmp-server/srs/wiki/v2_CN_Streamer#push-http-flv-to-srs). | ||
| 525 | 1. Start [2.0release branch](https://github.com/simple-rtmp-server/srs/tree/2.0release). | 527 | 1. Start [2.0release branch](https://github.com/simple-rtmp-server/srs/tree/2.0release). |
| 526 | 1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). | 528 | 1. [no-plan] Support <500ms latency, FRSC(Fast RTMP-compatible Stream Channel tech). |
| 527 | 1. [no-plan] Support RTMP 302 redirect [#92](https://github.com/simple-rtmp-server/srs/issues/92). | 529 | 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: | @@ -560,6 +562,7 @@ Supported operating systems and hardware: | ||
| 560 | 562 | ||
| 561 | ### SRS 2.0 history | 563 | ### SRS 2.0 history |
| 562 | 564 | ||
| 565 | +* v2.0, 2015-05-10, support push flv stream over HTTP POST to SRS. | ||
| 563 | * v2.0, 2015-04-20, support ingest hls live stream to RTMP. | 566 | * v2.0, 2015-04-20, support ingest hls live stream to RTMP. |
| 564 | * v2.0, 2015-04-15, for [#383](https://github.com/simple-rtmp-server/srs/issues/383), support mix_correct algorithm. 2.0.161. | 567 | * v2.0, 2015-04-15, for [#383](https://github.com/simple-rtmp-server/srs/issues/383), support mix_correct algorithm. 2.0.161. |
| 565 | * 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. | 568 | * 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. |
| @@ -175,6 +175,17 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | @@ -175,6 +175,17 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | ||
| 175 | return ret; | 175 | return ret; |
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | + ret = do_proxy(rr, &dec); | ||
| 179 | + close(); | ||
| 180 | + | ||
| 181 | + return ret; | ||
| 182 | +} | ||
| 183 | + | ||
| 184 | +int SrsDynamicHttpConn::do_proxy(ISrsHttpResponseReader* rr, SrsFlvDecoder* dec) | ||
| 185 | +{ | ||
| 186 | + int ret = ERROR_SUCCESS; | ||
| 187 | + | ||
| 188 | + char pps[4]; | ||
| 178 | while (!rr->eof()) { | 189 | while (!rr->eof()) { |
| 179 | pprint->elapse(); | 190 | pprint->elapse(); |
| 180 | 191 | ||
| @@ -185,7 +196,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | @@ -185,7 +196,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | ||
| 185 | char type; | 196 | char type; |
| 186 | int32_t size; | 197 | int32_t size; |
| 187 | u_int32_t time; | 198 | u_int32_t time; |
| 188 | - if ((ret = dec.read_tag_header(&type, &size, &time)) != ERROR_SUCCESS) { | 199 | + if ((ret = dec->read_tag_header(&type, &size, &time)) != ERROR_SUCCESS) { |
| 189 | if (!srs_is_client_gracefully_close(ret)) { | 200 | if (!srs_is_client_gracefully_close(ret)) { |
| 190 | srs_error("flv: proxy tag header failed. ret=%d", ret); | 201 | srs_error("flv: proxy tag header failed. ret=%d", ret); |
| 191 | } | 202 | } |
| @@ -193,7 +204,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | @@ -193,7 +204,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | ||
| 193 | } | 204 | } |
| 194 | 205 | ||
| 195 | char* data = new char[size]; | 206 | char* data = new char[size]; |
| 196 | - if ((ret = dec.read_tag_data(data, size)) != ERROR_SUCCESS) { | 207 | + if ((ret = dec->read_tag_data(data, size)) != ERROR_SUCCESS) { |
| 197 | srs_freep(data); | 208 | srs_freep(data); |
| 198 | if (!srs_is_client_gracefully_close(ret)) { | 209 | if (!srs_is_client_gracefully_close(ret)) { |
| 199 | srs_error("flv: proxy tag data failed. ret=%d", ret); | 210 | srs_error("flv: proxy tag data failed. ret=%d", ret); |
| @@ -208,7 +219,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | @@ -208,7 +219,7 @@ int SrsDynamicHttpConn::proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std: | ||
| 208 | return ret; | 219 | return ret; |
| 209 | } | 220 | } |
| 210 | 221 | ||
| 211 | - if ((ret = dec.read_previous_tag_size(pps)) != ERROR_SUCCESS) { | 222 | + if ((ret = dec->read_previous_tag_size(pps)) != ERROR_SUCCESS) { |
| 212 | if (!srs_is_client_gracefully_close(ret)) { | 223 | if (!srs_is_client_gracefully_close(ret)) { |
| 213 | srs_error("flv: proxy tag header pps failed. ret=%d", ret); | 224 | srs_error("flv: proxy tag header pps failed. ret=%d", ret); |
| 214 | } | 225 | } |
| @@ -42,6 +42,8 @@ class SrsRtmpClient; | @@ -42,6 +42,8 @@ class SrsRtmpClient; | ||
| 42 | class SrsStSocket; | 42 | class SrsStSocket; |
| 43 | class SrsRequest; | 43 | class SrsRequest; |
| 44 | class SrsPithyPrint; | 44 | class SrsPithyPrint; |
| 45 | +class ISrsHttpResponseReader; | ||
| 46 | +class SrsFlvDecoder; | ||
| 45 | 47 | ||
| 46 | #include <srs_app_st.hpp> | 48 | #include <srs_app_st.hpp> |
| 47 | #include <srs_app_listener.hpp> | 49 | #include <srs_app_listener.hpp> |
| @@ -98,6 +100,7 @@ public: | @@ -98,6 +100,7 @@ public: | ||
| 98 | public: | 100 | public: |
| 99 | virtual int proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std::string o); | 101 | virtual int proxy(ISrsHttpResponseWriter* w, SrsHttpMessage* r, std::string o); |
| 100 | private: | 102 | private: |
| 103 | + virtual int do_proxy(ISrsHttpResponseReader* rr, SrsFlvDecoder* dec); | ||
| 101 | virtual int rtmp_write_packet(char type, u_int32_t timestamp, char* data, int size); | 104 | virtual int rtmp_write_packet(char type, u_int32_t timestamp, char* data, int size); |
| 102 | private: | 105 | private: |
| 103 | // connect to rtmp output url. | 106 | // connect to rtmp output url. |
| @@ -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 2 | 32 | #define VERSION_MAJOR 2 |
| 33 | #define VERSION_MINOR 0 | 33 | #define VERSION_MINOR 0 |
| 34 | -#define VERSION_REVISION 161 | 34 | +#define VERSION_REVISION 162 |
| 35 | 35 | ||
| 36 | // server info. | 36 | // server info. |
| 37 | #define RTMP_SIG_SRS_KEY "SRS" | 37 | #define RTMP_SIG_SRS_KEY "SRS" |
-
请 注册 或 登录 后发表评论