in release/connect-rtc.js [9710:9897]
value: function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
var _this11 = this;
var timestamp, impl, statsResult, rttReducer, audioInputRttMilliseconds, videoInputRttMilliseconds;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
timestamp = new Date();
impl = function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(stream, streamType) {
var tracks;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
tracks = [];
if (stream) {
_context2.next = 3;
break;
}
return _context2.abrupt('return', []);
case 3:
_context2.t0 = streamType;
_context2.next = _context2.t0 === 'audio_input' ? 6 : _context2.t0 === 'audio_output' ? 6 : _context2.t0 === 'video_input' ? 8 : _context2.t0 === 'video_output' ? 8 : 10;
break;
case 6:
tracks = stream.getAudioTracks();
return _context2.abrupt('break', 11);
case 8:
tracks = stream.getVideoTracks();
return _context2.abrupt('break', 11);
case 10:
throw new Error('Unsupported stream type while trying to get stats: ' + streamType);
case 11:
_context2.next = 13;
return Promise.all(tracks.map(function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(track) {
var self;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!_this11._legacyStatsReportSupport) {
_context.next = 5;
break;
}
self = _this11;
return _context.abrupt('return', new Promise(function (resolve) {
self._pc.getStats(function (rawStats) {
var digestedStats = (0, _rtpStats.extractMediaStatsFromStats)(timestamp, rawStats.result(), streamType);
if (!digestedStats) {
throw new Error('Failed to extract MediaRtpStats from RTCStatsReport for stream type ' + streamType);
}
resolve(digestedStats);
}, track);
}));
case 5:
return _context.abrupt('return', _this11._pc.getStats().then(function (rawStats) {
var digestedStats = (0, _rtpStats.extractMediaStatsFromStats)(timestamp, rawStats, streamType);
if (!digestedStats) {
throw new Error('Failed to extract MediaRtpStats from RTCStatsReport for stream type ' + streamType);
}
return digestedStats;
}));
case 6:
case 'end':
return _context.stop();
}
}
}, _callee, _this11);
}));
return function (_x3) {
return _ref3.apply(this, arguments);
};
}()));
case 13:
return _context2.abrupt('return', _context2.sent);
case 14:
case 'end':
return _context2.stop();
}
}
}, _callee2, _this11);
}));
return function impl(_x, _x2) {
return _ref2.apply(this, arguments);
};
}();
if (!(this._pc && this._pc.signalingState === 'stable')) {
_context3.next = 26;
break;
}
_context3.next = 5;
return impl(this._remoteAudioStream, 'audio_input');
case 5:
_context3.t0 = _context3.sent;
_context3.next = 8;
return impl(this._localStream, 'audio_output');
case 8:
_context3.t1 = _context3.sent;
_context3.t2 = {
input: _context3.t0,
output: _context3.t1
};
_context3.next = 12;
return impl(this._remoteVideoStream, 'video_input');
case 12:
_context3.t3 = _context3.sent;
_context3.next = 15;
return impl(this._localStream, 'video_output');
case 15:
_context3.t4 = _context3.sent;
_context3.t5 = {
input: _context3.t3,
output: _context3.t4
};
statsResult = {
audio: _context3.t2,
video: _context3.t5
};
// For consistency's sake, coalesce rttMilliseconds into the output for audio and video.
rttReducer = function rttReducer(acc, stats) {
if (stats.rttMilliseconds !== null && (acc === null || stats.rttMilliseconds > acc)) {
acc = stats.rttMilliseconds;
}
stats._rttMilliseconds = null;
return acc;
};
audioInputRttMilliseconds = statsResult.audio.input.reduce(rttReducer, null);
videoInputRttMilliseconds = statsResult.video.input.reduce(rttReducer, null);
if (audioInputRttMilliseconds !== null) {
statsResult.audio.output.forEach(function (stats) {
stats._rttMilliseconds = audioInputRttMilliseconds;
});
}
if (videoInputRttMilliseconds !== null) {
statsResult.video.output.forEach(function (stats) {
stats._rttMilliseconds = videoInputRttMilliseconds;
});
}
return _context3.abrupt('return', statsResult);
case 26:
return _context3.abrupt('return', Promise.reject(new _exceptions.IllegalState()));
case 27:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
function getStats() {
return _ref.apply(this, arguments);
}
return getStats;
}()