From 3382059e557082273a26490eb62ed752f4c995b0 Mon Sep 17 00:00:00 2001 From: "houssainy@google.com" Date: Wed, 22 Oct 2014 17:17:15 +0000 Subject: [PATCH] Adding Two way video and audio streaming test to RtcBot NOTE: This code review based on this running issue: https://review.webrtc.org/24939004/ R=andresp@webrtc.org Review URL: https://webrtc-codereview.appspot.com/25879004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7498 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../rtcbot/test/two_way_video_streaming.js | 112 ++++++++++++++++++ .../rtcbot/test/webrtc_video_streaming.js | 2 +- 2 files changed, 113 insertions(+), 1 deletion(-) create mode 100644 webrtc/tools/rtcbot/test/two_way_video_streaming.js diff --git a/webrtc/tools/rtcbot/test/two_way_video_streaming.js b/webrtc/tools/rtcbot/test/two_way_video_streaming.js new file mode 100644 index 000000000..888542b91 --- /dev/null +++ b/webrtc/tools/rtcbot/test/two_way_video_streaming.js @@ -0,0 +1,112 @@ +// 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 two way video and audio flowing test between bot 1 and 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 testTwoWayVideoStreaming(test, bot1, bot2) { + var report = test.createStatisticsReport("two_way_video_streaming"); + var statsCollector; + + test.wait([ + createPeerConnectionWithLocalStream.bind(bot1), + createPeerConnectionWithLocalStream.bind(bot2)], + onPeerConnectionCreated); + + function createPeerConnectionWithLocalStream(done) { + this.getUserMedia({video:true, audio:true}, + onUserMediaSuccess.bind(this), test.fail); + + function onUserMediaSuccess(stream) { + test.log("User has granted access to local media."); + test.createTurnConfig(onTurnConfig.bind(this), test.fail); + + function onTurnConfig(config) { + this.createPeerConnection(null, addAndShowStream.bind(this), + test.fail); + }; + + function addAndShowStream(pc) { + pc.addStream(stream); + this.showStream(stream.id, true, true); + + done(pc); + } + } + } + + function onPeerConnectionCreated(pc1, pc2) { + test.log("RTC Peers created."); + pc1.addEventListener('addstream', onAddStream.bind(bot1)); + pc2.addEventListener('addstream', onAddStream.bind(bot2)); + pc1.addEventListener('icecandidate', onIceCandidate.bind(pc2)); + pc2.addEventListener('icecandidate', onIceCandidate.bind(pc1)); + + createOfferAndAnswer(pc1, pc2); + } + + function onAddStream(event) { + test.log("On Add stream."); + this.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(pc1, pc2) { + 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); + } + } +} + +registerBotTest('testTwoWayVideo/android-android', + testTwoWayVideoStreaming, ['android-chrome', 'android-chrome']); +registerBotTest('testTwoWayVideo/chrome-chrome', + testTwoWayVideoStreaming, ['chrome', 'chrome']); \ No newline at end of file diff --git a/webrtc/tools/rtcbot/test/webrtc_video_streaming.js b/webrtc/tools/rtcbot/test/webrtc_video_streaming.js index 60df68ec5..6518c20e0 100644 --- a/webrtc/tools/rtcbot/test/webrtc_video_streaming.js +++ b/webrtc/tools/rtcbot/test/webrtc_video_streaming.js @@ -20,7 +20,7 @@ function testOneWayVideo(test, bot1, bot2) { onPeerConnectionCreated); function createPeerConnection(done) { - test.createTurnConfig(onTrunConfig.bind(this), test.fail); + test.createTurnConfig(onTurnConfig.bind(this), test.fail); function onTurnConfig(config) { this.createPeerConnection(config, done, test.fail);