From 1cba3f4d589eb22a071e7a4dac107026ad0fcb28 Mon Sep 17 00:00:00 2001 From: wxf Date: Fri, 19 Nov 2021 17:03:54 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=20gcc=204.8=20=E4=B8=8B?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webrtc/WebRtcTransport.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index 159fec74..fc3e5c9e 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -385,10 +385,10 @@ void WebRtcTransportImp::onStartWebRTC() { _ssrc_to_track[track->offer_ssrc_rtx] = track; //rtp pt --> MediaTrack - _pt_to_track.emplace(track->plan_rtp->pt, new WrappedRtpTrack(track, _twcc_ctx, *this)); + _pt_to_track.emplace(track->plan_rtp->pt, std::unique_ptr(new WrappedRtpTrack(track, _twcc_ctx, *this))); if (track->plan_rtx) { //rtx pt --> MediaTrack - _pt_to_track.emplace(track->plan_rtx->pt, new WrappedRtxTrack(track)); + _pt_to_track.emplace(track->plan_rtx->pt, std::unique_ptr(new WrappedRtxTrack(track))); } if (m_offer->type != TrackApplication) { //记录rtp ext类型与id的关系,方便接收或发送rtp时修改rtp ext id From 5404a5266a12db070d2801d63eed10bc06d715f1 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sun, 21 Nov 2021 11:28:14 +0800 Subject: [PATCH 2/4] =?UTF-8?q?Performance:=20=E4=BD=BF=E7=94=A8=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E6=B1=A0=E4=BC=98=E5=8C=96http-flv=E5=88=86=E5=8F=91?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtmp/FlvMuxer.cpp | 12 ++++++++++-- src/Rtmp/FlvMuxer.h | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Rtmp/FlvMuxer.cpp b/src/Rtmp/FlvMuxer.cpp index 84f0eb1a..5728d30f 100644 --- a/src/Rtmp/FlvMuxer.cpp +++ b/src/Rtmp/FlvMuxer.cpp @@ -16,6 +16,10 @@ namespace mediakit { +FlvMuxer::FlvMuxer(){ + _packet_pool.setSize(64); +} + void FlvMuxer::start(const EventPoller::Ptr &poller, const RtmpMediaSource::Ptr &media) { if (!media) { throw std::runtime_error("RtmpMediaSource 无效"); @@ -62,15 +66,19 @@ void FlvMuxer::start(const EventPoller::Ptr &poller, const RtmpMediaSource::Ptr }); } +BufferRaw::Ptr FlvMuxer::obtainBuffer() { + return _packet_pool.obtain(); +} + BufferRaw::Ptr FlvMuxer::obtainBuffer(const void *data, size_t len) { - auto buffer = BufferRaw::create(); + auto buffer = obtainBuffer(); buffer->assign((const char *) data, len); return buffer; } void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &src) { //发送flv文件头 - auto buffer = BufferRaw::create(); + auto buffer = obtainBuffer(); buffer->setCapacity(sizeof(FLVHeader)); buffer->setSize(sizeof(FLVHeader)); diff --git a/src/Rtmp/FlvMuxer.h b/src/Rtmp/FlvMuxer.h index 2f4a389c..caf1903c 100644 --- a/src/Rtmp/FlvMuxer.h +++ b/src/Rtmp/FlvMuxer.h @@ -22,7 +22,7 @@ namespace mediakit { class FlvMuxer { public: using Ptr = std::shared_ptr; - FlvMuxer() = default; + FlvMuxer(); virtual ~FlvMuxer() = default; void stop(); @@ -39,8 +39,10 @@ private: void onWriteFlvTag(const RtmpPacket::Ptr &pkt, uint32_t time_stamp, bool flush); void onWriteFlvTag(uint8_t type, const Buffer::Ptr &buffer, uint32_t time_stamp, bool flush); BufferRaw::Ptr obtainBuffer(const void *data, size_t len); + BufferRaw::Ptr obtainBuffer(); private: + ResourcePool _packet_pool; //时间戳修整器 Stamp _stamp[2]; RtmpMediaSource::RingType::RingReader::Ptr _ring_reader; From 97f7255f0a79da9a6c48d3d4f177f6a301c8a043 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sun, 21 Nov 2021 11:34:20 +0800 Subject: [PATCH 3/4] =?UTF-8?q?Performance:=20=E4=BD=BF=E7=94=A8=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E6=B1=A0=E4=BC=98=E5=8C=96rtmp=E5=88=86=E5=8F=91?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtmp/RtmpProtocol.cpp | 3 ++- src/Rtmp/RtmpProtocol.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Rtmp/RtmpProtocol.cpp b/src/Rtmp/RtmpProtocol.cpp index d0c5f027..4f9a8af7 100644 --- a/src/Rtmp/RtmpProtocol.cpp +++ b/src/Rtmp/RtmpProtocol.cpp @@ -55,6 +55,7 @@ static string openssl_HMACsha256(const void *key, size_t key_len, const void *da namespace mediakit { RtmpProtocol::RtmpProtocol() { + _packet_pool.setSize(64); _next_step_func = [this](const char *data, size_t len) { return handle_C0C1(data, len); }; @@ -776,7 +777,7 @@ void RtmpProtocol::handle_chunk(RtmpPacket::Ptr packet) { } BufferRaw::Ptr RtmpProtocol::obtainBuffer(const void *data, size_t len) { - auto buffer = BufferRaw::create(); + auto buffer = _packet_pool.obtain(); if (data && len) { buffer->assign((const char *) data, len); } diff --git a/src/Rtmp/RtmpProtocol.h b/src/Rtmp/RtmpProtocol.h index 5a004874..fa51b191 100644 --- a/src/Rtmp/RtmpProtocol.h +++ b/src/Rtmp/RtmpProtocol.h @@ -107,6 +107,8 @@ private: function _next_step_func; ////////////Chunk//////////// unordered_map > _map_chunk_data; + //循环池 + ResourcePool _packet_pool; }; } /* namespace mediakit */ From dd30ab22cfb82c0b2b9a7d36e83d444ad7fe02fe Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sun, 21 Nov 2021 11:36:07 +0800 Subject: [PATCH 4/4] =?UTF-8?q?Performance:=20=E4=BD=BF=E7=94=A8=E5=BE=AA?= =?UTF-8?q?=E7=8E=AF=E6=B1=A0=E4=BC=98=E5=8C=96webrtc=E5=88=86=E5=8F=91?= =?UTF-8?q?=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webrtc/WebRtcTransport.cpp | 3 ++- webrtc/WebRtcTransport.h | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/webrtc/WebRtcTransport.cpp b/webrtc/WebRtcTransport.cpp index fc3e5c9e..2f396374 100644 --- a/webrtc/WebRtcTransport.cpp +++ b/webrtc/WebRtcTransport.cpp @@ -313,6 +313,7 @@ void WebRtcTransportImp::onCreate(){ WebRtcTransportImp::WebRtcTransportImp(const EventPoller::Ptr &poller) : WebRtcTransport(poller) { InfoL << getIdentifier(); + _packet_pool.setSize(64); } WebRtcTransportImp::~WebRtcTransportImp() { @@ -329,7 +330,7 @@ void WebRtcTransportImp::onSendSockData(const char *buf, size_t len, struct sock WarnL << "send data failed:" << len; return; } - auto ptr = BufferRaw::create(); + auto ptr = _packet_pool.obtain(); ptr->assign(buf, len); //一次性发送一帧的rtp数据,提高网络io性能 _session->setSendFlushFlag(flush); diff --git a/webrtc/WebRtcTransport.h b/webrtc/WebRtcTransport.h index 45fd2e72..2879944a 100644 --- a/webrtc/WebRtcTransport.h +++ b/webrtc/WebRtcTransport.h @@ -214,8 +214,6 @@ struct WrappedRtpTrack : public WrappedMediaTrack { void inputRtp(const char *buf, size_t len, uint64_t stamp_ms, RtpHeader *rtp) override; }; - - class WebRtcTransportImp : public WebRtcTransport { public: using Ptr = std::shared_ptr; @@ -281,6 +279,8 @@ private: unordered_map _ssrc_to_track; //根据接收rtp的pt获取相关信息 unordered_map> _pt_to_track; + //循环池 + ResourcePool _packet_pool; }; class WebRtcTransportManager {