From bde86a2b234b1ec3157ad6fd910ffca3cdd98941 Mon Sep 17 00:00:00 2001 From: winlin Date: Fri, 26 Feb 2021 13:11:56 +0800 Subject: [PATCH] RTC: Refine RTP packet buffer allocate, align to about 1500 bytes --- trunk/src/kernel/srs_kernel_rtc_rtp.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp index ec028bbfa..0fa2dc689 100644 --- a/trunk/src/kernel/srs_kernel_rtc_rtp.cpp +++ b/trunk/src/kernel/srs_kernel_rtc_rtp.cpp @@ -784,11 +784,19 @@ SrsRtpPacket2::~SrsRtpPacket2() char* SrsRtpPacket2::wrap(int size) { + // If the buffer is large enough, reuse it. + if (shared_msg && shared_msg->size >= size) { + return shared_msg->payload; + } + + // Create buffer if empty or not large enough. srs_freep(shared_msg); shared_msg = new SrsSharedPtrMessage(); - char* buf = new char[size]; - shared_msg->wrap(buf, size); + // For RTC, we use larger under-layer buffer for each packet. + int nb_buffer = srs_max(size, kRtpPacketSize); + char* buf = new char[nb_buffer]; + shared_msg->wrap(buf, nb_buffer); srs_freep(cache_buffer_); cache_buffer_ = new SrsBuffer(buf, size);