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 unidirectional video and audio flowing test from bot 1 to 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(). 14 function testOneWayVideo(test, bot1, bot2) { 15 var report = test.createStatisticsReport("webrtc_video_streaming"); 16 17 test.wait([ 18 createPeerConnection.bind(bot1), 19 createPeerConnection.bind(bot2) ], 20 onPeerConnectionCreated); 21 22 function createPeerConnection(done) { 23 test.createTurnConfig(onTurnConfig.bind(this), test.fail); 24 25 function onTurnConfig(config) { 26 this.createPeerConnection(config, done, test.fail); 27 }; 28 } 29 30 function onPeerConnectionCreated(pc1, pc2) { 31 test.log("RTC Peers created."); 32 pc1.addEventListener('addstream', test.fail); 33 pc2.addEventListener('addstream', onAddStream); 34 pc1.addEventListener('icecandidate', onIceCandidate.bind(pc2)); 35 pc2.addEventListener('icecandidate', onIceCandidate.bind(pc1)); 36 37 bot1.getUserMedia({video:true, audio:true}, onUserMediaSuccess, test.fail); 38 39 function onUserMediaSuccess(stream) { 40 test.log("User has granted access to local media."); 41 pc1.addStream(stream); 42 bot1.showStream(stream.id, true, true); 43 44 createOfferAndAnswer(pc1, pc2); 45 } 46 } 47 48 function onAddStream(event) { 49 test.log("On Add stream."); 50 bot2.showStream(event.stream.id, true, false); 51 } 52 53 function onIceCandidate(event) { 54 if(event.candidate) { 55 test.log(event.candidate.candidate); 56 this.addIceCandidate(event.candidate, 57 onAddIceCandidateSuccess, test.fail); 58 } 59 60 function onAddIceCandidateSuccess() { 61 test.log("Candidate added successfully"); 62 } 63 } 64 65 function createOfferAndAnswer(pc1, pc2) { 66 test.log("Creating offer."); 67 pc1.createOffer(gotOffer, test.fail); 68 69 function gotOffer(offer) { 70 test.log("Got offer"); 71 pc1.setLocalDescription(offer, onSetSessionDescriptionSuccess, test.fail); 72 pc2.setRemoteDescription(offer, onSetSessionDescriptionSuccess, 73 test.fail); 74 test.log("Creating answer"); 75 pc2.createAnswer(gotAnswer, test.fail); 76 } 77 78 function gotAnswer(answer) { 79 test.log("Got answer"); 80 pc2.setLocalDescription(answer, onSetSessionDescriptionSuccess, 81 test.fail); 82 pc1.setRemoteDescription(answer, onSetSessionDescriptionSuccess, 83 test.fail); 84 collectStats(); 85 } 86 87 function onSetSessionDescriptionSuccess() { 88 test.log("Set session description success."); 89 } 90 91 function collectStats() { 92 report.collectStatsFromPeerConnection("bot1", pc1); 93 report.collectStatsFromPeerConnection("bot2", pc2); 94 95 setTimeout(function() { 96 report.finish(test.done); 97 }, 10000); 98 } 99 } 100 } 101 102 registerBotTest('testOneWayVideo/chrome-chrome', 103 testOneWayVideo, ['chrome', 'chrome']); 104