Skip to content

Commit

Permalink
for ossrs#250, use udp packet handler.
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Jan 29, 2015
1 parent 35ab0ea commit a384cc4
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 32 deletions.
22 changes: 9 additions & 13 deletions trunk/src/app/srs_app_mpegts_udp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,14 @@ using namespace std;

#ifdef SRS_AUTO_STREAM_CASTER

ISrsUdpHandler::ISrsUdpHandler()
{
}

ISrsUdpHandler::~ISrsUdpHandler()
{
}

SrsMpegtsOverUdp::SrsMpegtsOverUdp(SrsConfDirective* c)
{
stream = new SrsStream();
Expand Down Expand Up @@ -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;
}
Expand All @@ -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;
Expand Down
39 changes: 24 additions & 15 deletions trunk/src/app/srs_app_mpegts_udp.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,34 +43,43 @@ class SrsSimpleBuffer;
#include <srs_kernel_ts.hpp>

/**
* the mpegts over udp stream caster.
* the udp packet handler.
*/
class SrsMpegtsOverUdp : public ISrsTsHandler
class ISrsUdpHandler
{
private:
SrsStream* stream;
SrsTsContext* context;
SrsSimpleBuffer* buffer;
std::string output;
public:
SrsMpegtsOverUdp(SrsConfDirective* c);
virtual ~SrsMpegtsOverUdp();
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,
* @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);
virtual int on_udp_packet(sockaddr_in* from, char* buf, int nb_buf) = 0;
};

/**
* the mpegts over udp stream caster.
*/
class SrsMpegtsOverUdp : virtual public ISrsTsHandler
, virtual public ISrsUdpHandler
{
private:
/**
* the stream contains the ts packet to parse.
*/
virtual int on_ts_packet(SrsStream* stream);
SrsStream* stream;
SrsTsContext* context;
SrsSimpleBuffer* buffer;
std::string output;
public:
SrsMpegtsOverUdp(SrsConfDirective* c);
virtual ~SrsMpegtsOverUdp();
// interface ISrsUdpHandler
public:
virtual int on_udp_packet(sockaddr_in* from, char* buf, int nb_buf);
// interface ISrsTsHandler
public:
virtual int on_ts_message(SrsTsMessage* msg);
Expand Down
6 changes: 2 additions & 4 deletions trunk/src/app/srs_app_server.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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();
Expand Down

0 comments on commit a384cc4

Please sign in to comment.