From 2f4fe313376b0cc5e5faca0710f5a34d108b2a52 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 25 Feb 2021 17:56:15 +0800 Subject: [PATCH] RTC: Cache the buffer for player --- trunk/src/app/srs_app_rtc_conn.cpp | 22 ++++++++++++---------- trunk/src/app/srs_app_rtc_conn.hpp | 3 +++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 683247235..14564fb86 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -1605,6 +1605,11 @@ SrsRtcConnection::SrsRtcConnection(SrsRtcServer* s, const SrsContextId& cid) server_ = s; transport_ = new SrsSecurityTransport(this); + cache_iov_ = new iovec(); + cache_iov_->iov_base = new char[kRtpPacketSize]; + cache_iov_->iov_len = kRtpPacketSize; + cache_buffer_ = new SrsBuffer((char*)cache_iov_->iov_base, kRtpPacketSize); + state_ = INIT; last_stun_time = 0; session_timeout = 0; @@ -1648,6 +1653,9 @@ SrsRtcConnection::~SrsRtcConnection() srs_freep(addr); } + srs_freep(cache_iov_); + srs_freep(cache_buffer_); + srs_freep(transport_); srs_freep(req); srs_freep(stat_); @@ -2510,22 +2518,16 @@ srs_error_t SrsRtcConnection::do_send_packets(const std::vector& SrsRtpPacket2* pkt = pkts.at(i); // For this message, select the first iovec. - iovec* iov = new iovec(); - SrsAutoFree(iovec, iov); - - char* iov_base = new char[kRtpPacketSize]; - SrsAutoFreeA(char, iov_base); - - iov->iov_base = iov_base; + iovec* iov = cache_iov_; iov->iov_len = kRtpPacketSize; + cache_buffer_->skip(-1 * cache_buffer_->pos()); // Marshal packet to bytes in iovec. if (true) { - SrsBuffer stream((char*)iov->iov_base, iov->iov_len); - if ((err = pkt->encode(&stream)) != srs_success) { + if ((err = pkt->encode(cache_buffer_)) != srs_success) { return srs_error_wrap(err, "encode packet"); } - iov->iov_len = stream.pos(); + iov->iov_len = cache_buffer_->pos(); } // Cipher RTP to SRTP packet. diff --git a/trunk/src/app/srs_app_rtc_conn.hpp b/trunk/src/app/srs_app_rtc_conn.hpp index 6b84e108a..93d43db0e 100644 --- a/trunk/src/app/srs_app_rtc_conn.hpp +++ b/trunk/src/app/srs_app_rtc_conn.hpp @@ -431,6 +431,9 @@ private: SrsRtcConnectionStateType state_; ISrsRtcTransport* transport_; SrsHourGlass* timer_; +private: + iovec* cache_iov_; + SrsBuffer* cache_buffer_; private: // key: stream id std::map players_;