OLD | NEW |
| (Empty) |
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 video conference between 3 bots streaming video and audio between | |
10 // each other. | |
11 // The test succeeds after establishing the call between the three | |
12 // devices. | |
13 // | |
14 // Note: the source of the video and audio stream is getUserMedia(). | |
15 function testTwoWayVideoStreaming(test, bot1, bot2, bot3) { | |
16 var answersCount = 0; | |
17 var statsCollector; | |
18 | |
19 test.wait([ | |
20 createBotPeerConnectionsWithLocalStream.bind(bot1), | |
21 createBotPeerConnectionsWithLocalStream.bind(bot2), | |
22 createBotPeerConnectionsWithLocalStream.bind(bot3)], | |
23 onPeerConnectionCreated); | |
24 | |
25 // done() callback is called with list of peers as argument. | |
26 function createBotPeerConnectionsWithLocalStream(done) { | |
27 var peerConnections = []; | |
28 | |
29 this.getUserMedia({video:true, audio:true}, | |
30 onUserMediaSuccess.bind(this), test.fail); | |
31 | |
32 function onUserMediaSuccess(stream) { | |
33 test.log("User has granted access to local media."); | |
34 this.showStream(stream.id, true, true); | |
35 | |
36 test.createTurnConfig(onTurnConfig.bind(this), test.fail); | |
37 | |
38 function onTurnConfig(config) { | |
39 this.createPeerConnection(config, addStream.bind(this), | |
40 test.fail); | |
41 this.createPeerConnection(config, addStream.bind(this), | |
42 test.fail); | |
43 } | |
44 | |
45 function addStream(pc) { | |
46 pc.addStream(stream); | |
47 pc.addEventListener('addstream', onAddStream.bind(this)); | |
48 | |
49 peerConnections.push(pc); | |
50 if(peerConnections.length == 2) | |
51 done(peerConnections); | |
52 } | |
53 } | |
54 } | |
55 | |
56 function onPeerConnectionCreated(peerConnections1, | |
57 peerConnections2, peerConnections3) { | |
58 test.log("RTC Peers created."); | |
59 | |
60 // Bot1 and Bot2 | |
61 establichCall(peerConnections1[0], peerConnections2[1]); | |
62 // Bot2 and Bot3 | |
63 establichCall(peerConnections2[0], peerConnections3[1]); | |
64 // Bot3 and Bot1 | |
65 establichCall(peerConnections3[0], peerConnections1[1]); | |
66 } | |
67 | |
68 function establichCall(pc1, pc2) { | |
69 pc1.addEventListener('icecandidate', onIceCandidate.bind(pc2)); | |
70 pc2.addEventListener('icecandidate', onIceCandidate.bind(pc1)); | |
71 | |
72 createOfferAndAnswer(pc1, pc2); | |
73 } | |
74 | |
75 function onAddStream(event) { | |
76 test.log("On Add stream."); | |
77 this.showStream(event.stream.id, true, false); | |
78 } | |
79 | |
80 function onIceCandidate(event) { | |
81 if(event.candidate) { | |
82 this.addIceCandidate(event.candidate, | |
83 onAddIceCandidateSuccess, test.fail); | |
84 }; | |
85 | |
86 function onAddIceCandidateSuccess() { | |
87 test.log("Candidate added successfully"); | |
88 }; | |
89 } | |
90 | |
91 function createOfferAndAnswer(pc1, pc2) { | |
92 test.log("Creating offer."); | |
93 pc1.createOffer(gotOffer, test.fail); | |
94 | |
95 function gotOffer(offer) { | |
96 test.log("Got offer"); | |
97 pc1.setLocalDescription(offer, onSetSessionDescriptionSuccess, test.fail); | |
98 pc2.setRemoteDescription(offer, onSetSessionDescriptionSuccess, | |
99 test.fail); | |
100 test.log("Creating answer"); | |
101 pc2.createAnswer(gotAnswer, test.fail); | |
102 } | |
103 | |
104 function gotAnswer(answer) { | |
105 test.log("Got answer"); | |
106 pc2.setLocalDescription(answer, onSetSessionDescriptionSuccess, | |
107 test.fail); | |
108 pc1.setRemoteDescription(answer, onSetSessionDescriptionSuccess, | |
109 test.fail); | |
110 | |
111 answersCount++; | |
112 if(answersCount == 3) { | |
113 // SetTimeout used because creating the three answers will very fast | |
114 // and test will success and the vm will be closed before establishing | |
115 // the calls. | |
116 setTimeout(function() { | |
117 test.done(); | |
118 }, 5000); | |
119 } | |
120 } | |
121 | |
122 function onSetSessionDescriptionSuccess() { | |
123 test.log("Set session description success."); | |
124 } | |
125 } | |
126 } | |
127 | |
128 registerBotTest('threeBotsVideoConference/android+android+chrome', | |
129 testTwoWayVideoStreaming, ['android-chrome', 'android-chrome', | |
130 'chrome']); | |
131 registerBotTest('threeBotsVideoConference/chrome-chrome-chrome', | |
132 testTwoWayVideoStreaming, ['chrome', 'chrome', 'chrome']); | |
133 registerBotTest('threeBotsVideoConference/android-android-android', | |
134 testTwoWayVideoStreaming, ['android-chrome', 'android-chrome', | |
135 'android-chrome']); | |
OLD | NEW |