288 lines
16 KiB
HTML
288 lines
16 KiB
HTML
<!-- Copyright Epic Games, Inc. All Rights Reserved. -->
|
|
<!DOCTYPE HTML>
|
|
<html>
|
|
|
|
<head>
|
|
<link rel="shortcut icon" href="/images/favicon.ico" type="image/x-icon">
|
|
<link rel="icon" type="image/png" sizes="96x96" href="/images/favicon-96x96.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32.png">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16.png">
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter&display=swap" rel="stylesheet">
|
|
<link type="text/css" rel="stylesheet" href="player.css">
|
|
<script type="text/javascript">
|
|
// This horrible hack is to make Fippo's adapter-latest.js work with Firefox when not on https
|
|
// because FF does not let you access navigator.mediaDevices when on http.
|
|
var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
|
|
if (isFirefox) {
|
|
window.navigator.mozGetUserMedia = function () { };
|
|
if (window.navigator.mediaDevices === undefined) {
|
|
navigator.mediaDevices = {};
|
|
navigator.mediaDevices.getSupportedConstraints = function () { return {}; };
|
|
navigator.mediaDevices.getUserMedia = function () { return {}; };
|
|
}
|
|
}
|
|
</script>
|
|
<script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
|
|
<script type="text/javascript" src="scripts/webRtcPlayer.js"></script>
|
|
<script type="text/javascript" src="scripts/app.js"></script>
|
|
<script>
|
|
inputOptions.controlScheme = ControlSchemeType.HoveringMouse;
|
|
inputOptions.fakeMouseWithTouches = true;
|
|
</script>
|
|
</head>
|
|
|
|
<body onload="load()">
|
|
<div id="playerUI" class="noselect">
|
|
<div id="player"></div>
|
|
<div id="overlay">
|
|
<div id="controls">
|
|
<button class="tooltip" onclick="fullscreen()" id="fullscreen-btn">
|
|
<object data="images/Minimize.svg" type="image/svg+xml" id="minimize"></object>
|
|
<object data="images/Maximize.svg" type="image/svg+xml" id="maximize"></object>
|
|
<span class="tooltiptext">Fullscreen</span>
|
|
</button>
|
|
<button class="tooltip" id="settingsBtn">
|
|
<object data="images/Settings.svg" type="image/svg+xml"></object>
|
|
<span class="tooltiptext">Settings</span>
|
|
</button>
|
|
<button class="tooltip" id="statsBtn">
|
|
<object data="images/Info.svg" type="image/svg+xml"></object>
|
|
<span class="tooltiptext">Information</span>
|
|
</button>
|
|
|
|
</div>
|
|
<div id="unrealengine">
|
|
<p></p>
|
|
<svg viewBox="0 0 1204.105 74.011" xmlns="http://www.w3.org/2000/svg">
|
|
<g id="svgGroup" stroke-linecap="round" fill-rule="evenodd" font-size="9pt" stroke="#ffffff"
|
|
stroke-width="0.25mm" fill="#ffffff" style="stroke:#ffffff;stroke-width:0.25mm;fill:#ffffff">
|
|
<path
|
|
d="M 894.605 74.006 L 921.305 74.006 C 942.427 74.006 953.413 73.292 956.313 60.527 A 37.848 37.848 0 0 0 957.105 52.206 L 957.105 31.606 L 907.305 31.606 L 907.305 46.606 L 934.905 46.606 L 934.905 48.706 C 934.905 53.442 932.251 55.385 928.738 56.147 A 26.156 26.156 0 0 1 923.305 56.606 L 899.605 56.606 A 39.408 39.408 0 0 1 894.638 56.344 C 888.593 55.565 886.231 52.853 885.654 45.747 A 52.88 52.88 0 0 1 885.505 41.506 L 885.505 32.506 A 48.028 48.028 0 0 1 885.738 27.377 C 886.556 19.865 889.695 17.689 897.793 17.433 A 57.321 57.321 0 0 1 899.605 17.406 L 923.705 17.406 A 38.323 38.323 0 0 1 927.889 17.588 C 932.328 18.085 934.835 19.818 934.904 25.273 A 18.461 18.461 0 0 1 934.905 25.506 L 956.705 25.506 L 956.705 23.206 A 36.235 36.235 0 0 0 955.47 12.587 C 953.178 5.214 946.987 0.624 931.363 0.064 A 93.813 93.813 0 0 0 928.005 0.006 L 894.605 0.006 C 874.839 0.006 862.985 4.89 862.71 25.469 A 55.259 55.259 0 0 0 862.705 26.206 L 862.705 47.806 A 39.6 39.6 0 0 0 863.741 57.358 C 866.906 70.059 877.192 73.722 892.685 73.99 A 111.289 111.289 0 0 0 894.605 74.006 Z M 323.405 73.206 L 403.905 73.206 L 403.905 55.806 L 345.605 55.806 L 345.605 44.206 L 399.605 44.206 L 399.605 29.206 L 345.605 29.206 L 345.605 17.606 L 402.605 17.606 L 402.605 0.806 L 323.405 0.806 L 323.405 73.206 Z M 656.905 73.206 L 737.405 73.206 L 737.405 55.806 L 679.105 55.806 L 679.105 44.206 L 733.105 44.206 L 733.105 29.206 L 679.105 29.206 L 679.105 17.606 L 736.105 17.606 L 736.105 0.806 L 656.905 0.806 L 656.905 73.206 Z M 1123.605 73.206 L 1204.105 73.206 L 1204.105 55.806 L 1145.805 55.806 L 1145.805 44.206 L 1199.805 44.206 L 1199.805 29.206 L 1145.805 29.206 L 1145.805 17.606 L 1202.805 17.606 L 1202.805 0.806 L 1123.605 0.806 L 1123.605 73.206 Z M 106.205 73.206 L 128.405 73.206 L 128.405 20.606 L 128.605 20.606 L 170.305 73.206 L 204.705 73.206 L 204.705 0.806 L 182.505 0.806 L 182.505 53.406 L 182.305 53.406 L 140.605 0.806 L 106.205 0.806 L 106.205 73.206 Z M 750.805 73.206 L 773.005 73.206 L 773.005 20.606 L 773.205 20.606 L 814.905 73.206 L 849.305 73.206 L 849.305 0.806 L 827.105 0.806 L 827.105 53.406 L 826.905 53.406 L 785.205 0.806 L 750.805 0.806 L 750.805 73.206 Z M 1010.105 73.206 L 1032.305 73.206 L 1032.305 20.606 L 1032.505 20.606 L 1074.205 73.206 L 1108.605 73.206 L 1108.605 0.806 L 1086.405 0.806 L 1086.405 53.406 L 1086.205 53.406 L 1044.505 0.806 L 1010.105 0.806 L 1010.105 73.206 Z M 29.705 74.006 L 61.505 74.006 A 51.732 51.732 0 0 0 72.484 72.955 C 82.691 70.728 88.531 64.939 90.473 55.381 A 40.134 40.134 0 0 0 91.205 47.406 L 91.205 0.806 L 69.005 0.806 L 69.005 42.606 C 69.005 51.405 65.987 55.082 57.762 55.385 A 31.364 31.364 0 0 1 56.605 55.406 L 34.605 55.406 A 22.943 22.943 0 0 1 30.082 55.013 C 24.736 53.93 22.488 50.538 22.231 43.95 A 34.441 34.441 0 0 1 22.205 42.606 L 22.205 0.806 L 0.005 0.806 L 0.005 47.406 C 0.005 64.841 8.73 73.457 27.816 73.981 A 68.853 68.853 0 0 0 29.705 74.006 Z M 219.705 73.206 L 241.905 73.206 L 241.905 54.406 L 276.805 54.406 A 18.122 18.122 0 0 1 280.084 54.663 C 284.425 55.469 285.905 58.272 285.905 64.506 L 285.905 73.206 L 308.105 73.206 L 308.105 60.906 C 308.105 49.006 302.605 46.106 296.005 44.906 L 296.005 44.706 A 22.978 22.978 0 0 0 300.937 43.003 C 305.503 40.745 307.44 37.183 308.108 32.151 A 40.124 40.124 0 0 0 308.405 26.906 L 308.405 22.306 A 33.46 33.46 0 0 0 307.248 12.853 C 305.018 5.341 299.196 0.806 286.705 0.806 L 219.705 0.806 L 219.705 73.206 Z M 410.205 73.206 L 435.005 73.206 L 441.505 60.406 L 486.505 60.406 L 493.405 73.206 L 518.105 73.206 L 478.305 0.806 L 449.405 0.806 L 410.205 73.206 Z M 526.005 73.206 L 598.105 73.206 L 598.105 54.606 L 548.205 54.606 L 548.205 0.806 L 526.005 0.806 L 526.005 73.206 Z M 971.705 73.206 L 993.905 73.206 L 993.905 0.806 L 971.705 0.806 L 971.705 73.206 Z M 241.905 18.806 L 276.605 18.806 A 34.237 34.237 0 0 1 280.146 18.959 C 283.795 19.344 285.876 20.558 286.556 23.711 A 12.861 12.861 0 0 1 286.805 26.406 L 286.805 28.806 A 12.128 12.128 0 0 1 286.485 31.774 C 285.685 34.926 283.316 36.406 278.605 36.406 L 241.905 36.406 L 241.905 18.806 Z M 463.805 17.606 L 478.205 44.806 L 449.805 44.806 L 463.805 17.606 Z" />
|
|
</g>
|
|
</svg>
|
|
</div>
|
|
<div id="connection" class="tooltip">
|
|
<svg version="1.1" id="connectionStrength" xmlns="http://www.w3.org/2000/svg"
|
|
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 494.45 494.45"
|
|
style="enable-background:new 0 0 494.45 494.45;" xml:space="preserve">
|
|
<circle id="dot" cx="247.125" cy="398.925" r="35.3" />
|
|
|
|
<path id="middle"
|
|
d="M395.225,277.325c-6.8,0-13.5-2.6-18.7-7.8c-71.4-71.3-187.4-71.3-258.8,0c-10.3,10.3-27.1,10.3-37.4,0
|
|
s-10.3-27.1,0-37.4c92-92,241.6-92,333.6,0c10.3,10.3,10.3,27.1,0,37.4C408.725,274.725,401.925,277.325,395.225,277.325z" />
|
|
|
|
<path id="outer" d="M467.925,204.625c-6.8,0-13.5-2.6-18.7-7.8c-111.5-111.4-292.7-111.4-404.1,0c-10.3,10.3-27.1,10.3-37.4,0
|
|
s-10.3-27.1,0-37.4c64-64,149-99.2,239.5-99.2s175.5,35.2,239.5,99.2c10.3,10.3,10.3,27.1,0,37.4
|
|
C481.425,202.025,474.625,204.625,467.925,204.625z" />
|
|
|
|
<path id="inner" d="M323.625,348.825c-6.8,0-13.5-2.6-18.7-7.8c-15.4-15.4-36-23.9-57.8-23.9s-42.4,8.5-57.8,23.9
|
|
c-10.3,10.3-27.1,10.3-37.4,0c-10.3-10.3-10.3-27.1,0-37.4c25.4-25.4,59.2-39.4,95.2-39.4s69.8,14,95.2,39.5
|
|
c10.3,10.3,10.3,27.1,0,37.4C337.225,346.225,330.425,348.825,323.625,348.825z" />
|
|
|
|
|
|
|
|
|
|
</svg>
|
|
<span class="tooltiptext" id="qualityText">Not connected</span>
|
|
</div>
|
|
<div class="panel-wrap" id="settings-panel">
|
|
<div class="panel">
|
|
<div id="heading">Settings</div>
|
|
<div id="close" onclick="settingsClicked()"></div>
|
|
<div id="content">
|
|
<div id="fillWindow" class="setting">
|
|
<div class="settings-text">Enlarge display to fill window</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="enlarge-display-to-fill-window-tgl" class="tgl tgl-flat" checked>
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="qualityControlOwnership" class="setting">
|
|
<div class="settings-text">Is quality controller?</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="quality-control-ownership-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="matchViewportResolution" class="setting">
|
|
<div class="settings-text">Match viewport resolution</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="match-viewport-res-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="offerToReceive" class="setting">
|
|
<div class="settings-text">Offer To Receive</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="offer-receive-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="preferSFU" class="setting">
|
|
<div class="settings-text">Prefer SFU</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="prefer-sfu-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="useMic" class="setting">
|
|
<div class="settings-text">Use microphone</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="use-mic-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="forceMonoAudio" class="setting">
|
|
<div class="settings-text">Force mono audio</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="force-mono-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="forceTURN" class="setting">
|
|
<div class="settings-text">Force TURN</div>
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="force-turn-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</div>
|
|
<div id="toggleControl" class="setting">
|
|
<div class="settings-text" id="control-scheme-text">Control Scheme</div>
|
|
<label class="btn-overlay">
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="control-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</label>
|
|
</div>
|
|
|
|
<div id="toggleCursor" class="setting">
|
|
<div class="settings-text" id="cursor-text">Hide Browser Cursor</div>
|
|
<label class="btn-overlay">
|
|
<label class="tgl-switch">
|
|
<input type="checkbox" id="cursor-tgl" class="tgl tgl-flat">
|
|
<div class="tgl-slider"></div>
|
|
</label>
|
|
</label>
|
|
</div>
|
|
<div id="showFPS" class="setting">
|
|
<div class="settings-text">Show FPS</div>
|
|
<label class="btn-overlay">
|
|
<input type="button" id="show-fps-button" class="overlay-button btn-flat" value="Toggle">
|
|
</label>
|
|
</div>
|
|
<div id="keyframeRequest" class="setting">
|
|
<div class="settings-text">Request KeyFrame</div>
|
|
<label class="btn-overlay">
|
|
<input type="button" id="request-keyframe-button" class="overlay-button btn-flat" value="Request">
|
|
</label>
|
|
</div>
|
|
<section id="encoderSettings">
|
|
<div id="encoderSettingsHeader" class="settings-text">
|
|
<div>Encoder Settings</div>
|
|
</div>
|
|
<div id="encoderParamsContainer" class="collapse">
|
|
<div class="form-group">
|
|
<label for="encoder-min-qp-text">Min QP</label>
|
|
<input type="number" class="form-control" id="encoder-min-qp-text" value="0" min="0"
|
|
max="51" />
|
|
<label for="encoder-max-qp-text">Max QP</label>
|
|
<input type="number" class="form-control" id="encoder-max-qp-text" value="51" min="0"
|
|
max="51" />
|
|
<br>
|
|
<input id="encoder-params-submit" class="overlay-button btn-flat" type="button"
|
|
value="Apply">
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="webRTCSettings">
|
|
<div id="webRTCSettingsHeader" class="settings-text">
|
|
<div>WebRTC Settings</div>
|
|
</div>
|
|
<div id="webrtcParamsContainer" class="collapse">
|
|
<div class="form-group">
|
|
<label for="webrtc-fps-text">FPS</label>
|
|
<input type="number" class="form-control" id="webrtc-fps-text" value="60" min="1"
|
|
max="999" />
|
|
<label for="webrtc-min-bitrate-text">Min bitrate (kbps)</label>
|
|
<input type="number" class="form-control" id="webrtc-min-bitrate-text" value="0" min="0"
|
|
max="100000" />
|
|
<label for="webrtc-max-bitrate-text">Max bitrate (kbps)</label>
|
|
<input type="number" class="form-control" id="webrtc-max-bitrate-text" value="0" min="0"
|
|
max="100000" />
|
|
<br>
|
|
<input id="webrtc-params-submit" class="overlay-button btn-flat" type="button"
|
|
value="Apply">
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section id="streamSettings">
|
|
<div id="streamSettingsHeader" class="settings-text">
|
|
<div>Stream Settings</div>
|
|
</div>
|
|
<div id="streamSettingsContainer" class="collapse">
|
|
<div class="form-group">
|
|
<div class="settings-text">Player stream</div>
|
|
<select class="form-control" id="stream-select"></select>
|
|
<div class="settings-text">Player track</div>
|
|
<select class="form-control" id="track-select"></select>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
<br>
|
|
<section id="connectionSettings">
|
|
<div id="connectionHeader" class="settings-text">
|
|
<div>Stream Settings</div>
|
|
</div>
|
|
<div id="connectionContainer" class="collapse">
|
|
<div class="setting">
|
|
<div class="settings-text"></div>
|
|
<label class="btn-overlay">
|
|
<input type="button" id="restart-stream-button" class="overlay-button btn-flat" value="Restart stream">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="panel-wrap" id="stats-panel">
|
|
<div class="panel">
|
|
<div id="heading">Information</div>
|
|
<div id="close" onclick="statsClicked()"></div>
|
|
<div id="content">
|
|
<section id="statsPanel">
|
|
<div class="setting settings-text">
|
|
<div>Session Stats</div>
|
|
</div>
|
|
<div id="statsContainer" class="statsContainer">
|
|
<div id="stats" class="stats"></div>
|
|
</div>
|
|
</section>
|
|
<br>
|
|
<section id="latencyTest">
|
|
<div class="setting">
|
|
<div class="settings-text">
|
|
<div>Latency Report</div>
|
|
</div>
|
|
<label class="btn-overlay">
|
|
<input type="button" id="test-latency-button" class="overlay-button btn-flat"
|
|
value="Get Report">
|
|
</label>
|
|
</div>
|
|
<div id="latencyStatsContainer" class="statsContainer">
|
|
<div id=LatencyStats class="stats">No report yet</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
|
|
</html> |