| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>ORTC/WebRTC Interop Data Channel Example</title> |
| </head> |
| <style> |
| textarea { |
| } |
| </style> |
| <body> |
| <textarea cols="120" rows="20" id="local-parameters" onclick="this.select();" readonly></textarea> |
| <textarea cols="120" rows="20" id="remote-parameters"></textarea><br /> |
| <button type="button" onclick="start(peer);" id="start" disabled>Start</button> |
| |
| <script type="text/javascript" src="sdp.js"></script> |
| <script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script> |
| <script type="text/javascript" src="webrtc-rawrtc.js"></script> |
| <script type="text/javascript"> |
| 'use strict'; |
| |
| let localParameters = document.getElementById('local-parameters'); |
| let remoteParameters = document.getElementById('remote-parameters'); |
| let startButton = document.getElementById('start'); |
| |
| function getURLParameter(name) { |
| return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search) || [null, ''])[1].replace(/\+/g, '%20')) || null; |
| } |
| |
| function setRemoteParameters(peer) { |
| // Parse and apply the remote parameters |
| let parameters = JSON.parse(remoteParameters.value); |
| console.log('Remote parameters:', parameters); |
| peer.setRemoteParameters(parameters) |
| .then((parameters) => { |
| // Generate local parameters if controlled |
| if (peer instanceof ControlledPeer) { |
| getLocalParameters(peer); |
| } |
| }) |
| .catch((error) => { |
| console.error(error); |
| }); |
| }; |
| |
| function getLocalParameters(peer) { |
| // Generate and show the local parameters |
| peer.getLocalParameters() |
| .then((parameters) => { |
| console.log('Local parameters:', parameters); |
| localParameters.value = JSON.stringify(parameters); |
| }); |
| } |
| |
| function createPeer(controllingParameter) { |
| let controlling = controllingParameter == 'true' || controllingParameter == '1'; |
| console.log('Role: ICE-Controll' + (controlling ? 'ing' : 'ed')); |
| |
| // Create peer depending on the role |
| let peer = controlling ? new ControllingPeer() : new ControlledPeer(); |
| peer.createPeerConnection(); |
| let cat = peer.createDataChannel(peer.pc.createDataChannel('cat-noises', { |
| ordered: true, |
| negotiated: true, |
| id: 0 |
| })); |
| peer.createDataChannel(); |
| |
| // Create local parameters if we are the controlling peer. |
| // Keep in mind this still uses offer/answer in the background, thus this |
| // limitation which does not exist for ORTC but does for WebRTC. |
| if (controlling) { |
| getLocalParameters(peer); |
| } |
| |
| return peer; |
| } |
| |
| function start(peer) { |
| // Apply remote parameters |
| // For the controlled peer, this will automatically generate local parameters |
| setRemoteParameters(peer); |
| startButton.disabled = true; |
| } |
| |
| // Create peer |
| // Determine role from GET parameter (?controlling=true|false) |
| let peer = createPeer(getURLParameter('controlling')); |
| startButton.disabled = false; |
| </script> |
| </body> |
| </html> |