From dfaa8b540c4db6a0a5e633d0713fa0a155ab1bba Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Sat, 10 Oct 2020 18:23:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E4=B8=B4=E6=97=B6=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=92=8Cstd::move=E5=87=8F=E5=B0=91=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E6=8C=87=E9=92=88=E7=9A=84=E6=8B=B7=E8=B4=9D=E6=9E=84=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdpart/ZLToolKit | 2 +- src/Common/MediaSource.h | 8 ++++---- src/FMP4/FMP4MediaSource.h | 8 ++++---- src/FMP4/FMP4MediaSourceMuxer.h | 2 +- src/Rtmp/RtmpMediaSource.h | 9 +++++---- src/Rtmp/RtmpMediaSourceImp.h | 4 ++-- src/Rtp/PSRtpSender.cpp | 2 +- src/Rtp/PSRtpSender.h | 4 ++-- src/Rtsp/RtspMediaSource.h | 8 ++++---- src/Rtsp/RtspMediaSourceImp.h | 4 ++-- src/TS/TSMediaSource.h | 8 ++++---- src/TS/TSMediaSourceMuxer.h | 2 +- 12 files changed, 31 insertions(+), 30 deletions(-) diff --git a/3rdpart/ZLToolKit b/3rdpart/ZLToolKit index 735f194e..ac02dc10 160000 --- a/3rdpart/ZLToolKit +++ b/3rdpart/ZLToolKit @@ -1 +1 @@ -Subproject commit 735f194e18d5fb576c0da03024226a6f38537e5a +Subproject commit ac02dc10fb0cc065d72a0e950e5c1aafff1da0d6 diff --git a/src/Common/MediaSource.h b/src/Common/MediaSource.h index 1efd4b2b..44f8d3be 100644 --- a/src/Common/MediaSource.h +++ b/src/Common/MediaSource.h @@ -328,13 +328,13 @@ public: virtual ~PacketCache() = default; - void inputPacket(bool is_video, const std::shared_ptr &pkt, bool key_pos) { + void inputPacket(bool is_video, std::shared_ptr pkt, bool key_pos) { if (_policy.isFlushAble(is_video, key_pos, _policy.getStamp(pkt), _cache->size())) { flushAll(); } //追加数据到最后 - _cache->emplace_back(pkt); + _cache->emplace_back(std::move(pkt)); if (key_pos) { _key_pos = key_pos; } @@ -344,14 +344,14 @@ public: _cache->clear(); } - virtual void onFlush(std::shared_ptr &, bool key_pos) = 0; + virtual void onFlush(std::shared_ptr, bool key_pos) = 0; private: void flushAll() { if (_cache->empty()) { return; } - onFlush(_cache, _key_pos); + onFlush(std::move(_cache), _key_pos); _cache = std::make_shared(); _key_pos = false; } diff --git a/src/FMP4/FMP4MediaSource.h b/src/FMP4/FMP4MediaSource.h index 173f12e4..23b58fee 100644 --- a/src/FMP4/FMP4MediaSource.h +++ b/src/FMP4/FMP4MediaSource.h @@ -92,7 +92,7 @@ public: * @param packet FMP4包 * @param key 是否为关键帧第一个包 */ - void onWrite(const FMP4Packet::Ptr &packet, bool key) override { + void onWrite(FMP4Packet::Ptr packet, bool key) override { if (!_ring) { createRing(); } @@ -100,7 +100,7 @@ public: _have_video = true; } _speed += packet->size(); - PacketCache::inputPacket(true, packet, key); + PacketCache::inputPacket(true, std::move(packet), key); } /** @@ -132,9 +132,9 @@ private: * @param packet_list 合并写缓存列队 * @param key_pos 是否包含关键帧 */ - void onFlush(std::shared_ptr > &packet_list, bool key_pos) override { + void onFlush(std::shared_ptr > packet_list, bool key_pos) override { //如果不存在视频,那么就没有存在GOP缓存的意义,所以确保一直清空GOP缓存 - _ring->write(packet_list, _have_video ? key_pos : true); + _ring->write(std::move(packet_list), _have_video ? key_pos : true); } private: diff --git a/src/FMP4/FMP4MediaSourceMuxer.h b/src/FMP4/FMP4MediaSourceMuxer.h index 3ac0ccd0..50b0f83e 100644 --- a/src/FMP4/FMP4MediaSourceMuxer.h +++ b/src/FMP4/FMP4MediaSourceMuxer.h @@ -74,7 +74,7 @@ protected: } FMP4Packet::Ptr packet = std::make_shared(std::move(string)); packet->time_stamp = stamp; - _media_src->onWrite(packet, key_frame); + _media_src->onWrite(std::move(packet), key_frame); } private: diff --git a/src/Rtmp/RtmpMediaSource.h b/src/Rtmp/RtmpMediaSource.h index 977f77de..bc958ac5 100644 --- a/src/Rtmp/RtmpMediaSource.h +++ b/src/Rtmp/RtmpMediaSource.h @@ -118,7 +118,7 @@ public: * 输入rtmp包 * @param pkt rtmp包 */ - void onWrite(const RtmpPacket::Ptr &pkt, bool = true) override { + void onWrite(RtmpPacket::Ptr pkt, bool = true) override { _speed += pkt->size(); //保存当前时间戳 switch (pkt->type_id) { @@ -152,7 +152,8 @@ public: regist(); } } - PacketCache::inputPacket(pkt->type_id == MSG_VIDEO, pkt, pkt->isVideoKeyFrame()); + bool key = pkt->isVideoKeyFrame(); + PacketCache::inputPacket(pkt->type_id == MSG_VIDEO, std::move(pkt), key); } /** @@ -186,9 +187,9 @@ private: * @param rtmp_list rtmp包列表 * @param key_pos 是否包含关键帧 */ - void onFlush(std::shared_ptr > &rtmp_list, bool key_pos) override { + void onFlush(std::shared_ptr > rtmp_list, bool key_pos) override { //如果不存在视频,那么就没有存在GOP缓存的意义,所以is_key一直为true确保一直清空GOP缓存 - _ring->write(rtmp_list, _have_video ? key_pos : true); + _ring->write(std::move(rtmp_list), _have_video ? key_pos : true); } private: diff --git a/src/Rtmp/RtmpMediaSourceImp.h b/src/Rtmp/RtmpMediaSourceImp.h index 3b3de9d7..24dc2c4f 100644 --- a/src/Rtmp/RtmpMediaSourceImp.h +++ b/src/Rtmp/RtmpMediaSourceImp.h @@ -60,12 +60,12 @@ public: /** * 输入rtmp并解析 */ - void onWrite(const RtmpPacket::Ptr &pkt, bool = true) override { + void onWrite(RtmpPacket::Ptr pkt, bool = true) override { if (!_all_track_ready || _muxer->isEnabled()) { //未获取到所有Track后,或者开启转协议,那么需要解复用rtmp _demuxer->inputRtmp(pkt); } - RtmpMediaSource::onWrite(pkt); + RtmpMediaSource::onWrite(std::move(pkt)); } /** diff --git a/src/Rtp/PSRtpSender.cpp b/src/Rtp/PSRtpSender.cpp index 5f80efdf..7f0a335a 100644 --- a/src/Rtp/PSRtpSender.cpp +++ b/src/Rtp/PSRtpSender.cpp @@ -113,7 +113,7 @@ void PSRtpSender::onRtp(const RtpPacket::Ptr &rtp, bool) { } //此函数在其他线程执行 -void PSRtpSender::onFlush(shared_ptr> &rtp_list, bool) { +void PSRtpSender::onFlush(shared_ptr > rtp_list, bool) { if(!_is_connect){ //连接成功后才能发送数据 return; diff --git a/src/Rtp/PSRtpSender.h b/src/Rtp/PSRtpSender.h index 9cb9a653..da817905 100644 --- a/src/Rtp/PSRtpSender.h +++ b/src/Rtp/PSRtpSender.h @@ -24,7 +24,7 @@ public: RingDelegateHelper(onRtp on_rtp){ _on_rtp = std::move(on_rtp); } - void onWrite(const RtpPacket::Ptr &in, bool is_key) override{ + void onWrite(RtpPacket::Ptr in, bool is_key) override{ _on_rtp(in, is_key); } @@ -68,7 +68,7 @@ protected: * @param rtp_list rtp包列表 * @param key_pos 是否包含关键帧 */ - void onFlush(std::shared_ptr > &rtp_list, bool key_pos) override; + void onFlush(std::shared_ptr > rtp_list, bool key_pos) override; private: //rtp打包后回调 diff --git a/src/Rtsp/RtspMediaSource.h b/src/Rtsp/RtspMediaSource.h index 341aca5c..5a8f39e8 100644 --- a/src/Rtsp/RtspMediaSource.h +++ b/src/Rtsp/RtspMediaSource.h @@ -156,7 +156,7 @@ public: * @param rtp rtp包 * @param keyPos 该包是否为关键帧的第一个包 */ - void onWrite(const RtpPacket::Ptr &rtp, bool keyPos) override { + void onWrite(RtpPacket::Ptr rtp, bool keyPos) override { _speed += rtp->size(); assert(rtp->type >= 0 && rtp->type < TrackMax); auto track = _tracks[rtp->type]; @@ -182,7 +182,7 @@ public: regist(); } } - PacketCache::inputPacket(rtp->type == TrackVideo, rtp, keyPos); + PacketCache::inputPacket(rtp->type == TrackVideo, std::move(rtp), keyPos); } void clearCache() override{ @@ -196,9 +196,9 @@ private: * @param rtp_list rtp包列表 * @param key_pos 是否包含关键帧 */ - void onFlush(std::shared_ptr > &rtp_list, bool key_pos) override { + void onFlush(std::shared_ptr > rtp_list, bool key_pos) override { //如果不存在视频,那么就没有存在GOP缓存的意义,所以is_key一直为true确保一直清空GOP缓存 - _ring->write(rtp_list, _have_video ? key_pos : true); + _ring->write(std::move(rtp_list), _have_video ? key_pos : true); } private: diff --git a/src/Rtsp/RtspMediaSourceImp.h b/src/Rtsp/RtspMediaSourceImp.h index 13c4fea4..a2d2cbc2 100644 --- a/src/Rtsp/RtspMediaSourceImp.h +++ b/src/Rtsp/RtspMediaSourceImp.h @@ -47,7 +47,7 @@ public: /** * 输入rtp并解析 */ - void onWrite(const RtpPacket::Ptr &rtp, bool key_pos) override { + void onWrite(RtpPacket::Ptr rtp, bool key_pos) override { if (_all_track_ready && !_muxer->isEnabled()) { //获取到所有Track后,并且未开启转协议,那么不需要解复用rtp //在关闭rtp解复用后,无法知道是否为关键帧,这样会导致无法秒开,或者开播花屏 @@ -56,7 +56,7 @@ public: //需要解复用rtp key_pos = _demuxer->inputRtp(rtp); } - RtspMediaSource::onWrite(rtp, key_pos); + RtspMediaSource::onWrite(std::move(rtp), key_pos); } /** diff --git a/src/TS/TSMediaSource.h b/src/TS/TSMediaSource.h index 2a5a7080..8b8c57f7 100644 --- a/src/TS/TSMediaSource.h +++ b/src/TS/TSMediaSource.h @@ -75,7 +75,7 @@ public: * @param packet TS包 * @param key 是否为关键帧第一个包 */ - void onWrite(const TSPacket::Ptr &packet, bool key) override { + void onWrite(TSPacket::Ptr packet, bool key) override { _speed += packet->size(); if (!_ring) { createRing(); @@ -83,7 +83,7 @@ public: if (key) { _have_video = true; } - PacketCache::inputPacket(true, packet, key); + PacketCache::inputPacket(true, std::move(packet), key); } /** @@ -114,9 +114,9 @@ private: * @param packet_list 合并写缓存列队 * @param key_pos 是否包含关键帧 */ - void onFlush(std::shared_ptr > &packet_list, bool key_pos) override { + void onFlush(std::shared_ptr > packet_list, bool key_pos) override { //如果不存在视频,那么就没有存在GOP缓存的意义,所以确保一直清空GOP缓存 - _ring->write(packet_list, _have_video ? key_pos : true); + _ring->write(std::move(packet_list), _have_video ? key_pos : true); } private: diff --git a/src/TS/TSMediaSourceMuxer.h b/src/TS/TSMediaSourceMuxer.h index 553e18f4..faea1f08 100644 --- a/src/TS/TSMediaSourceMuxer.h +++ b/src/TS/TSMediaSourceMuxer.h @@ -70,7 +70,7 @@ protected: TSPacket::Ptr packet = _pool.obtain(); packet->assign((char *) data, len); packet->time_stamp = timestamp; - _media_src->onWrite(packet, is_idr_fast_packet); + _media_src->onWrite(std::move(packet), is_idr_fast_packet); } private: