Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Unified Diff: webrtc/tools/loopback_test/loopback_test.js

Issue 2965593002: Move webrtc/{tools => rtc_tools} (Closed)
Patch Set: Adding back root changes Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/tools/loopback_test/loopback_test.html ('k') | webrtc/tools/loopback_test/record-test.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/loopback_test/loopback_test.js
diff --git a/webrtc/tools/loopback_test/loopback_test.js b/webrtc/tools/loopback_test/loopback_test.js
deleted file mode 100644
index 5e596b7ff3708ff52265e24b7e4864567e226d58..0000000000000000000000000000000000000000
--- a/webrtc/tools/loopback_test/loopback_test.js
+++ /dev/null
@@ -1,240 +0,0 @@
-/**
- * Copyright (c) 2014 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. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-// LoopbackTest establish a one way loopback call between 2 peer connections
-// while continuously monitoring bandwidth stats. The idea is to use this as
-// a base for other future tests and to keep track of more than just bandwidth
-// stats.
-//
-// Usage:
-// var test = new LoopbackTest(stream, callDurationMs,
-// forceTurn, pcConstraints,
-// maxVideoBitrateKbps);
-// test.run(onDone);
-// function onDone() {
-// test.getResults(); // return stats recorded during the loopback test.
-// }
-//
-function LoopbackTest(
- stream,
- callDurationMs,
- forceTurn,
- pcConstraints,
- maxVideoBitrateKbps) {
-
- var pc1StatTracker;
- var pc2StatTracker;
-
- // In order to study effect of network (e.g. wifi) on peer connection one can
- // establish a loopback call and force it to go via a turn server. This way
- // the call won't switch to local addresses. That is achieved by filtering out
- // all non-relay ice candidades on both peers.
- function constrainTurnCandidates(pc) {
- var origAddIceCandidate = pc.addIceCandidate;
- pc.addIceCandidate = function (candidate, successCallback,
- failureCallback) {
- if (forceTurn && candidate.candidate.indexOf("typ relay ") == -1) {
- trace("Dropping non-turn candidate: " + candidate.candidate);
- successCallback();
- return;
- } else {
- origAddIceCandidate.call(this, candidate, successCallback,
- failureCallback);
- }
- }
- }
-
- // FEC makes it hard to study bwe estimation since there seems to be a spike
- // when it is enabled and disabled. Disable it for now. FEC issue tracked on:
- // https://code.google.com/p/webrtc/issues/detail?id=3050
- function constrainOfferToRemoveFec(pc) {
- var origCreateOffer = pc.createOffer;
- pc.createOffer = function (successCallback, failureCallback, options) {
- function filteredSuccessCallback(desc) {
- desc.sdp = desc.sdp.replace(/(m=video 1 [^\r]+)(116 117)(\r\n)/g,
- '$1\r\n');
- desc.sdp = desc.sdp.replace(/a=rtpmap:116 red\/90000\r\n/g, '');
- desc.sdp = desc.sdp.replace(/a=rtpmap:117 ulpfec\/90000\r\n/g, '');
- successCallback(desc);
- }
- origCreateOffer.call(this, filteredSuccessCallback, failureCallback,
- options);
- }
- }
-
- // Constraint max video bitrate by modifying the SDP when creating an answer.
- function constrainBitrateAnswer(pc) {
- var origCreateAnswer = pc.createAnswer;
- pc.createAnswer = function (successCallback, failureCallback, options) {
- function filteredSuccessCallback(desc) {
- if (maxVideoBitrateKbps) {
- desc.sdp = desc.sdp.replace(
- /a=mid:video\r\n/g,
- 'a=mid:video\r\nb=AS:' + maxVideoBitrateKbps + '\r\n');
- }
- successCallback(desc);
- }
- origCreateAnswer.call(this, filteredSuccessCallback, failureCallback,
- options);
- }
- }
-
- // Run the actual LoopbackTest.
- this.run = function(doneCallback) {
- if (forceTurn) requestTurn(start, fail);
- else start();
-
- function start(turnServer) {
- var pcConfig = forceTurn ? { iceServers: [turnServer] } : null;
- console.log(pcConfig);
- var pc1 = new RTCPeerConnection(pcConfig, pcConstraints);
- constrainTurnCandidates(pc1);
- constrainOfferToRemoveFec(pc1);
- pc1StatTracker = new StatTracker(pc1, 50);
- pc1StatTracker.recordStat("EstimatedSendBitrate",
- "bweforvideo", "googAvailableSendBandwidth");
- pc1StatTracker.recordStat("TransmitBitrate",
- "bweforvideo", "googTransmitBitrate");
- pc1StatTracker.recordStat("TargetEncodeBitrate",
- "bweforvideo", "googTargetEncBitrate");
- pc1StatTracker.recordStat("ActualEncodedBitrate",
- "bweforvideo", "googActualEncBitrate");
-
- var pc2 = new RTCPeerConnection(pcConfig, pcConstraints);
- constrainTurnCandidates(pc2);
- constrainBitrateAnswer(pc2);
- pc2StatTracker = new StatTracker(pc2, 50);
- pc2StatTracker.recordStat("REMB",
- "bweforvideo", "googAvailableReceiveBandwidth");
-
- pc1.addStream(stream);
- var call = new Call(pc1, pc2);
-
- call.start();
- setTimeout(function () {
- call.stop();
- pc1StatTracker.stop();
- pc2StatTracker.stop();
- success();
- }, callDurationMs);
- }
-
- function success() {
- trace("Success");
- doneCallback();
- }
-
- function fail(msg) {
- trace("Fail: " + msg);
- doneCallback();
- }
- }
-
- // Returns a google visualization datatable with the recorded samples during
- // the loopback test.
- this.getResults = function () {
- return mergeDataTable(pc1StatTracker.dataTable(),
- pc2StatTracker.dataTable());
- }
-
- // Helper class to establish and manage a call between 2 peer connections.
- // Usage:
- // var c = new Call(pc1, pc2);
- // c.start();
- // c.stop();
- //
- function Call(pc1, pc2) {
- pc1.onicecandidate = applyIceCandidate.bind(pc2);
- pc2.onicecandidate = applyIceCandidate.bind(pc1);
-
- function applyIceCandidate(e) {
- if (e.candidate) {
- this.addIceCandidate(new RTCIceCandidate(e.candidate),
- onAddIceCandidateSuccess,
- onAddIceCandidateError);
- }
- }
-
- function onAddIceCandidateSuccess() {}
- function onAddIceCandidateError(error) {
- trace("Failed to add Ice Candidate: " + error.toString());
- }
-
- this.start = function() {
- pc1.createOffer(gotDescription1, onCreateSessionDescriptionError);
-
- function onCreateSessionDescriptionError(error) {
- trace('Failed to create session description: ' + error.toString());
- }
-
- function gotDescription1(desc){
- trace("Offer: " + desc.sdp);
- pc1.setLocalDescription(desc);
- pc2.setRemoteDescription(desc);
- // Since the "remote" side has no media stream we need
- // to pass in the right constraints in order for it to
- // accept the incoming offer of audio and video.
- pc2.createAnswer(gotDescription2, onCreateSessionDescriptionError);
- }
-
- function gotDescription2(desc){
- trace("Answer: " + desc.sdp);
- pc2.setLocalDescription(desc);
- pc1.setRemoteDescription(desc);
- }
- }
-
- this.stop = function() {
- pc1.close();
- pc2.close();
- }
- }
-
- // Request a turn server. This uses the same servers as apprtc.
- function requestTurn(successCallback, failureCallback) {
- var currentDomain = document.domain;
- if (currentDomain.search('localhost') === -1 &&
- currentDomain.search('webrtc.googlecode.com') === -1) {
- failureCallback("Domain not authorized for turn server: " +
- currentDomain);
- return;
- }
-
- // Get a turn server from computeengineondemand.appspot.com.
- var turnUrl = 'https://computeengineondemand.appspot.com/' +
- 'turn?username=156547625762562&key=4080218913';
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = onTurnResult;
- xmlhttp.open('GET', turnUrl, true);
- xmlhttp.send();
-
- function onTurnResult() {
- if (this.readyState !== 4) {
- return;
- }
-
- if (this.status === 200) {
- var turnServer = JSON.parse(xmlhttp.responseText);
- // Create turnUris using the polyfill (adapter.js).
- turnServer.uris = turnServer.uris.filter(
- function (e) { return e.search('transport=udp') != -1; }
- );
- var iceServers = createIceServers(turnServer.uris,
- turnServer.username,
- turnServer.password);
- if (iceServers !== null) {
- successCallback(iceServers);
- return;
- }
- }
- failureCallback("Failed to get a turn server.");
- }
- }
-}
« no previous file with comments | « webrtc/tools/loopback_test/loopback_test.html ('k') | webrtc/tools/loopback_test/record-test.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698