From 13f603328f518ab998e2b8b9321dca982634839b Mon Sep 17 00:00:00 2001 From: mtdxc Date: Mon, 29 Sep 2025 09:00:46 +0800 Subject: [PATCH] =?UTF-8?q?rtc=E6=8B=89=E6=B5=81=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=98=BE=E7=A4=BAsockInfo=E5=92=8C=E7=A0=81?= =?UTF-8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Player/PlayerBase.h | 9 ++++++--- webrtc/IceTransport.cpp | 20 ++++++++++++++++++++ webrtc/IceTransport.hpp | 2 ++ webrtc/WebRtcProxyPlayer.h | 10 ++++++++++ webrtc/WebRtcTransport.h | 2 ++ 5 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/Player/PlayerBase.h b/src/Player/PlayerBase.h index bd4623b1..59658e46 100644 --- a/src/Player/PlayerBase.h +++ b/src/Player/PlayerBase.h @@ -180,8 +180,8 @@ public: virtual void setOnResume(const std::function &cb) = 0; virtual size_t getRecvSpeed() { return 0; } - virtual size_t getRecvTotalBytes() { return 0; } + virtual std::shared_ptr getSockInfo() const { return nullptr; } protected: virtual void onResume() = 0; @@ -241,8 +241,11 @@ public: return _delegate ? _delegate->getTracks(ready) : Parent::getTracks(ready); } - std::shared_ptr getSockInfo() const { - return std::dynamic_pointer_cast(_delegate); + std::shared_ptr getSockInfo() const override { + auto ret = std::dynamic_pointer_cast(_delegate); + if (!ret) + ret = _delegate ? _delegate->getSockInfo() : Parent::getSockInfo(); + return ret; } void setMediaSource(const MediaSource::Ptr &src) override { diff --git a/webrtc/IceTransport.cpp b/webrtc/IceTransport.cpp index 65eca7c0..f90b4ebd 100644 --- a/webrtc/IceTransport.cpp +++ b/webrtc/IceTransport.cpp @@ -2023,4 +2023,24 @@ Json::Value IceAgent::getChecklistInfo() const { return result; } +size_t IceAgent::getRecvSpeed() { + size_t ret = 0; + for (auto s : _socket_candidate_manager.getAllSockets()) { + if (s && s->getSock()) { + ret += s->getSock()->getRecvSpeed(); + } + } + return ret; +} + +size_t IceAgent::getRecvTotalBytes() { + size_t ret = 0; + for (auto s : _socket_candidate_manager.getAllSockets()) { + if (s && s->getSock()) { + ret += s->getSock()->getRecvTotalBytes(); + } + } + return ret; +} + } // namespace RTC diff --git a/webrtc/IceTransport.hpp b/webrtc/IceTransport.hpp index 3a891153..d1e3050d 100644 --- a/webrtc/IceTransport.hpp +++ b/webrtc/IceTransport.hpp @@ -553,6 +553,8 @@ public: // 获取checklist信息,用于API查询 Json::Value getChecklistInfo() const; + size_t getRecvSpeed(); + size_t getRecvTotalBytes(); protected: void gatheringSrflxCandidate(const Pair::Ptr& pair); diff --git a/webrtc/WebRtcProxyPlayer.h b/webrtc/WebRtcProxyPlayer.h index b65668d1..92f59424 100755 --- a/webrtc/WebRtcProxyPlayer.h +++ b/webrtc/WebRtcProxyPlayer.h @@ -36,6 +36,16 @@ public: void pause(bool pause) override; void speed(float speed) override; + std::shared_ptr getSockInfo() const override { + return getWebRtcTransport() ? getWebRtcTransport()->getSession() : nullptr; + } + size_t getRecvSpeed() override { + return getWebRtcTransport() ? getWebRtcTransport()->getRecvSpeed() : 0; + } + size_t getRecvTotalBytes() override { + return getWebRtcTransport() ? getWebRtcTransport()->getRecvTotalBytes() : 0; + } + protected: //// WebRtcClient override//// diff --git a/webrtc/WebRtcTransport.h b/webrtc/WebRtcTransport.h index f2c00898..b6495cd1 100644 --- a/webrtc/WebRtcTransport.h +++ b/webrtc/WebRtcTransport.h @@ -163,6 +163,8 @@ public: float getTimeOutSec(); void getTransportInfo(const std::function &callback) const; + size_t getRecvSpeed() const { return _ice_agent ? _ice_agent->getRecvSpeed() : 0; } + size_t getRecvTotalBytes() const { return _ice_agent ? _ice_agent->getRecvTotalBytes() : 0; } void setOnShutdown(std::function cb);