1// Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2// 3// Use of this source code is governed by a BSD-style license 4// that can be found in the LICENSE file in the root of the source 5// tree. An additional intellectual property rights grant can be found 6// in the file PATENTS. All contributing project authors may 7// be found in the AUTHORS file in the root of the source tree. 8// 9// A two way video and audio flowing test between bot 1 and bot 2. 10// The test succeeds after collecting stats for 10 seconds from both bots 11// and then write these stats to a file. 12// 13// Note: the source of the video and audio stream is getUserMedia(). 14function testTwoWayVideoStreaming(test, bot1, bot2) { 15 var report = test.createStatisticsReport("two_way_video_streaming"); 16 var statsCollector; 17 18 test.wait([ 19 createPeerConnectionWithLocalStream.bind(bot1), 20 createPeerConnectionWithLocalStream.bind(bot2)], 21 onPeerConnectionCreated); 22 23 function createPeerConnectionWithLocalStream(done) { 24 this.getUserMedia({video:true, audio:true}, 25 onUserMediaSuccess.bind(this), test.fail); 26 27 function onUserMediaSuccess(stream) { 28 test.log("User has granted access to local media."); 29 test.createTurnConfig(onTurnConfig.bind(this), test.fail); 30 31 function onTurnConfig(config) { 32 this.createPeerConnection(config, addAndShowStream.bind(this), 33 test.fail); 34 }; 35 36 function addAndShowStream(pc) { 37 pc.addStream(stream); 38 this.showStream(stream.id, true, true); 39 40 done(pc); 41 } 42 } 43 } 44 45 function onPeerConnectionCreated(pc1, pc2) { 46 test.log("RTC Peers created."); 47 pc1.addEventListener('addstream', onAddStream.bind(bot1)); 48 pc2.addEventListener('addstream', onAddStream.bind(bot2)); 49 pc1.addEventListener('icecandidate', onIceCandidate.bind(pc2)); 50 pc2.addEventListener('icecandidate', onIceCandidate.bind(pc1)); 51 52 createOfferAndAnswer(pc1, pc2); 53 } 54 55 function onAddStream(event) { 56 test.log("On Add stream."); 57 this.showStream(event.stream.id, true, false); 58 } 59 60 function onIceCandidate(event) { 61 if(event.candidate) { 62 test.log(event.candidate.candidate); 63 this.addIceCandidate(event.candidate, 64 onAddIceCandidateSuccess, test.fail); 65 }; 66 67 function onAddIceCandidateSuccess() { 68 test.log("Candidate added successfully"); 69 }; 70 } 71 72 function createOfferAndAnswer(pc1, pc2) { 73 test.log("Creating offer."); 74 pc1.createOffer(gotOffer, test.fail); 75 76 function gotOffer(offer) { 77 test.log("Got offer"); 78 pc1.setLocalDescription(offer, onSetSessionDescriptionSuccess, test.fail); 79 pc2.setRemoteDescription(offer, onSetSessionDescriptionSuccess, 80 test.fail); 81 test.log("Creating answer"); 82 pc2.createAnswer(gotAnswer, test.fail); 83 } 84 85 function gotAnswer(answer) { 86 test.log("Got answer"); 87 pc2.setLocalDescription(answer, onSetSessionDescriptionSuccess, 88 test.fail); 89 pc1.setRemoteDescription(answer, onSetSessionDescriptionSuccess, 90 test.fail); 91 collectStats(); 92 } 93 94 function onSetSessionDescriptionSuccess() { 95 test.log("Set session description success."); 96 } 97 98 function collectStats() { 99 report.collectStatsFromPeerConnection("bot1", pc1); 100 report.collectStatsFromPeerConnection("bot2", pc2); 101 102 setTimeout(function() { 103 report.finish(test.done); 104 }, 10000); 105 } 106 } 107} 108 109registerBotTest('testTwoWayVideo/android-android', 110 testTwoWayVideoStreaming, ['android-chrome', 'android-chrome']); 111registerBotTest('testTwoWayVideo/chrome-chrome', 112 testTwoWayVideoStreaming, ['chrome', 'chrome']);