OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2015 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 |
11 #import "ARDStatsBuilder.h" | 11 #import "ARDStatsBuilder.h" |
12 | 12 |
13 #import "WebRTC/RTCStatsReport.h" | 13 #import "WebRTC/RTCLegacyStatsReport.h" |
14 | 14 |
15 #import "ARDBitrateTracker.h" | 15 #import "ARDBitrateTracker.h" |
16 #import "ARDUtilities.h" | 16 #import "ARDUtilities.h" |
17 | 17 |
18 @implementation ARDStatsBuilder { | 18 @implementation ARDStatsBuilder { |
19 // Connection stats. | 19 // Connection stats. |
20 NSString *_connRecvBitrate; | 20 NSString *_connRecvBitrate; |
21 NSString *_connRtt; | 21 NSString *_connRtt; |
22 NSString *_connSendBitrate; | 22 NSString *_connSendBitrate; |
23 NSString *_localCandType; | 23 NSString *_localCandType; |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 | 122 |
123 // Audio receive stats. | 123 // Audio receive stats. |
124 NSString *audioReceiveFormat = @"AR %@ | %@ | %@ms | (expandrate)%@"; | 124 NSString *audioReceiveFormat = @"AR %@ | %@ | %@ms | (expandrate)%@"; |
125 [result appendString:[NSString stringWithFormat:audioReceiveFormat, | 125 [result appendString:[NSString stringWithFormat:audioReceiveFormat, |
126 _audioRecvBitrate, _audioRecvCodec, _audioCurrentDelay, | 126 _audioRecvBitrate, _audioRecvCodec, _audioCurrentDelay, |
127 _audioExpandRate]]; | 127 _audioExpandRate]]; |
128 | 128 |
129 return result; | 129 return result; |
130 } | 130 } |
131 | 131 |
132 - (void)parseStatsReport:(RTCStatsReport *)statsReport { | 132 - (void)parseStatsReport:(RTCLegacyStatsReport *)statsReport { |
133 NSString *reportType = statsReport.type; | 133 NSString *reportType = statsReport.type; |
134 if ([reportType isEqualToString:@"ssrc"] && | 134 if ([reportType isEqualToString:@"ssrc"] && |
135 [statsReport.reportId rangeOfString:@"ssrc"].location != NSNotFound) { | 135 [statsReport.reportId rangeOfString:@"ssrc"].location != NSNotFound) { |
136 if ([statsReport.reportId rangeOfString:@"send"].location != NSNotFound) { | 136 if ([statsReport.reportId rangeOfString:@"send"].location != NSNotFound) { |
137 [self parseSendSsrcStatsReport:statsReport]; | 137 [self parseSendSsrcStatsReport:statsReport]; |
138 } | 138 } |
139 if ([statsReport.reportId rangeOfString:@"recv"].location != NSNotFound) { | 139 if ([statsReport.reportId rangeOfString:@"recv"].location != NSNotFound) { |
140 [self parseRecvSsrcStatsReport:statsReport]; | 140 [self parseRecvSsrcStatsReport:statsReport]; |
141 } | 141 } |
142 } else if ([reportType isEqualToString:@"VideoBwe"]) { | 142 } else if ([reportType isEqualToString:@"VideoBwe"]) { |
143 [self parseBweStatsReport:statsReport]; | 143 [self parseBweStatsReport:statsReport]; |
144 } else if ([reportType isEqualToString:@"googCandidatePair"]) { | 144 } else if ([reportType isEqualToString:@"googCandidatePair"]) { |
145 [self parseConnectionStatsReport:statsReport]; | 145 [self parseConnectionStatsReport:statsReport]; |
146 } | 146 } |
147 } | 147 } |
148 | 148 |
149 #pragma mark - Private | 149 #pragma mark - Private |
150 | 150 |
151 - (void)parseBweStatsReport:(RTCStatsReport *)statsReport { | 151 - (void)parseBweStatsReport:(RTCLegacyStatsReport *)statsReport { |
152 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( | 152 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( |
153 NSString *key, NSString *value, BOOL *stop) { | 153 NSString *key, NSString *value, BOOL *stop) { |
154 if ([key isEqualToString:@"googAvailableSendBandwidth"]) { | 154 if ([key isEqualToString:@"googAvailableSendBandwidth"]) { |
155 _availableSendBw = | 155 _availableSendBw = |
156 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; | 156 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; |
157 } else if ([key isEqualToString:@"googAvailableReceiveBandwidth"]) { | 157 } else if ([key isEqualToString:@"googAvailableReceiveBandwidth"]) { |
158 _availableRecvBw = | 158 _availableRecvBw = |
159 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; | 159 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; |
160 } else if ([key isEqualToString:@"googActualEncBitrate"]) { | 160 } else if ([key isEqualToString:@"googActualEncBitrate"]) { |
161 _actualEncBitrate = | 161 _actualEncBitrate = |
162 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; | 162 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; |
163 } else if ([key isEqualToString:@"googTargetEncBitrate"]) { | 163 } else if ([key isEqualToString:@"googTargetEncBitrate"]) { |
164 _targetEncBitrate = | 164 _targetEncBitrate = |
165 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; | 165 [ARDBitrateTracker bitrateStringForBitrate:value.doubleValue]; |
166 } | 166 } |
167 }]; | 167 }]; |
168 } | 168 } |
169 | 169 |
170 - (void)parseConnectionStatsReport:(RTCStatsReport *)statsReport { | 170 - (void)parseConnectionStatsReport:(RTCLegacyStatsReport *)statsReport { |
171 NSString *activeConnection = statsReport.values[@"googActiveConnection"]; | 171 NSString *activeConnection = statsReport.values[@"googActiveConnection"]; |
172 if (![activeConnection isEqualToString:@"true"]) { | 172 if (![activeConnection isEqualToString:@"true"]) { |
173 return; | 173 return; |
174 } | 174 } |
175 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( | 175 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( |
176 NSString *key, NSString *value, BOOL *stop) { | 176 NSString *key, NSString *value, BOOL *stop) { |
177 if ([key isEqualToString:@"googRtt"]) { | 177 if ([key isEqualToString:@"googRtt"]) { |
178 _connRtt = value; | 178 _connRtt = value; |
179 } else if ([key isEqualToString:@"googLocalCandidateType"]) { | 179 } else if ([key isEqualToString:@"googLocalCandidateType"]) { |
180 _localCandType = value; | 180 _localCandType = value; |
181 } else if ([key isEqualToString:@"googRemoteCandidateType"]) { | 181 } else if ([key isEqualToString:@"googRemoteCandidateType"]) { |
182 _remoteCandType = value; | 182 _remoteCandType = value; |
183 } else if ([key isEqualToString:@"googTransportType"]) { | 183 } else if ([key isEqualToString:@"googTransportType"]) { |
184 _transportType = value; | 184 _transportType = value; |
185 } else if ([key isEqualToString:@"bytesReceived"]) { | 185 } else if ([key isEqualToString:@"bytesReceived"]) { |
186 NSInteger byteCount = value.integerValue; | 186 NSInteger byteCount = value.integerValue; |
187 [_connRecvBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; | 187 [_connRecvBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; |
188 _connRecvBitrate = _connRecvBitrateTracker.bitrateString; | 188 _connRecvBitrate = _connRecvBitrateTracker.bitrateString; |
189 } else if ([key isEqualToString:@"bytesSent"]) { | 189 } else if ([key isEqualToString:@"bytesSent"]) { |
190 NSInteger byteCount = value.integerValue; | 190 NSInteger byteCount = value.integerValue; |
191 [_connSendBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; | 191 [_connSendBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; |
192 _connSendBitrate = _connSendBitrateTracker.bitrateString; | 192 _connSendBitrate = _connSendBitrateTracker.bitrateString; |
193 } | 193 } |
194 }]; | 194 }]; |
195 } | 195 } |
196 | 196 |
197 - (void)parseSendSsrcStatsReport:(RTCStatsReport *)statsReport { | 197 - (void)parseSendSsrcStatsReport:(RTCLegacyStatsReport *)statsReport { |
198 NSDictionary *values = statsReport.values; | 198 NSDictionary *values = statsReport.values; |
199 if ([values objectForKey:@"googFrameRateSent"]) { | 199 if ([values objectForKey:@"googFrameRateSent"]) { |
200 // Video track. | 200 // Video track. |
201 [self parseVideoSendStatsReport:statsReport]; | 201 [self parseVideoSendStatsReport:statsReport]; |
202 } else if ([values objectForKey:@"audioInputLevel"]) { | 202 } else if ([values objectForKey:@"audioInputLevel"]) { |
203 // Audio track. | 203 // Audio track. |
204 [self parseAudioSendStatsReport:statsReport]; | 204 [self parseAudioSendStatsReport:statsReport]; |
205 } | 205 } |
206 } | 206 } |
207 | 207 |
208 - (void)parseAudioSendStatsReport:(RTCStatsReport *)statsReport { | 208 - (void)parseAudioSendStatsReport:(RTCLegacyStatsReport *)statsReport { |
209 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( | 209 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( |
210 NSString *key, NSString *value, BOOL *stop) { | 210 NSString *key, NSString *value, BOOL *stop) { |
211 if ([key isEqualToString:@"googCodecName"]) { | 211 if ([key isEqualToString:@"googCodecName"]) { |
212 _audioSendCodec = value; | 212 _audioSendCodec = value; |
213 } else if ([key isEqualToString:@"bytesSent"]) { | 213 } else if ([key isEqualToString:@"bytesSent"]) { |
214 NSInteger byteCount = value.integerValue; | 214 NSInteger byteCount = value.integerValue; |
215 [_audioSendBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; | 215 [_audioSendBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; |
216 _audioSendBitrate = _audioSendBitrateTracker.bitrateString; | 216 _audioSendBitrate = _audioSendBitrateTracker.bitrateString; |
217 } | 217 } |
218 }]; | 218 }]; |
219 } | 219 } |
220 | 220 |
221 - (void)parseVideoSendStatsReport:(RTCStatsReport *)statsReport { | 221 - (void)parseVideoSendStatsReport:(RTCLegacyStatsReport *)statsReport { |
222 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( | 222 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( |
223 NSString *key, NSString *value, BOOL *stop) { | 223 NSString *key, NSString *value, BOOL *stop) { |
224 if ([key isEqualToString:@"googCodecName"]) { | 224 if ([key isEqualToString:@"googCodecName"]) { |
225 _videoSendCodec = value; | 225 _videoSendCodec = value; |
226 } else if ([key isEqualToString:@"googFrameHeightInput"]) { | 226 } else if ([key isEqualToString:@"googFrameHeightInput"]) { |
227 _videoInputHeight = value; | 227 _videoInputHeight = value; |
228 } else if ([key isEqualToString:@"googFrameWidthInput"]) { | 228 } else if ([key isEqualToString:@"googFrameWidthInput"]) { |
229 _videoInputWidth = value; | 229 _videoInputWidth = value; |
230 } else if ([key isEqualToString:@"googFrameRateInput"]) { | 230 } else if ([key isEqualToString:@"googFrameRateInput"]) { |
231 _videoInputFps = value; | 231 _videoInputFps = value; |
232 } else if ([key isEqualToString:@"googFrameHeightSent"]) { | 232 } else if ([key isEqualToString:@"googFrameHeightSent"]) { |
233 _videoSendHeight = value; | 233 _videoSendHeight = value; |
234 } else if ([key isEqualToString:@"googFrameWidthSent"]) { | 234 } else if ([key isEqualToString:@"googFrameWidthSent"]) { |
235 _videoSendWidth = value; | 235 _videoSendWidth = value; |
236 } else if ([key isEqualToString:@"googFrameRateSent"]) { | 236 } else if ([key isEqualToString:@"googFrameRateSent"]) { |
237 _videoSendFps = value; | 237 _videoSendFps = value; |
238 } else if ([key isEqualToString:@"googAvgEncodeMs"]) { | 238 } else if ([key isEqualToString:@"googAvgEncodeMs"]) { |
239 _videoEncodeMs = value; | 239 _videoEncodeMs = value; |
240 } else if ([key isEqualToString:@"bytesSent"]) { | 240 } else if ([key isEqualToString:@"bytesSent"]) { |
241 NSInteger byteCount = value.integerValue; | 241 NSInteger byteCount = value.integerValue; |
242 [_videoSendBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; | 242 [_videoSendBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; |
243 _videoSendBitrate = _videoSendBitrateTracker.bitrateString; | 243 _videoSendBitrate = _videoSendBitrateTracker.bitrateString; |
244 } | 244 } |
245 }]; | 245 }]; |
246 } | 246 } |
247 | 247 |
248 - (void)parseRecvSsrcStatsReport:(RTCStatsReport *)statsReport { | 248 - (void)parseRecvSsrcStatsReport:(RTCLegacyStatsReport *)statsReport { |
249 NSDictionary *values = statsReport.values; | 249 NSDictionary *values = statsReport.values; |
250 if ([values objectForKey:@"googFrameWidthReceived"]) { | 250 if ([values objectForKey:@"googFrameWidthReceived"]) { |
251 // Video track. | 251 // Video track. |
252 [self parseVideoRecvStatsReport:statsReport]; | 252 [self parseVideoRecvStatsReport:statsReport]; |
253 } else if ([values objectForKey:@"audioOutputLevel"]) { | 253 } else if ([values objectForKey:@"audioOutputLevel"]) { |
254 // Audio track. | 254 // Audio track. |
255 [self parseAudioRecvStatsReport:statsReport]; | 255 [self parseAudioRecvStatsReport:statsReport]; |
256 } | 256 } |
257 } | 257 } |
258 | 258 |
259 - (void)parseAudioRecvStatsReport:(RTCStatsReport *)statsReport { | 259 - (void)parseAudioRecvStatsReport:(RTCLegacyStatsReport *)statsReport { |
260 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( | 260 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( |
261 NSString *key, NSString *value, BOOL *stop) { | 261 NSString *key, NSString *value, BOOL *stop) { |
262 if ([key isEqualToString:@"googCodecName"]) { | 262 if ([key isEqualToString:@"googCodecName"]) { |
263 _audioRecvCodec = value; | 263 _audioRecvCodec = value; |
264 } else if ([key isEqualToString:@"bytesReceived"]) { | 264 } else if ([key isEqualToString:@"bytesReceived"]) { |
265 NSInteger byteCount = value.integerValue; | 265 NSInteger byteCount = value.integerValue; |
266 [_audioRecvBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; | 266 [_audioRecvBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; |
267 _audioRecvBitrate = _audioRecvBitrateTracker.bitrateString; | 267 _audioRecvBitrate = _audioRecvBitrateTracker.bitrateString; |
268 } else if ([key isEqualToString:@"googSpeechExpandRate"]) { | 268 } else if ([key isEqualToString:@"googSpeechExpandRate"]) { |
269 _audioExpandRate = value; | 269 _audioExpandRate = value; |
270 } else if ([key isEqualToString:@"googCurrentDelayMs"]) { | 270 } else if ([key isEqualToString:@"googCurrentDelayMs"]) { |
271 _audioCurrentDelay = value; | 271 _audioCurrentDelay = value; |
272 } | 272 } |
273 }]; | 273 }]; |
274 } | 274 } |
275 | 275 |
276 - (void)parseVideoRecvStatsReport:(RTCStatsReport *)statsReport { | 276 - (void)parseVideoRecvStatsReport:(RTCLegacyStatsReport *)statsReport { |
277 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( | 277 [statsReport.values enumerateKeysAndObjectsUsingBlock:^( |
278 NSString *key, NSString *value, BOOL *stop) { | 278 NSString *key, NSString *value, BOOL *stop) { |
279 if ([key isEqualToString:@"googFrameHeightReceived"]) { | 279 if ([key isEqualToString:@"googFrameHeightReceived"]) { |
280 _videoRecvHeight = value; | 280 _videoRecvHeight = value; |
281 } else if ([key isEqualToString:@"googFrameWidthReceived"]) { | 281 } else if ([key isEqualToString:@"googFrameWidthReceived"]) { |
282 _videoRecvWidth = value; | 282 _videoRecvWidth = value; |
283 } else if ([key isEqualToString:@"googFrameRateReceived"]) { | 283 } else if ([key isEqualToString:@"googFrameRateReceived"]) { |
284 _videoRecvFps = value; | 284 _videoRecvFps = value; |
285 } else if ([key isEqualToString:@"googFrameRateDecoded"]) { | 285 } else if ([key isEqualToString:@"googFrameRateDecoded"]) { |
286 _videoDecodedFps = value; | 286 _videoDecodedFps = value; |
287 } else if ([key isEqualToString:@"googFrameRateOutput"]) { | 287 } else if ([key isEqualToString:@"googFrameRateOutput"]) { |
288 _videoOutputFps = value; | 288 _videoOutputFps = value; |
289 } else if ([key isEqualToString:@"googDecodeMs"]) { | 289 } else if ([key isEqualToString:@"googDecodeMs"]) { |
290 _videoDecodeMs = value; | 290 _videoDecodeMs = value; |
291 } else if ([key isEqualToString:@"bytesReceived"]) { | 291 } else if ([key isEqualToString:@"bytesReceived"]) { |
292 NSInteger byteCount = value.integerValue; | 292 NSInteger byteCount = value.integerValue; |
293 [_videoRecvBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; | 293 [_videoRecvBitrateTracker updateBitrateWithCurrentByteCount:byteCount]; |
294 _videoRecvBitrate = _videoRecvBitrateTracker.bitrateString; | 294 _videoRecvBitrate = _videoRecvBitrateTracker.bitrateString; |
295 } | 295 } |
296 }]; | 296 }]; |
297 } | 297 } |
298 | 298 |
299 @end | 299 @end |
300 | 300 |
OLD | NEW |