webrtc getStats 内部调用流程分析
·
webrtc GetStats 内部调用流程分析
本次PeerConnection::GetStats梳理只记录了video "outbound-rtp"类型, 其他部分可参下面调用流程再具体分析。
一 调用流程
//备注:举 "type": "outbound-rtp" 的例子
pc/peer_connection.h
PeerConnection::GetStats
pc/rtc_stats_collector.h
RTCStatsCollector::GetStatsReport
pc/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::GetStats
for (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.h
WebRtcVideoChannel::GetStats
media/engine/webrtc_video_engine.h
WebRtcVideoChannel::FillSenderStats
media/engine/webrtc_video_engine.h
WebRtcVideoChannel::WebRtcVideoSendStream::GetVideoSenderInfo
备注:
<1>在联播情况下,此函数返回的VideoSenderInfo视频数据是统计后的即(bytesSent, packetsSent 等数据是所有联播数据的总和)
<2>如果想看所有联播数据,可以看 RTC_LOG(LS_INFO) << stats.ToString(rtc::TimeMillis()); 打印
(2)统计并返回结果
pc/rtc_stats_collector.h
RTCStatsCollector::ProducePartialResultsOnNetworkThread
pc/rtc_stats_collector.h
RTCStatsCollector::ProducePartialResultsOnNetworkThreadImpl
pc/rtc_stats_collector.h
RTCStatsCollector::ProduceRTPStreamStats_n
pc/rtc_stats_collector.h
ProduceVideoRTPStreamStats_n
pc/rtc_stats_collector.h
SetOutboundRTPStreamStatsFromVideoSenderInfo
SetOutboundRTPStreamStatsFromMediaSenderInfo
作用: 完成对outbound_video的设置
pc/rtc_stats_collector.h
RTCStatsCollector::MergeNetworkReport_s
pc/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"
},
更多推荐
所有评论(0)