diff --git a/src/Rtp/RtpSplitter.cpp b/src/Rtp/RtpSplitter.cpp index 01414f20..7c90b3dc 100644 --- a/src/Rtp/RtpSplitter.cpp +++ b/src/Rtp/RtpSplitter.cpp @@ -12,20 +12,27 @@ #include "RtpSplitter.h" namespace mediakit{ -RtpSplitter::RtpSplitter() { -} +RtpSplitter::RtpSplitter() {} -RtpSplitter::~RtpSplitter() { -} +RtpSplitter::~RtpSplitter() {} const char *RtpSplitter::onSearchPacketTail(const char *data, int len) { + if (data[0] == '$') { + //可能是4个字节的rtp头 + return onSearchPacketTail_l(data + 2, len - 2); + } + //两个字节的rtp头 + return onSearchPacketTail_l(data, len); +} + +const char *RtpSplitter::onSearchPacketTail_l(const char *data, int len) { //这是rtp包 - if(len < 2){ + if (len < 2) { //数据不够 return nullptr; } - uint16_t length = (((uint8_t *)data)[0] << 8) | ((uint8_t *)data)[1]; - if(len < length + 2){ + uint16_t length = (((uint8_t *) data)[0] << 8) | ((uint8_t *) data)[1]; + if (len < length + 2) { //数据不够 return nullptr; } diff --git a/src/Rtp/RtpSplitter.h b/src/Rtp/RtpSplitter.h index 45776b01..7e8d61de 100644 --- a/src/Rtp/RtpSplitter.h +++ b/src/Rtp/RtpSplitter.h @@ -20,15 +20,16 @@ class RtpSplitter : public HttpRequestSplitter{ public: RtpSplitter(); virtual ~RtpSplitter(); + protected: /** * 收到rtp包回调 - * @param data - * @param len */ virtual void onRtpPacket(const char *data,uint64_t len) = 0; + protected: const char *onSearchPacketTail(const char *data,int len) override ; + const char *onSearchPacketTail_l(const char *data,int len); int64_t onRecvHeader(const char *data,uint64_t len) override; };