winlin

support push flv stream over HTTP POST to SRS.

... ... @@ -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.
... ...
... ... @@ -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);
}
... ...
... ... @@ -42,6 +42,8 @@ class SrsRtmpClient;
class SrsStSocket;
class SrsRequest;
class SrsPithyPrint;
class ISrsHttpResponseReader;
class SrsFlvDecoder;
#include <srs_app_st.hpp>
#include <srs_app_listener.hpp>
... ... @@ -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.
... ...
... ... @@ -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"
... ...