diff --git a/src/Rtp/Decoder.cpp b/src/Rtp/Decoder.cpp index dec48958..42abe783 100644 --- a/src/Rtp/Decoder.cpp +++ b/src/Rtp/Decoder.cpp @@ -151,7 +151,7 @@ void DecoderImp::onTrack(int index, const Track::Ptr &track) { track->setIndex(index); auto &ref = _tracks[index]; if (ref.first) { - WarnL << "Already existed a same track: " << index << ", codec: " << track->getCodecName(); + // WarnL << "Already existed a same track: " << index << ", codec: " << track->getCodecName(); return; } ref.first = track; diff --git a/src/Rtp/PSDecoder.cpp b/src/Rtp/PSDecoder.cpp index 21014b4b..d7961869 100644 --- a/src/Rtp/PSDecoder.cpp +++ b/src/Rtp/PSDecoder.cpp @@ -56,7 +56,7 @@ ssize_t PSDecoder::input(const uint8_t *data, size_t bytes) { const char *PSDecoder::onSearchPacketTail(const char *data, size_t len) { try { auto ret = ps_demuxer_input(static_cast(_ps_demuxer), reinterpret_cast(data), len); - if (ret >= 0) { + if (ret >= 0 && ret <= (ssize_t)len) { // 解析成功全部或部分 [AUTO-TRANSLATED:a8085d34] // Parse successful, all or part return data + ret; diff --git a/src/Rtp/RtpServer.cpp b/src/Rtp/RtpServer.cpp index 580f8159..70656fdf 100644 --- a/src/Rtp/RtpServer.cpp +++ b/src/Rtp/RtpServer.cpp @@ -62,7 +62,12 @@ public: RtpProcess::Ptr getProcess() const { return _process; } void onRecvRtp(const Socket::Ptr &sock, const Buffer::Ptr &buf, struct sockaddr *addr) { - _process->inputRtp(true, sock, buf->data(), buf->size(), addr); + try { + _process->inputRtp(true, sock, buf->data(), buf->size(), addr); + } catch (std::exception &ex) { + _process->onDetach(SockException(Err_shutdown, ex.what())); + return; + } // 统计rtp接受情况,用于发送rr包 [AUTO-TRANSLATED:bd2fbe7e] // Count RTP reception status, used to send RR packets auto header = (RtpHeader *)buf->data();