/*
* Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree.
*/
/* jshint esversion: 6 */
'use strict';
var $ = document.getElementById.bind(document);
var testTable = $('test-table');
var nPeerConnectionsInput = $('num-peerconnections');
var startTestButton = $('start-test');
var cpuOveruseDetectionCheckbox = $('cpuoveruse-detection');
startTestButton.onclick = startTest;
function logError(err) {
console.err(err);
}
function addNewVideoElement() {
var newRow = testTable.insertRow(-1);
var newCell = newRow.insertCell(-1);
var video = document.createElement('video');
video.autoplay = true;
newCell.appendChild(video);
return video;
}
function PeerConnection(id, cpuOveruseDetection) {
this.id = id;
this.cpuOveruseDetection = cpuOveruseDetection;
this.localConnection = null;
this.remoteConnection = null;
this.remoteView = addNewVideoElement();
this.start = function() {
var onGetUserMediaSuccess = this.onGetUserMediaSuccess.bind(this);
navigator.mediaDevices.getUserMedia({
audio: true,
video: true
})
.then(onGetUserMediaSuccess)
.catch(logError);
};
this.onGetUserMediaSuccess = function(stream) {
// Create local peer connection.
this.localConnection = new RTCPeerConnection(null, {
'optional': [{
'googCpuOveruseDetection': this.cpuOveruseDetection
}]
});
this.localConnection.onicecandidate = (event) => {
this.onIceCandidate(this.remoteConnection, event);
};
this.localConnection.addStream(stream);
// Create remote peer connection.
this.remoteConnection = new RTCPeerConnection(null, {
'optional': [{
'googCpuOveruseDetection': this.cpuOveruseDetection
}]
});
this.remoteConnection.onicecandidate = (event) => {
this.onIceCandidate(this.localConnection, event);
};
this.remoteConnection.onaddstream = (e) => {
this.remoteView.srcObject = e.stream;
};
// Initiate call.
var onCreateOfferSuccess = this.onCreateOfferSuccess.bind(this);
this.localConnection.createOffer({
offerToReceiveAudio: 1,
offerToReceiveVideo: 1
})
.then(onCreateOfferSuccess, logError);
};
this.onCreateOfferSuccess = function(desc) {
this.localConnection.setLocalDescription(desc);
this.remoteConnection.setRemoteDescription(desc);
var onCreateAnswerSuccess = this.onCreateAnswerSuccess.bind(this);
this.remoteConnection.createAnswer()
.then(onCreateAnswerSuccess, logError);
};
this.onCreateAnswerSuccess = function(desc) {
this.remoteConnection.setLocalDescription(desc);
this.localConnection.setRemoteDescription(desc);
};
this.onIceCandidate = function(connection, event) {
if (event.candidate) {
connection.addIceCandidate(new RTCIceCandidate(event.candidate));
}
};
}
function startTest() {
var cpuOveruseDetection = cpuOveruseDetectionCheckbox.checked;
var nPeerConnections = nPeerConnectionsInput.value;
for (var i = 0; i < nPeerConnections; ++i) {
new PeerConnection(i, cpuOveruseDetection).start();
}
}