Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 29 namespace webrtc { | 29 namespace webrtc { |
| 30 | 30 |
| 31 namespace { | 31 namespace { |
| 32 | 32 |
| 33 std::string RTCCertificateIDFromFingerprint(const std::string& fingerprint) { | 33 std::string RTCCertificateIDFromFingerprint(const std::string& fingerprint) { |
| 34 return "RTCCertificate_" + fingerprint; | 34 return "RTCCertificate_" + fingerprint; |
| 35 } | 35 } |
| 36 | 36 |
| 37 std::string RTCCodecStatsIDFromDirectionMediaAndPayload( | 37 std::string RTCCodecStatsIDFromDirectionMediaAndPayload( |
| 38 bool inbound, bool audio, uint32_t payload_type) { | 38 bool inbound, bool audio, uint32_t payload_type) { |
| 39 // TODO(hbos): When we are able to handle multiple m= lines of the same media | 39 // TODO(hbos): The present codec ID assignment is not sufficient to support |
| 40 // type (and multiple BaseChannels for the same type is possible?) this needs | 40 // Unified Plan or unbundled connections in all cases. When we are able to |
| 41 // to be updated to differentiate the transport being used, and stats need to | 41 // handle multiple m= lines of the same media type (and multiple BaseChannels |
| 42 // be collected for all of them. crbug.com/659117 | 42 // for the same type is possible?) this needs to be updated to differentiate |
| 43 // the transport being used, and stats need to be collected for all of them. | |
| 43 if (inbound) { | 44 if (inbound) { |
| 44 return audio ? "RTCCodec_InboundAudio_" + rtc::ToString<>(payload_type) | 45 return audio ? "RTCCodec_InboundAudio_" + rtc::ToString<>(payload_type) |
| 45 : "RTCCodec_InboundVideo_" + rtc::ToString<>(payload_type); | 46 : "RTCCodec_InboundVideo_" + rtc::ToString<>(payload_type); |
| 46 } | 47 } |
| 47 return audio ? "RTCCodec_OutboundAudio_" + rtc::ToString<>(payload_type) | 48 return audio ? "RTCCodec_OutboundAudio_" + rtc::ToString<>(payload_type) |
| 48 : "RTCCodec_OutboundVideo_" + rtc::ToString<>(payload_type); | 49 : "RTCCodec_OutboundVideo_" + rtc::ToString<>(payload_type); |
| 49 } | 50 } |
| 50 | 51 |
| 51 std::string RTCIceCandidatePairStatsIDFromConnectionInfo( | 52 std::string RTCIceCandidatePairStatsIDFromConnectionInfo( |
| 52 const cricket::ConnectionInfo& info) { | 53 const cricket::ConnectionInfo& info) { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 188 } | 189 } |
| 189 | 190 |
| 190 // Provides the media independent counters (both audio and video). | 191 // Provides the media independent counters (both audio and video). |
| 191 void SetInboundRTPStreamStatsFromMediaReceiverInfo( | 192 void SetInboundRTPStreamStatsFromMediaReceiverInfo( |
| 192 const cricket::MediaReceiverInfo& media_receiver_info, | 193 const cricket::MediaReceiverInfo& media_receiver_info, |
| 193 RTCInboundRTPStreamStats* inbound_stats) { | 194 RTCInboundRTPStreamStats* inbound_stats) { |
| 194 RTC_DCHECK(inbound_stats); | 195 RTC_DCHECK(inbound_stats); |
| 195 inbound_stats->ssrc = rtc::ToString<>(media_receiver_info.ssrc()); | 196 inbound_stats->ssrc = rtc::ToString<>(media_receiver_info.ssrc()); |
| 196 // TODO(hbos): Support the remote case. crbug.com/657855 | 197 // TODO(hbos): Support the remote case. crbug.com/657855 |
| 197 inbound_stats->is_remote = false; | 198 inbound_stats->is_remote = false; |
| 198 // TODO(hbos): Set |codec_id| when we have |RTCCodecStats|. Maybe relevant: | |
| 199 // |media_receiver_info.codec_name|. crbug.com/657854, 657855, 659117 | |
|
hbos
2017/02/03 15:18:32
This is an old TODO that has already been resolved
| |
| 200 inbound_stats->packets_received = | 199 inbound_stats->packets_received = |
| 201 static_cast<uint32_t>(media_receiver_info.packets_rcvd); | 200 static_cast<uint32_t>(media_receiver_info.packets_rcvd); |
| 202 inbound_stats->bytes_received = | 201 inbound_stats->bytes_received = |
| 203 static_cast<uint64_t>(media_receiver_info.bytes_rcvd); | 202 static_cast<uint64_t>(media_receiver_info.bytes_rcvd); |
| 204 inbound_stats->packets_lost = | 203 inbound_stats->packets_lost = |
| 205 static_cast<uint32_t>(media_receiver_info.packets_lost); | 204 static_cast<uint32_t>(media_receiver_info.packets_lost); |
| 206 inbound_stats->fraction_lost = | 205 inbound_stats->fraction_lost = |
| 207 static_cast<double>(media_receiver_info.fraction_lost); | 206 static_cast<double>(media_receiver_info.fraction_lost); |
| 208 } | 207 } |
| 209 | 208 |
| 210 void SetInboundRTPStreamStatsFromVoiceReceiverInfo( | 209 void SetInboundRTPStreamStatsFromVoiceReceiverInfo( |
| 211 const cricket::VoiceReceiverInfo& voice_receiver_info, | 210 const cricket::VoiceReceiverInfo& voice_receiver_info, |
| 212 RTCInboundRTPStreamStats* inbound_audio) { | 211 RTCInboundRTPStreamStats* inbound_audio) { |
| 213 SetInboundRTPStreamStatsFromMediaReceiverInfo( | 212 SetInboundRTPStreamStatsFromMediaReceiverInfo( |
| 214 voice_receiver_info, inbound_audio); | 213 voice_receiver_info, inbound_audio); |
| 215 inbound_audio->media_type = "audio"; | 214 inbound_audio->media_type = "audio"; |
| 215 if (voice_receiver_info.codec_payload_type) { | |
| 216 inbound_audio->codec_id = | |
| 217 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 218 true, true, *voice_receiver_info.codec_payload_type); | |
| 219 } | |
|
hbos
2017/02/03 15:18:32
The refactoring was to move this to here. Previous
| |
| 216 inbound_audio->jitter = | 220 inbound_audio->jitter = |
| 217 static_cast<double>(voice_receiver_info.jitter_ms) / | 221 static_cast<double>(voice_receiver_info.jitter_ms) / |
| 218 rtc::kNumMillisecsPerSec; | 222 rtc::kNumMillisecsPerSec; |
| 219 // |fir_count|, |pli_count| and |sli_count| are only valid for video and are | 223 // |fir_count|, |pli_count| and |sli_count| are only valid for video and are |
| 220 // purposefully left undefined for audio. | 224 // purposefully left undefined for audio. |
| 221 } | 225 } |
| 222 | 226 |
| 223 void SetInboundRTPStreamStatsFromVideoReceiverInfo( | 227 void SetInboundRTPStreamStatsFromVideoReceiverInfo( |
| 224 const cricket::VideoReceiverInfo& video_receiver_info, | 228 const cricket::VideoReceiverInfo& video_receiver_info, |
| 225 RTCInboundRTPStreamStats* inbound_video) { | 229 RTCInboundRTPStreamStats* inbound_video) { |
| 226 SetInboundRTPStreamStatsFromMediaReceiverInfo( | 230 SetInboundRTPStreamStatsFromMediaReceiverInfo( |
| 227 video_receiver_info, inbound_video); | 231 video_receiver_info, inbound_video); |
| 228 inbound_video->media_type = "video"; | 232 inbound_video->media_type = "video"; |
| 233 if (video_receiver_info.codec_payload_type) { | |
| 234 inbound_video->codec_id = | |
| 235 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 236 true, false, *video_receiver_info.codec_payload_type); | |
| 237 } | |
| 229 inbound_video->fir_count = | 238 inbound_video->fir_count = |
| 230 static_cast<uint32_t>(video_receiver_info.firs_sent); | 239 static_cast<uint32_t>(video_receiver_info.firs_sent); |
| 231 inbound_video->pli_count = | 240 inbound_video->pli_count = |
| 232 static_cast<uint32_t>(video_receiver_info.plis_sent); | 241 static_cast<uint32_t>(video_receiver_info.plis_sent); |
| 233 inbound_video->nack_count = | 242 inbound_video->nack_count = |
| 234 static_cast<uint32_t>(video_receiver_info.nacks_sent); | 243 static_cast<uint32_t>(video_receiver_info.nacks_sent); |
| 235 inbound_video->frames_decoded = video_receiver_info.frames_decoded; | 244 inbound_video->frames_decoded = video_receiver_info.frames_decoded; |
| 236 } | 245 } |
| 237 | 246 |
| 238 // Provides the media independent counters (both audio and video). | 247 // Provides the media independent counters (both audio and video). |
| 239 void SetOutboundRTPStreamStatsFromMediaSenderInfo( | 248 void SetOutboundRTPStreamStatsFromMediaSenderInfo( |
| 240 const cricket::MediaSenderInfo& media_sender_info, | 249 const cricket::MediaSenderInfo& media_sender_info, |
| 241 RTCOutboundRTPStreamStats* outbound_stats) { | 250 RTCOutboundRTPStreamStats* outbound_stats) { |
| 242 RTC_DCHECK(outbound_stats); | 251 RTC_DCHECK(outbound_stats); |
| 243 outbound_stats->ssrc = rtc::ToString<>(media_sender_info.ssrc()); | 252 outbound_stats->ssrc = rtc::ToString<>(media_sender_info.ssrc()); |
| 244 // TODO(hbos): Support the remote case. crbug.com/657856 | 253 // TODO(hbos): Support the remote case. crbug.com/657856 |
| 245 outbound_stats->is_remote = false; | 254 outbound_stats->is_remote = false; |
| 246 // TODO(hbos): Set |codec_id| when we have |RTCCodecStats|. Maybe relevant: | |
| 247 // |media_sender_info.codec_name|. crbug.com/657854, 657856, 659117 | |
| 248 outbound_stats->packets_sent = | 255 outbound_stats->packets_sent = |
| 249 static_cast<uint32_t>(media_sender_info.packets_sent); | 256 static_cast<uint32_t>(media_sender_info.packets_sent); |
| 250 outbound_stats->bytes_sent = | 257 outbound_stats->bytes_sent = |
| 251 static_cast<uint64_t>(media_sender_info.bytes_sent); | 258 static_cast<uint64_t>(media_sender_info.bytes_sent); |
| 252 if (media_sender_info.rtt_ms >= 0) { | 259 if (media_sender_info.rtt_ms >= 0) { |
| 253 outbound_stats->round_trip_time = static_cast<double>( | 260 outbound_stats->round_trip_time = static_cast<double>( |
| 254 media_sender_info.rtt_ms) / rtc::kNumMillisecsPerSec; | 261 media_sender_info.rtt_ms) / rtc::kNumMillisecsPerSec; |
| 255 } | 262 } |
| 256 } | 263 } |
| 257 | 264 |
| 258 void SetOutboundRTPStreamStatsFromVoiceSenderInfo( | 265 void SetOutboundRTPStreamStatsFromVoiceSenderInfo( |
| 259 const cricket::VoiceSenderInfo& voice_sender_info, | 266 const cricket::VoiceSenderInfo& voice_sender_info, |
| 260 RTCOutboundRTPStreamStats* outbound_audio) { | 267 RTCOutboundRTPStreamStats* outbound_audio) { |
| 261 SetOutboundRTPStreamStatsFromMediaSenderInfo( | 268 SetOutboundRTPStreamStatsFromMediaSenderInfo( |
| 262 voice_sender_info, outbound_audio); | 269 voice_sender_info, outbound_audio); |
| 263 outbound_audio->media_type = "audio"; | 270 outbound_audio->media_type = "audio"; |
| 271 if (voice_sender_info.codec_payload_type) { | |
| 272 outbound_audio->codec_id = | |
| 273 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 274 false, true, *voice_sender_info.codec_payload_type); | |
| 275 } | |
| 264 // |fir_count|, |pli_count| and |sli_count| are only valid for video and are | 276 // |fir_count|, |pli_count| and |sli_count| are only valid for video and are |
| 265 // purposefully left undefined for audio. | 277 // purposefully left undefined for audio. |
| 266 } | 278 } |
| 267 | 279 |
| 268 void SetOutboundRTPStreamStatsFromVideoSenderInfo( | 280 void SetOutboundRTPStreamStatsFromVideoSenderInfo( |
| 269 const cricket::VideoSenderInfo& video_sender_info, | 281 const cricket::VideoSenderInfo& video_sender_info, |
| 270 RTCOutboundRTPStreamStats* outbound_video) { | 282 RTCOutboundRTPStreamStats* outbound_video) { |
| 271 SetOutboundRTPStreamStatsFromMediaSenderInfo( | 283 SetOutboundRTPStreamStatsFromMediaSenderInfo( |
| 272 video_sender_info, outbound_video); | 284 video_sender_info, outbound_video); |
| 273 outbound_video->media_type = "video"; | 285 outbound_video->media_type = "video"; |
| 286 if (video_sender_info.codec_payload_type) { | |
| 287 outbound_video->codec_id = | |
| 288 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 289 false, false, *video_sender_info.codec_payload_type); | |
| 290 } | |
| 274 outbound_video->fir_count = | 291 outbound_video->fir_count = |
| 275 static_cast<uint32_t>(video_sender_info.firs_rcvd); | 292 static_cast<uint32_t>(video_sender_info.firs_rcvd); |
| 276 outbound_video->pli_count = | 293 outbound_video->pli_count = |
| 277 static_cast<uint32_t>(video_sender_info.plis_rcvd); | 294 static_cast<uint32_t>(video_sender_info.plis_rcvd); |
| 278 outbound_video->nack_count = | 295 outbound_video->nack_count = |
| 279 static_cast<uint32_t>(video_sender_info.nacks_rcvd); | 296 static_cast<uint32_t>(video_sender_info.nacks_rcvd); |
| 280 if (video_sender_info.qp_sum) | 297 if (video_sender_info.qp_sum) |
| 281 outbound_video->qp_sum = *video_sender_info.qp_sum; | 298 outbound_video->qp_sum = *video_sender_info.qp_sum; |
| 282 outbound_video->frames_encoded = video_sender_info.frames_encoded; | 299 outbound_video->frames_encoded = video_sender_info.frames_encoded; |
| 283 } | 300 } |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 931 if (audio_track) { | 948 if (audio_track) { |
| 932 RTC_DCHECK(track_to_id_.find(audio_track.get()) != track_to_id_.end()); | 949 RTC_DCHECK(track_to_id_.find(audio_track.get()) != track_to_id_.end()); |
| 933 inbound_audio->track_id = | 950 inbound_audio->track_id = |
| 934 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( | 951 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( |
| 935 false, | 952 false, |
| 936 MediaStreamTrackInterface::kAudioKind, | 953 MediaStreamTrackInterface::kAudioKind, |
| 937 track_to_id_.find(audio_track.get())->second, | 954 track_to_id_.find(audio_track.get())->second, |
| 938 voice_receiver_info.ssrc()); | 955 voice_receiver_info.ssrc()); |
| 939 } | 956 } |
| 940 inbound_audio->transport_id = transport_id; | 957 inbound_audio->transport_id = transport_id; |
| 941 if (voice_receiver_info.codec_payload_type) { | |
| 942 inbound_audio->codec_id = | |
| 943 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 944 true, true, *voice_receiver_info.codec_payload_type); | |
| 945 } | |
| 946 report->AddStats(std::move(inbound_audio)); | 958 report->AddStats(std::move(inbound_audio)); |
| 947 } | 959 } |
| 948 // Outbound | 960 // Outbound |
| 949 for (const cricket::VoiceSenderInfo& voice_sender_info : | 961 for (const cricket::VoiceSenderInfo& voice_sender_info : |
| 950 track_media_info_map.voice_media_info()->senders) { | 962 track_media_info_map.voice_media_info()->senders) { |
| 951 // TODO(nisse): SSRC == 0 currently means none. Delete check when that | 963 // TODO(nisse): SSRC == 0 currently means none. Delete check when that |
| 952 // is fixed. | 964 // is fixed. |
| 953 if (voice_sender_info.ssrc() == 0) | 965 if (voice_sender_info.ssrc() == 0) |
| 954 continue; | 966 continue; |
| 955 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_audio( | 967 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_audio( |
| 956 new RTCOutboundRTPStreamStats( | 968 new RTCOutboundRTPStreamStats( |
| 957 RTCOutboundRTPStreamStatsIDFromSSRC( | 969 RTCOutboundRTPStreamStatsIDFromSSRC( |
| 958 true, voice_sender_info.ssrc()), | 970 true, voice_sender_info.ssrc()), |
| 959 timestamp_us)); | 971 timestamp_us)); |
| 960 SetOutboundRTPStreamStatsFromVoiceSenderInfo( | 972 SetOutboundRTPStreamStatsFromVoiceSenderInfo( |
| 961 voice_sender_info, outbound_audio.get()); | 973 voice_sender_info, outbound_audio.get()); |
| 962 rtc::scoped_refptr<AudioTrackInterface> audio_track = | 974 rtc::scoped_refptr<AudioTrackInterface> audio_track = |
| 963 track_media_info_map_->GetAudioTrack(voice_sender_info); | 975 track_media_info_map_->GetAudioTrack(voice_sender_info); |
| 964 if (audio_track) { | 976 if (audio_track) { |
| 965 RTC_DCHECK(track_to_id_.find(audio_track.get()) != track_to_id_.end()); | 977 RTC_DCHECK(track_to_id_.find(audio_track.get()) != track_to_id_.end()); |
| 966 outbound_audio->track_id = | 978 outbound_audio->track_id = |
| 967 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( | 979 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( |
| 968 true, | 980 true, |
| 969 MediaStreamTrackInterface::kAudioKind, | 981 MediaStreamTrackInterface::kAudioKind, |
| 970 track_to_id_.find(audio_track.get())->second, | 982 track_to_id_.find(audio_track.get())->second, |
| 971 voice_sender_info.ssrc()); | 983 voice_sender_info.ssrc()); |
| 972 } | 984 } |
| 973 outbound_audio->transport_id = transport_id; | 985 outbound_audio->transport_id = transport_id; |
| 974 if (voice_sender_info.codec_payload_type) { | |
| 975 outbound_audio->codec_id = | |
| 976 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 977 false, true, *voice_sender_info.codec_payload_type); | |
| 978 } | |
| 979 report->AddStats(std::move(outbound_audio)); | 986 report->AddStats(std::move(outbound_audio)); |
| 980 } | 987 } |
| 981 } | 988 } |
| 982 // Video | 989 // Video |
| 983 if (track_media_info_map.video_media_info()) { | 990 if (track_media_info_map.video_media_info()) { |
| 984 std::string transport_id = RTCTransportStatsIDFromBaseChannel( | 991 std::string transport_id = RTCTransportStatsIDFromBaseChannel( |
| 985 session_stats.proxy_to_transport, *pc_->session()->video_channel()); | 992 session_stats.proxy_to_transport, *pc_->session()->video_channel()); |
| 986 RTC_DCHECK(!transport_id.empty()); | 993 RTC_DCHECK(!transport_id.empty()); |
| 987 // Inbound | 994 // Inbound |
| 988 for (const cricket::VideoReceiverInfo& video_receiver_info : | 995 for (const cricket::VideoReceiverInfo& video_receiver_info : |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 1003 if (video_track) { | 1010 if (video_track) { |
| 1004 RTC_DCHECK(track_to_id_.find(video_track.get()) != track_to_id_.end()); | 1011 RTC_DCHECK(track_to_id_.find(video_track.get()) != track_to_id_.end()); |
| 1005 inbound_video->track_id = | 1012 inbound_video->track_id = |
| 1006 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( | 1013 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( |
| 1007 false, | 1014 false, |
| 1008 MediaStreamTrackInterface::kVideoKind, | 1015 MediaStreamTrackInterface::kVideoKind, |
| 1009 track_to_id_.find(video_track.get())->second, | 1016 track_to_id_.find(video_track.get())->second, |
| 1010 video_receiver_info.ssrc()); | 1017 video_receiver_info.ssrc()); |
| 1011 } | 1018 } |
| 1012 inbound_video->transport_id = transport_id; | 1019 inbound_video->transport_id = transport_id; |
| 1013 if (video_receiver_info.codec_payload_type) { | |
| 1014 inbound_video->codec_id = | |
| 1015 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 1016 true, false, *video_receiver_info.codec_payload_type); | |
| 1017 } | |
| 1018 report->AddStats(std::move(inbound_video)); | 1020 report->AddStats(std::move(inbound_video)); |
| 1019 } | 1021 } |
| 1020 // Outbound | 1022 // Outbound |
| 1021 for (const cricket::VideoSenderInfo& video_sender_info : | 1023 for (const cricket::VideoSenderInfo& video_sender_info : |
| 1022 track_media_info_map.video_media_info()->senders) { | 1024 track_media_info_map.video_media_info()->senders) { |
| 1023 // TODO(nisse): SSRC == 0 currently means none. Delete check when that | 1025 // TODO(nisse): SSRC == 0 currently means none. Delete check when that |
| 1024 // is fixed. | 1026 // is fixed. |
| 1025 if (video_sender_info.ssrc() == 0) | 1027 if (video_sender_info.ssrc() == 0) |
| 1026 continue; | 1028 continue; |
| 1027 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_video( | 1029 std::unique_ptr<RTCOutboundRTPStreamStats> outbound_video( |
| 1028 new RTCOutboundRTPStreamStats( | 1030 new RTCOutboundRTPStreamStats( |
| 1029 RTCOutboundRTPStreamStatsIDFromSSRC( | 1031 RTCOutboundRTPStreamStatsIDFromSSRC( |
| 1030 false, video_sender_info.ssrc()), | 1032 false, video_sender_info.ssrc()), |
| 1031 timestamp_us)); | 1033 timestamp_us)); |
| 1032 SetOutboundRTPStreamStatsFromVideoSenderInfo( | 1034 SetOutboundRTPStreamStatsFromVideoSenderInfo( |
| 1033 video_sender_info, outbound_video.get()); | 1035 video_sender_info, outbound_video.get()); |
| 1034 rtc::scoped_refptr<VideoTrackInterface> video_track = | 1036 rtc::scoped_refptr<VideoTrackInterface> video_track = |
| 1035 track_media_info_map_->GetVideoTrack(video_sender_info); | 1037 track_media_info_map_->GetVideoTrack(video_sender_info); |
| 1036 if (video_track) { | 1038 if (video_track) { |
| 1037 RTC_DCHECK(track_to_id_.find(video_track.get()) != track_to_id_.end()); | 1039 RTC_DCHECK(track_to_id_.find(video_track.get()) != track_to_id_.end()); |
| 1038 outbound_video->track_id = | 1040 outbound_video->track_id = |
| 1039 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( | 1041 RTCMediaStreamTrackStatsIDFromTrackKindIDAndSsrc( |
| 1040 true, | 1042 true, |
| 1041 MediaStreamTrackInterface::kVideoKind, | 1043 MediaStreamTrackInterface::kVideoKind, |
| 1042 track_to_id_.find(video_track.get())->second, | 1044 track_to_id_.find(video_track.get())->second, |
| 1043 video_sender_info.ssrc()); | 1045 video_sender_info.ssrc()); |
| 1044 } | 1046 } |
| 1045 outbound_video->transport_id = transport_id; | 1047 outbound_video->transport_id = transport_id; |
| 1046 if (video_sender_info.codec_payload_type) { | |
| 1047 outbound_video->codec_id = | |
| 1048 RTCCodecStatsIDFromDirectionMediaAndPayload( | |
| 1049 false, false, *video_sender_info.codec_payload_type); | |
| 1050 } | |
| 1051 report->AddStats(std::move(outbound_video)); | 1048 report->AddStats(std::move(outbound_video)); |
| 1052 } | 1049 } |
| 1053 } | 1050 } |
| 1054 } | 1051 } |
| 1055 | 1052 |
| 1056 void RTCStatsCollector::ProduceTransportStats_n( | 1053 void RTCStatsCollector::ProduceTransportStats_n( |
| 1057 int64_t timestamp_us, const SessionStats& session_stats, | 1054 int64_t timestamp_us, const SessionStats& session_stats, |
| 1058 const std::map<std::string, CertificateStatsPair>& transport_cert_stats, | 1055 const std::map<std::string, CertificateStatsPair>& transport_cert_stats, |
| 1059 RTCStatsReport* report) const { | 1056 RTCStatsReport* report) const { |
| 1060 RTC_DCHECK(network_thread_->IsCurrent()); | 1057 RTC_DCHECK(network_thread_->IsCurrent()); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1222 const std::string& type) { | 1219 const std::string& type) { |
| 1223 return CandidateTypeToRTCIceCandidateType(type); | 1220 return CandidateTypeToRTCIceCandidateType(type); |
| 1224 } | 1221 } |
| 1225 | 1222 |
| 1226 const char* DataStateToRTCDataChannelStateForTesting( | 1223 const char* DataStateToRTCDataChannelStateForTesting( |
| 1227 DataChannelInterface::DataState state) { | 1224 DataChannelInterface::DataState state) { |
| 1228 return DataStateToRTCDataChannelState(state); | 1225 return DataStateToRTCDataChannelState(state); |
| 1229 } | 1226 } |
| 1230 | 1227 |
| 1231 } // namespace webrtc | 1228 } // namespace webrtc |
| OLD | NEW |