blob: f5e46c6ddd13ff6e7c0a322ac6be6128e9e86c6d [file] [log] [blame]
James Kuszmaul4a42b182021-01-17 11:32:46 -08001<!DOCTYPE html>
2<html>
3<head>
4 <meta charset="utf-8">
5 <title>ORTC/WebRTC Interop Data Channel Example</title>
6</head>
7<style>
8textarea {
9}
10</style>
11<body>
12 <textarea cols="120" rows="20" id="local-parameters" onclick="this.select();" readonly></textarea>
13 <textarea cols="120" rows="20" id="remote-parameters"></textarea><br />
14 <button type="button" onclick="start(peer);" id="start" disabled>Start</button>
15
16 <script type="text/javascript" src="sdp.js"></script>
17 <script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
18 <script type="text/javascript" src="webrtc-rawrtc.js"></script>
19 <script type="text/javascript">
20 'use strict';
21
22 let localParameters = document.getElementById('local-parameters');
23 let remoteParameters = document.getElementById('remote-parameters');
24 let startButton = document.getElementById('start');
25
26 function getURLParameter(name) {
27 return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null;
28 }
29
30 function setRemoteParameters(peer) {
31 // Parse and apply the remote parameters
32 let parameters = JSON.parse(remoteParameters.value);
33 console.log('Remote parameters:', parameters);
34 peer.setRemoteParameters(parameters)
35 .then((parameters) => {
36 // Generate local parameters if controlled
37 if (peer instanceof ControlledPeer) {
38 getLocalParameters(peer);
39 }
40 })
41 .catch((error) => {
42 console.error(error);
43 });
44 };
45
46 function getLocalParameters(peer) {
47 // Generate and show the local parameters
48 peer.getLocalParameters()
49 .then((parameters) => {
50 console.log('Local parameters:', parameters);
51 localParameters.value = JSON.stringify(parameters);
52 });
53 }
54
55 function createPeer(controllingParameter) {
56 let controlling = controllingParameter == 'true' || controllingParameter == '1';
57 console.log('Role: ICE-Controll' + (controlling ? 'ing' : 'ed'));
58
59 // Create peer depending on the role
60 let peer = controlling ? new ControllingPeer() : new ControlledPeer();
61 peer.createPeerConnection();
62 let cat = peer.createDataChannel(peer.pc.createDataChannel('cat-noises', {
63 ordered: true,
64 negotiated: true,
65 id: 0
66 }));
67 peer.createDataChannel();
68
69 // Create local parameters if we are the controlling peer.
70 // Keep in mind this still uses offer/answer in the background, thus this
71 // limitation which does not exist for ORTC but does for WebRTC.
72 if (controlling) {
73 getLocalParameters(peer);
74 }
75
76 return peer;
77 }
78
79 function start(peer) {
80 // Apply remote parameters
81 // For the controlled peer, this will automatically generate local parameters
82 setRemoteParameters(peer);
83 startButton.disabled = true;
84 }
85
86 // Create peer
87 // Determine role from GET parameter (?controlling=true|false)
88 let peer = createPeer(getURLParameter('controlling'));
89 startButton.disabled = false;
90 </script>
91</body>
92</html>