OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2017 The Chromium Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can be |
| 4 * found in the LICENSE file. |
| 5 */ |
| 6 'use strict'; |
| 7 |
| 8 const DEFAULT_FRAME_RATE = 30; |
| 9 |
| 10 var canvas = document.getElementById('canvas'); |
| 11 var context = canvas.getContext('2d'); |
| 12 |
| 13 var remoteVideo = document.getElementById('remoteVideo'); |
| 14 var startButton = document.getElementById('startButton'); |
| 15 startButton.onclick = start; |
| 16 |
| 17 var pc1; |
| 18 var pc2; |
| 19 var stream; |
| 20 |
| 21 function logError(err) { |
| 22 console.error(err); |
| 23 } |
| 24 |
| 25 // This function draws a red rectangle on the canvas using |
| 26 // requestAnimationFrame(). |
| 27 function draw() { |
| 28 window.requestAnimationFrame(draw); |
| 29 context.rect(0, 0, canvas.clientWidth, canvas.clientHeight); |
| 30 var randomNumber = Math.random(); |
| 31 var hue; |
| 32 if (randomNumber < 0.33) |
| 33 hue = 'red'; |
| 34 else if (randomNumber < 0.66) |
| 35 hue = 'green'; |
| 36 else |
| 37 hue = 'blue'; |
| 38 context.fillStyle = hue; |
| 39 context.fill(); |
| 40 } |
| 41 |
| 42 function start() { |
| 43 startButton.onclick = hangup; |
| 44 startButton.className = 'red'; |
| 45 startButton.innerHTML = 'Stop test'; |
| 46 draw(); |
| 47 stream = canvas.captureStream(DEFAULT_FRAME_RATE); |
| 48 call(); |
| 49 } |
| 50 |
| 51 function call() { |
| 52 var servers = null; |
| 53 pc1 = new RTCPeerConnection(servers); |
| 54 pc1.onicecandidate = (event) => { |
| 55 if (event.candidate) { |
| 56 pc2.addIceCandidate(event.candidate); |
| 57 } |
| 58 }; |
| 59 |
| 60 pc2 = new RTCPeerConnection(servers); |
| 61 pc2.onicecandidate = (event) => { |
| 62 if (event.candidate) { |
| 63 pc1.addIceCandidate(event.candidate); |
| 64 } |
| 65 }; |
| 66 pc2.onaddstream = (event) => { |
| 67 remoteVideo.srcObject = event.stream; |
| 68 }; |
| 69 |
| 70 pc1.addStream(stream); |
| 71 pc1.createOffer({ |
| 72 offerToReceiveAudio: 1, |
| 73 offerToReceiveVideo: 1 |
| 74 }).then(onCreateOfferSuccess, logError); |
| 75 } |
| 76 |
| 77 function onCreateOfferSuccess(desc) { |
| 78 pc1.setLocalDescription(desc); |
| 79 pc2.setRemoteDescription(desc); |
| 80 pc2.createAnswer().then(onCreateAnswerSuccess, logError); |
| 81 } |
| 82 |
| 83 function onCreateAnswerSuccess(desc) { |
| 84 pc2.setLocalDescription(desc); |
| 85 pc1.setRemoteDescription(desc); |
| 86 } |
| 87 |
| 88 function hangup() { |
| 89 pc1.close(); |
| 90 pc2.close(); |
| 91 pc1 = null; |
| 92 pc2 = null; |
| 93 startButton.onclick = start; |
| 94 startButton.className = 'green'; |
| 95 startButton.innerHTML = 'Start test'; |
| 96 } |
OLD | NEW |