webrtc_m130/webrtc/tools/rtcbot/test/webrtc_video_streaming.js
houssainy@google.com 3e2f8ff36c Selecting bot_type changed to be specified in the test file
Selecting bot_type changed to be specified in the test file instead of
specify it in the running command.

Now we can write test for rtcBot that run one bot on chrome for android
and the other bot on chrome for desktop.

R=andresp@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/23069004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7458 4adac7df-926f-26a2-2b94-8c16560cd09d
2014-10-15 15:01:11 +00:00

109 lines
3.3 KiB
JavaScript

// 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.
//
// A unidirectional video and audio flowing test from bot 1 to bot 2.
// The test succeeds after collecting stats for 10 seconds from both bots
// and then write these stats to a file.
//
// Note: the source of the video and audio stream is getUserMedia().
//
function testVideoStreaming(bot1, bot2) {
var pc1 = null;
var pc2 = null;
var report = test.createStatisticsReport("webrtc_video_streaming");
test.wait([
createPeerConnection.bind(bot1),
createPeerConnection.bind(bot2) ],
onPeerConnectionCreated);
function createPeerConnection(done) {
this.asyncCreateTurnConfig(function(config) {
this.createPeerConnection(config, done, test.fail);
}.bind(this), test.fail);
}
function onPeerConnectionCreated(peer1, peer2) {
test.log("RTC Peers created.");
pc1 = peer1;
pc2 = peer2;
pc1.addEventListener('addstream', test.fail);
pc2.addEventListener('addstream', onAddStream);
pc1.addEventListener('icecandidate', onIceCandidate.bind(pc2));
pc2.addEventListener('icecandidate', onIceCandidate.bind(pc1));
bot1.getUserMedia({video:true, audio:true}, onUserMediaSuccess, test.fail);
function onUserMediaSuccess(stream) {
test.log("User has granted access to local media.");
pc1.addStream(stream);
bot1.showStream(stream.id, true, true);
createOfferAndAnswer();
}
}
function onAddStream(event) {
test.log("On Add stream.");
bot2.showStream(event.stream.id, true, false);
}
function onIceCandidate(event) {
if(event.candidate){
test.log(event.candidate.candidate);
this.addIceCandidate(event.candidate,
onAddIceCandidateSuccess, test.fail);
};
function onAddIceCandidateSuccess() {
test.log("Candidate added successfully");
};
}
function createOfferAndAnswer() {
test.log("Creating offer.");
pc1.createOffer(gotOffer, test.fail);
function gotOffer(offer) {
test.log("Got offer");
pc1.setLocalDescription(offer, onSetSessionDescriptionSuccess, test.fail);
pc2.setRemoteDescription(offer, onSetSessionDescriptionSuccess,
test.fail);
test.log("Creating answer");
pc2.createAnswer(gotAnswer, test.fail);
}
function gotAnswer(answer) {
test.log("Got answer");
pc2.setLocalDescription(answer, onSetSessionDescriptionSuccess,
test.fail);
pc1.setRemoteDescription(answer, onSetSessionDescriptionSuccess,
test.fail);
collectStats();
}
function onSetSessionDescriptionSuccess() {
test.log("Set session description success.");
}
function collectStats() {
report.collectStatsFromPeerConnection("bot1", pc1);
report.collectStatsFromPeerConnection("bot2", pc2);
setTimeout(function() {
report.finish(test.done);
}, 10000);
}
}
}
test.wait( [ test.spawnBot.bind(test, "alice", "chrome"),
test.spawnBot.bind(test, "bob", "android-chrome") ],
testVideoStreaming);