| Index: chrome/test/data/webrtc/manual/peerconnection-multi.html
|
| diff --git a/chrome/test/data/webrtc/manual/peerconnection-multi.html b/chrome/test/data/webrtc/manual/peerconnection-multi.html
|
| deleted file mode 100644
|
| index e90f7a6d89db546ffe4f95270958e0ec8027976e..0000000000000000000000000000000000000000
|
| --- a/chrome/test/data/webrtc/manual/peerconnection-multi.html
|
| +++ /dev/null
|
| @@ -1,282 +0,0 @@
|
| -<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
| -<!--
|
| - Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
| -
|
| - Use of this source code is governed by a BSD-style license
|
| - that can be found in the LICENSE file in the root of the source
|
| - tree. An additional intellectual property rights grant can be found
|
| - in the file PATENTS. All contributing project authors may
|
| - be found in the AUTHORS file in the root of the source tree.
|
| --->
|
| -<html>
|
| -<head>
|
| - <title>WebRTC Multi-PeerConnection Test</title>
|
| - <script type="text/javascript">
|
| - // This file can create an arbitrary number of peer connection calls, each
|
| - // with an arbitrary number of auto-echoing data channels. It can run with
|
| - // two separate cameras.
|
| -
|
| - // Our two local video / audio streams.
|
| - var gLocalStream1 = null;
|
| - var gLocalStream2 = null;
|
| -
|
| - // The number of remote view windows (2x number of calls).
|
| - var gNumRemoteViews = 0;
|
| -
|
| - // Maps connection id -> { connection1, connection2 }.
|
| - var gAllConnections = [];
|
| - var gNumConnections = 0;
|
| -
|
| - // Maps data channel id -> sending channel.
|
| - // Note: there can be many data channels per connection id.
|
| - var gSendingDataChannels = [];
|
| - var gTotalNumSendChannels = 0;
|
| -
|
| - function startTest() {
|
| - navigator.webkitGetUserMedia(
|
| - {video: true, audio: true},
|
| - function(localStream) {
|
| - gLocalStream1 = localStream;
|
| - play(localStream, 'local-view-1');
|
| - },
|
| - getUserMediaFailedCallback);
|
| - navigator.webkitGetUserMedia(
|
| - {video: true, audio: true},
|
| - function(localStream) {
|
| - gLocalStream2 = localStream;
|
| - play(localStream, 'local-view-2');
|
| - },
|
| - getUserMediaFailedCallback);
|
| - }
|
| -
|
| - function playStreamInNewRemoteView(stream, peerNumber) {
|
| - console.log('Remote stream to connection ' + peerNumber +
|
| - ': ' + stream.label);
|
| - gNumRemoteViews++;
|
| - var viewName = 'remote-view-' + gNumRemoteViews;
|
| - addRemoteView(viewName, peerNumber);
|
| - play(stream, viewName);
|
| - }
|
| -
|
| - function addRemoteView(elementName, peerNumber) {
|
| - var remoteViews = $('remote-views-' + peerNumber);
|
| - remoteViews.innerHTML +=
|
| - '<tr><td><video width="320" height="240" id="' + elementName + '" ' +
|
| - 'autoplay="autoplay"></video></td></tr>';
|
| - }
|
| -
|
| - function play(stream, videoElement) {
|
| - var streamUrl = URL.createObjectURL(stream);
|
| - $(videoElement).src = streamUrl;
|
| - }
|
| -
|
| - function getUserMediaFailedCallback(error) {
|
| - console.log('getUserMedia request failed with code ' + error.code);
|
| - }
|
| -
|
| - function call() {
|
| - connection1 = new webkitRTCPeerConnection(null,
|
| - {optional:[{RtpDataChannels: true}]});
|
| - connection1.addStream(gLocalStream1);
|
| -
|
| - connection2 = new webkitRTCPeerConnection(
|
| - null, {optional:[{RtpDataChannels: true}]});
|
| - connection2.addStream(gLocalStream2);
|
| - connection2.onicecandidate = function(event) {
|
| - if (event.candidate) {
|
| - var candidate = new RTCIceCandidate(event.candidate);
|
| - connection1.addIceCandidate(candidate);
|
| - }
|
| - };
|
| - connection1.onicecandidate = function(event) {
|
| - if (event.candidate) {
|
| - console.log('Ice candidate: ' + event.candidate);
|
| - var candidate = new RTCIceCandidate(event.candidate);
|
| - connection2.addIceCandidate(candidate);
|
| - }
|
| - };
|
| - connection1.onaddstream = function(event) {
|
| - playStreamInNewRemoteView(event.stream, 1);
|
| - //addDataChannelAnchor(connection1, connection2);
|
| - };
|
| - connection2.onaddstream = function(event) {
|
| - playStreamInNewRemoteView(event.stream, 2);
|
| - };
|
| - // TODO(phoglund): hack to work around
|
| - // https://code.google.com/p/webrtc/issues/detail?id=1203. When it is fixed,
|
| - // uncomment the negotiate call, remove addDataChannel and uncomment in
|
| - // connection1.onaddstream. Also remove the notice at the top of the HTML!
|
| - // negotiate(connection1, connection2);
|
| - addDataChannelAnchor(connection1, connection2);
|
| - }
|
| -
|
| - function negotiate(connection1, connection2) {
|
| - connection1.createOffer(function(offer) {
|
| - connection1.setLocalDescription(offer);
|
| - connection2.setRemoteDescription(offer);
|
| - connection2.createAnswer(function(answer) {
|
| - console.log('Created answer ' + answer);
|
| - connection2.setLocalDescription(answer);
|
| - connection1.setRemoteDescription(answer);
|
| - });
|
| - });
|
| - }
|
| -
|
| - function addDataChannelAnchor(connection1, connection2) {
|
| - var connectionId = gNumConnections++;
|
| - gAllConnections[connectionId] = { connection1: connection1,
|
| - connection2: connection2 };
|
| - addOneAnchor(1, connectionId);
|
| - addOneAnchor(2, connectionId);
|
| - }
|
| -
|
| - function makeDataChannelAnchorName(peerId, connectionId) {
|
| - return 'data-channels-peer' + peerId + '-' + connectionId;
|
| - }
|
| -
|
| - // This adds a target table we'll add our input fields to later.
|
| - function addOneAnchor(peerId, connectionId) {
|
| - var newButtonId = 'add-data-channel-' + connectionId;
|
| - var remoteViewContainer = 'remote-views-' + peerId;
|
| - $(remoteViewContainer).innerHTML +=
|
| - '<tr><td><button id="' + newButtonId + '" ' +
|
| - 'onclick="addDataChannel(' + connectionId + ')">' +
|
| - ' Add Echoing Data Channel</button></td></tr>';
|
| -
|
| - var anchorName = makeDataChannelAnchorName(peerId, connectionId);
|
| - $(remoteViewContainer).innerHTML +=
|
| - '<tr><td><table id="' + anchorName + '"></table></td></tr>';
|
| - }
|
| -
|
| - // Called by clicking Add Echoing Data Channel.
|
| - function addDataChannel(connectionId) {
|
| - var dataChannelId = gTotalNumSendChannels++;
|
| -
|
| - var peer1SinkId = addDataChannelSink(1, connectionId, dataChannelId);
|
| - var peer2SinkId = addDataChannelSink(2, connectionId, dataChannelId);
|
| - var connections = gAllConnections[connectionId];
|
| -
|
| - configureChannels(connections.connection1, connections.connection2,
|
| - peer1SinkId, peer2SinkId, dataChannelId);
|
| -
|
| - // Add the field the user types in, and a
|
| - // dummy field so everything lines up nicely.
|
| - addDataChannelSource(1, connectionId, dataChannelId);
|
| - addDisabledInputField(2, connectionId, '(the above is echoed)');
|
| -
|
| - negotiate(connections.connection1, connections.connection2);
|
| - }
|
| -
|
| - function configureChannels(connection1, connection2, targetFor1, targetFor2,
|
| - dataChannelId) {
|
| - // Label the channel so we know where to send the data later in dispatch.
|
| - sendChannel = connection1.createDataChannel(
|
| - targetFor2, { reliable : false });
|
| - sendChannel.onmessage = function(messageEvent) {
|
| - $(targetFor1).value = messageEvent.data;
|
| - }
|
| -
|
| - gSendingDataChannels[dataChannelId] = sendChannel;
|
| -
|
| - connection2.ondatachannel = function(event) {
|
| - // The channel got created by a message from a sending channel: hook this
|
| - // new receiver channel up to dispatch and then echo any messages.
|
| - event.channel.onmessage = dispatchAndEchoDataMessage;
|
| - }
|
| - }
|
| -
|
| - function addDataChannelSink(peerNumber, connectionId, dataChannelId) {
|
| - var sinkId = 'data-sink-peer' + peerNumber + '-' + dataChannelId;
|
| - var anchor = $(makeDataChannelAnchorName(peerNumber, connectionId));
|
| - anchor.innerHTML +=
|
| - '<tr><td><input type="text" id="' + sinkId + '" disabled/></td></tr>';
|
| - return sinkId;
|
| - }
|
| -
|
| - function addDataChannelSource(peerNumber, connectionId, dataChannelId) {
|
| - var sourceId = 'data-source-peer' + peerNumber + '-' + dataChannelId;
|
| - var anchor = $(makeDataChannelAnchorName(peerNumber, connectionId));
|
| - anchor.innerHTML +=
|
| - '<tr><td><input type="text" id="' + sourceId + '"' +
|
| - ' onchange="userWroteSomethingIn(\'' + sourceId + '\', ' +
|
| - dataChannelId + ');"/></td></tr>';
|
| - }
|
| -
|
| - function userWroteSomethingIn(sourceId, dataChannelId) {
|
| - var source = $(sourceId);
|
| - var dataChannel = gSendingDataChannels[dataChannelId];
|
| - dataChannel.send(source.value);
|
| - }
|
| -
|
| - function addDisabledInputField(peerNumber, connectionId, text) {
|
| - var anchor = $(makeDataChannelAnchorName(peerNumber, connectionId));
|
| - anchor.innerHTML +=
|
| - '<tr><td><input type="text" value="' + text + '" disabled/></td></tr>';
|
| - }
|
| -
|
| - function dispatchAndEchoDataMessage(messageEvent) {
|
| - // Since we labeled the channel earlier, we know to which input element
|
| - // we should send the data.
|
| - var dataChannel = messageEvent.currentTarget;
|
| - var targetInput = $(dataChannel.label);
|
| - targetInput.value = messageEvent.data;
|
| - dataChannel.send('echo: ' + messageEvent.data);
|
| - }
|
| -
|
| - window.onload = function() {
|
| - startTest();
|
| - }
|
| -
|
| - $ = function(id) {
|
| - return document.getElementById(id);
|
| - };
|
| - </script>
|
| -</head>
|
| -<body>
|
| - <table border="0">
|
| - <tr>
|
| - <td colspan="2">
|
| - Notes:
|
| - <ul>
|
| - <li>Due to https://code.google.com/p/webrtc/issues/detail?id=1203,
|
| - you must create a data channel to actually get a call negotiated. Add
|
| - one call at a time and click "add echoing data channel" for each and
|
| - you'll be fine.</li>
|
| - <li>For unknown reasons, adding a new data channel will clear the
|
| - input field contents for all other channels on the same call. This is
|
| - not the data channel's fault though.</li>
|
| - </ul>
|
| - </td>
|
| - </tr>
|
| - <tr>
|
| - <td>Local Preview for Peer 1</td>
|
| - <td>Local Preview for Peer 2</td>
|
| - </tr>
|
| - <tr>
|
| - <td><video width="320" height="240" id="local-view-1"
|
| - autoplay="autoplay"></video></td>
|
| - <td><video width="320" height="240" id="local-view-2"
|
| - autoplay="autoplay"></video></td>
|
| - </tr>
|
| - <tr>
|
| - <td><button id="add-call" onclick="call();">Add Call</button></td>
|
| - </tr>
|
| - <tr>
|
| - <td>
|
| - <table id="remote-views-1">
|
| - <tr>
|
| - <td>Remote (Incoming to Peer 1)</td>
|
| - </tr>
|
| - </table>
|
| - </td>
|
| - <td>
|
| - <table id="remote-views-2">
|
| - <tr>
|
| - <td>Remote (Incoming to Peer 2)</td>
|
| - </tr>
|
| - </table>
|
| - </td>
|
| - </tr>
|
| - </table>
|
| -</body>
|
| -</html>
|
|
|