当前位置: 首页 > news >正文

webrtc getStats 内部调用流程分析

webrtc GetStats 内部调用流程分析

本次PeerConnection::GetStats梳理只记录了video "outbound-rtp"类型, 其他部分可参下面调用流程再具体分析。

一 调用流程

//备注:举  "type": "outbound-rtp" 的例子pc/peer_connection.h
PeerConnection::GetStatspc/rtc_stats_collector.h
RTCStatsCollector::GetStatsReportpc/rtc_stats_collector.h
RTCStatsCollector::GetStatsReportInternal情况1 如果有报告,并且时间在可用范围
pc/rtc_stats_collector.h
RTCStatsCollector::DeliverCachedReport
调用 request.callback()->OnStatsDelivered 返回结果情况2 没有可用报告
(1): 获取 transceiver_stats_infos_ 和 其他信息
获取 transceiver_stats_infos_ 流程
pc/rtc_stats_collector.h
RTCStatsCollector::PrepareTransceiverStatsInfos_s关键代码:创建对象:video_stats[video_channel->media_channel()] =std::make_unique<cricket::VideoMediaInfo>();赋值:备注: 这里调用到了WebRtcVideoChannel::GetStatsfor (const auto& entry : video_stats) {if (!entry.first->GetStats(entry.second.get())) {RTC_LOG(LS_WARNING) << "Failed to get video stats.";}}media/engine/webrtc_video_engine.hWebRtcVideoChannel::GetStatsmedia/engine/webrtc_video_engine.hWebRtcVideoChannel::FillSenderStatsmedia/engine/webrtc_video_engine.hWebRtcVideoChannel::WebRtcVideoSendStream::GetVideoSenderInfo备注: <1>在联播情况下,此函数返回的VideoSenderInfo视频数据是统计后的即(bytesSent, packetsSent 等数据是所有联播数据的总和) <2>如果想看所有联播数据,可以看 RTC_LOG(LS_INFO) << stats.ToString(rtc::TimeMillis()); 打印(2)统计并返回结果
pc/rtc_stats_collector.h
RTCStatsCollector::ProducePartialResultsOnNetworkThreadpc/rtc_stats_collector.hRTCStatsCollector::ProducePartialResultsOnNetworkThreadImplpc/rtc_stats_collector.hRTCStatsCollector::ProduceRTPStreamStats_npc/rtc_stats_collector.hProduceVideoRTPStreamStats_npc/rtc_stats_collector.hSetOutboundRTPStreamStatsFromVideoSenderInfoSetOutboundRTPStreamStatsFromMediaSenderInfo作用: 完成对outbound_video的设置pc/rtc_stats_collector.h
RTCStatsCollector::MergeNetworkReport_spc/rtc_stats_collector.h
RTCStatsCollector::DeliverCachedReport
调用 request.callback()->OnStatsDelivered 返回结果

二 GetStats数据

// outbound-rtp类型数据
{"bytesSent": 6165216,"codecId": "RTCCodec_0_Outbound_100","encoderImplementation": "OpenH264","firCount": 0,"framesEncoded": 833,"headerBytesSent": 146776,"id": "RTCOutboundRTPVideoStream_3834178515","isRemote": false,"keyFramesEncoded": 62,"kind": "video","mediaSourceId": "RTCVideoSource_1","mediaType": "video","nackCount": 4,"packetsSent": 5880,"pliCount": 67,"qpSum": 14691,"qualityLimitationReason": "none","qualityLimitationResolutionChanges": 2,"retransmittedBytesSent": 0,"retransmittedPacketsSent": 0,"ssrc": 3834178515,"timestamp": 1761045889639000,"totalEncodeTime": 3.859,"totalEncodedBytesTarget": 11870379,"totalPacketSendDelay": 140.626,"trackId": "RTCMediaStreamTrack_sender_1","transportId": "RTCTransport_0_1","type": "outbound-rtp"
},
http://www.dtcms.com/a/519753.html

相关文章:

  • 通过 Stdio(标准输入/输出)传输机制,实现 CrewAI 与本地 MCP 服务器的连接
  • 英文版网站建设方案手机app免费制作
  • 通过API网关部署FC函数
  • 单例模式精写
  • SQL sever数据库--第三次作业
  • XLM-R模型:大规模跨语言表示的突破与实践
  • GitLab 多安全漏洞可致攻击者触发拒绝服务状态
  • JAVA基础篇:分支结构——让程序学会“做选择”
  • SpringDataRedis 快速入门总结
  • 安徽省建设厅网站资料下载建了qq群 如何快速推广
  • 重庆做木门网站公司龙城区建设局网站
  • 手机网站支持微信支付做网站需要什么资料
  • P4766 [CERC2014] Outer space invaders 题解
  • CS5005:400mA,低噪声,电荷泵DC/DC转换电路
  • Spring 容器刷新流程(refresh)源码全解
  • 类型转换汇总 之C#
  • Python列表操作、条件判断、循环、函数定义
  • ps怎么在dw上做网站广州番禺发布网
  • UltraScale/+ FPGA实现万兆网的两种方式:GT核、10G Ethernet Subsystem核
  • 元宇宙重构社交生态:从平面互动到沉浸式情感连接
  • SaaS模式重构工业软件竞争规则,助力中小企业快速实现数字化转型
  • 利用AI大模型重构陈旧代码库 (Refactoring Legacy Codebase with AI)
  • 数字孪生技术 重构 智能仓储新生态
  • 从上下文工程到组织知识管理重构——HRBP在人机协同时代的新使命
  • 1.2亿老人需助听器:本土品牌如何以AI破局,重构巨头垄断市场?
  • DeepSeek-OCR本地部署教程:DeepSeek突破性开创上下文光学压缩,10倍效率重构文本处理范式
  • “AI导师”现象:生成式人工智能对教育主体性及教学范式的重构
  • 住房和城乡建设统计网站南沙滩做网站公司
  • 网站备案要啥公司网站建设的视频教程
  • 全平台内容排期与矩阵玩法