From 9bfbe02f7381ab01064ad9437d1312d45aca6a02 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sun, 6 Sep 2020 17:50:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=80=E5=A4=A7=E5=B8=A7?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Extension/CommonRtp.cpp | 9 ++++----- src/Extension/CommonRtp.h | 8 +++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Extension/CommonRtp.cpp b/src/Extension/CommonRtp.cpp index 04ad5dd3..14fd37f7 100644 --- a/src/Extension/CommonRtp.cpp +++ b/src/Extension/CommonRtp.cpp @@ -10,10 +10,9 @@ #include "CommonRtp.h" -#define MAX_FRAME_SIZE 2 * 1024 - -CommonRtpDecoder::CommonRtpDecoder(CodecId codec){ +CommonRtpDecoder::CommonRtpDecoder(CodecId codec, int max_frame_size ){ _codec = codec; + _max_frame_size = max_frame_size; obtainFrame(); } @@ -37,7 +36,7 @@ bool CommonRtpDecoder::inputRtp(const RtpPacket::Ptr &rtp, bool){ return false; } - if (_frame->_dts != rtp->timeStamp || _frame->_buffer.size() > MAX_FRAME_SIZE) { + if (_frame->_dts != rtp->timeStamp || _frame->_buffer.size() > _max_frame_size) { //时间戳发生变化或者缓存超过MAX_FRAME_SIZE,则清空上帧数据 if (!_frame->_buffer.empty()) { //有有效帧,则输出 @@ -48,7 +47,7 @@ bool CommonRtpDecoder::inputRtp(const RtpPacket::Ptr &rtp, bool){ obtainFrame(); _frame->_dts = rtp->timeStamp; _drop_flag = false; - } else if (_last_seq != 0 && _last_seq + (uint16_t) 1 != rtp->sequence) { + } else if (_last_seq != 0 && (uint16_t)(_last_seq + 1) != rtp->sequence) { //时间戳未发生变化,但是seq却不连续,说明中间rtp丢包了,那么整帧应该废弃 WarnL << "rtp丢包:" << _last_seq << " -> " << rtp->sequence; _drop_flag = true; diff --git a/src/Extension/CommonRtp.h b/src/Extension/CommonRtp.h index bc5e9cec..4345c641 100644 --- a/src/Extension/CommonRtp.h +++ b/src/Extension/CommonRtp.h @@ -28,8 +28,9 @@ public: /** * 构造函数 * @param codec 编码id + * @param max_frame_size 允许的最大帧大小 */ - CommonRtpDecoder(CodecId codec); + CommonRtpDecoder(CodecId codec, int max_frame_size = 2 * 1024); /** * 返回编码类型ID @@ -47,10 +48,11 @@ private: void obtainFrame(); private: + bool _drop_flag = false; + uint16_t _last_seq = 0; + int _max_frame_size; CodecId _codec; FrameImp::Ptr _frame; - uint16_t _last_seq = 0; - bool _drop_flag = false; }; /**