diff --git a/test_stream.html b/test_stream.html
index 8490d6e1..fc4e61f1 100644
--- a/test_stream.html
+++ b/test_stream.html
@@ -133,6 +133,7 @@
3 Video Source
+
@@ -464,6 +465,7 @@ async function createSession() {
markDone('dotSession');
document.getElementById('sourceBox').classList.remove('disabled');
document.getElementById('btnCamera').disabled = false;
+ document.getElementById('btnScreen').disabled = false;
document.getElementById('btnFile').disabled = false;
document.getElementById('faceDebugger').disabled = false;
document.getElementById('pipToggle').disabled = false;
@@ -588,6 +590,45 @@ async function startCamera() {
}
}
+async function startScreen() {
+ try {
+ var displayStream = await navigator.mediaDevices.getDisplayMedia({ video: { cursor: 'always' }, audio: true });
+ var audioStream = null;
+
+ try {
+ audioStream = await navigator.mediaDevices.getUserMedia({ audio: true });
+ } catch (e) {
+ log('mic not available, screen audio only', 'warn');
+ }
+
+ var tracks = displayStream.getVideoTracks();
+
+ if (audioStream) {
+ audioStream.getAudioTracks().forEach(function(track) { displayStream.addTrack(track); });
+ }
+
+ localStream = displayStream;
+ inputVideoSource = 'screen';
+ document.getElementById('inputVideo').srcObject = displayStream;
+ log('screen: ' + tracks[0].label, 'ok');
+
+ tracks[0].addEventListener('ended', function() {
+ log('screen sharing stopped', 'warn');
+ localStream = null;
+ document.getElementById('inputVideo').srcObject = null;
+
+ if (streaming) {
+ disconnect();
+ }
+ });
+
+ markDone('dotVideo');
+ checkConnectReady();
+ } catch (e) {
+ log('screen error: ' + e.message, 'error');
+ }
+}
+
document.getElementById('videoFile').addEventListener('change', function(event) {
var file = event.target.files[0];
if (!file) return;