JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.min.js"></script>
<button id="btn">
  start demo
</button>
<pre id="log"></pre>

JavaScript

btn.onclick = e =>  {
  window.open('https://youtube.com', 'YouTube', 'width=1920,height=1080,scrollbars=no,status=0');
  btn.remove();
  log.textContent = "Please select 'YouTube' in opened prompt.";
  requestStream();
}

function requestStream() {
  navigator.mediaDevices
    .getUserMedia({
      video: {
        mediaSource: 'window'
      }
    })
    .then(streamToTexture)
    .then(startRenderer)
    .catch(e => log.textContent = 'failed to request window stream, be sure you are using latest Firefox.')
}

function streamToTexture(stream) {
  const video = document.createElement('video');
  video.srcObject = stream;
  video.play();
  videoTexture = new THREE.VideoTexture(video);
  videoTexture.minFilter = THREE.LinearFilter;
  videoTexture.magFilter = THREE.LinearFilter;
  return videoTexture;
}

function startRenderer(videoTexture) {
  var scene = new THREE.Scene();
  var camera = new THREE.PerspectiveCamera(50, 500 / 400, 0.1, 1000);

  var renderer = new THREE.WebGLRenderer();
  renderer.setSize(500, 400);
  document.body.appendChild(renderer.domElement);

  var geometry = new THREE.SphereGeometry(3, 50, 50, 0, Math.PI * 2, 0, Math.PI * 2);
  var material = new THREE.MeshPhongMaterial({
    map: videoTexture,
    color: 0xffffff
  });
  var cube = new THREE.Mesh(geometry, material);
  scene.add(cube);

  var lights = [];
  lights[0] = new THREE.PointLight(0xffffff, 1, 0);
  lights[1] = new THREE.PointLight(0xffffff, 1, 0);
  lights[2] = new THREE.PointLight(0xffffff, 1, 0);

  lights[0].position.set(0, 200, 0);
  lights[1].position.set(100, 200, 100);
  lights[2].position.set(-100, -200, -100);

  scene.add(lights[0]);
  scene.add(lights[1]);
  scene.add(lights[2]);

  camera.position.z = 10;
  var render = function() {
    requestAnimationFrame(render);

    cube.rotation.y += 0.01;

    renderer.render(scene, camera);
  };

  render();

}