diff --git a/trunk/src/app/srs_app_mpegts_udp.cpp b/trunk/src/app/srs_app_mpegts_udp.cpp index 1006c4d0b..564d50ebe 100644 --- a/trunk/src/app/srs_app_mpegts_udp.cpp +++ b/trunk/src/app/srs_app_mpegts_udp.cpp @@ -39,6 +39,14 @@ using namespace std; #ifdef SRS_AUTO_STREAM_CASTER +ISrsUdpHandler::ISrsUdpHandler() +{ +} + +ISrsUdpHandler::~ISrsUdpHandler() +{ +} + SrsMpegtsOverUdp::SrsMpegtsOverUdp(SrsConfDirective* c) { stream = new SrsStream(); @@ -95,7 +103,7 @@ int SrsMpegtsOverUdp::on_udp_packet(sockaddr_in* from, char* buf, int nb_buf) } // process each ts packet - if ((ret = on_ts_packet(stream)) != ERROR_SUCCESS) { + if ((ret = context->decode(stream, this)) != ERROR_SUCCESS) { srs_warn("mpegts: ignore parse ts packet failed. ret=%d", ret); continue; } @@ -111,18 +119,6 @@ int SrsMpegtsOverUdp::on_udp_packet(sockaddr_in* from, char* buf, int nb_buf) return ret; } -int SrsMpegtsOverUdp::on_ts_packet(SrsStream* stream) -{ - int ret = ERROR_SUCCESS; - - if ((ret = context->decode(stream, this)) != ERROR_SUCCESS) { - srs_error("mpegts: decode ts packet failed. ret=%d", ret); - return ret; - } - - return ret; -} - int SrsMpegtsOverUdp::on_ts_message(SrsTsMessage* msg) { int ret = ERROR_SUCCESS; diff --git a/trunk/src/app/srs_app_mpegts_udp.hpp b/trunk/src/app/srs_app_mpegts_udp.hpp index 304ea836a..efca95c75 100644 --- a/trunk/src/app/srs_app_mpegts_udp.hpp +++ b/trunk/src/app/srs_app_mpegts_udp.hpp @@ -42,10 +42,32 @@ class SrsSimpleBuffer; #include +/** +* the udp packet handler. +*/ +class ISrsUdpHandler +{ +public: + ISrsUdpHandler(); + virtual ~ISrsUdpHandler(); +public: + /** + * when udp listener got a udp packet, notice server to process it. + * @param type, the client type, used to create concrete connection, + * for instance RTMP connection to serve client. + * @param from, the udp packet from address. + * @param buf, the udp packet bytes, user should copy if need to use. + * @param nb_buf, the size of udp packet bytes. + * @remark user should never use the buf, for it's a shared memory bytes. + */ + virtual int on_udp_packet(sockaddr_in* from, char* buf, int nb_buf) = 0; +}; + /** * the mpegts over udp stream caster. */ -class SrsMpegtsOverUdp : public ISrsTsHandler +class SrsMpegtsOverUdp : virtual public ISrsTsHandler + , virtual public ISrsUdpHandler { private: SrsStream* stream; @@ -55,22 +77,9 @@ private: public: SrsMpegtsOverUdp(SrsConfDirective* c); virtual ~SrsMpegtsOverUdp(); +// interface ISrsUdpHandler public: - /** - * when udp listener got a udp packet, notice server to process it. - * @param type, the client type, used to create concrete connection, - * for instance RTMP connection to serve client. - * @param from, the udp packet from address. - * @param buf, the udp packet bytes, user should copy if need to use. - * @param nb_buf, the size of udp packet bytes. - * @remark user should never use the buf, for it's a shared memory bytes. - */ virtual int on_udp_packet(sockaddr_in* from, char* buf, int nb_buf); -private: - /** - * the stream contains the ts packet to parse. - */ - virtual int on_ts_packet(SrsStream* stream); // interface ISrsTsHandler public: virtual int on_ts_message(SrsTsMessage* msg); diff --git a/trunk/src/app/srs_app_server.hpp b/trunk/src/app/srs_app_server.hpp index 2c4b77ae0..775722aaa 100644 --- a/trunk/src/app/srs_app_server.hpp +++ b/trunk/src/app/srs_app_server.hpp @@ -45,9 +45,7 @@ class SrsIngester; class SrsHttpHeartbeat; class SrsKbps; class SrsConfDirective; -#ifdef SRS_AUTO_STREAM_CASTER -class SrsMpegtsOverUdp; -#endif +class ISrsUdpHandler; // listener type for server to identify the connection, // that is, use different type to process the connection. @@ -96,7 +94,7 @@ class SrsUdpListener : public SrsListener private: char* buf; int nb_buf; - SrsMpegtsOverUdp* caster; + ISrsUdpHandler* caster; public: SrsUdpListener(SrsServer* server, SrsListenerType type, SrsConfDirective* c); virtual ~SrsUdpListener();