带有`unsafelytreat-insecure-origin-as-secure`标志的无头Chrome上的mediadevice行为不一致

时间:2019-06-06 09:18:26

标签: javascript google-chrome webrtc chromium getusermedia

无头Chrome出现了一些看似不一致的行为。我正在尝试使用unsafely-treat-insecure-origin-as-secure标志在无头Chrome中测试localhost以外的域上的媒体设备。

问题是,当Chrome正常运行时,媒体设备可以按预期运行,但是当无头运行时,它们将无法加载。

我正在使用(media.html)进行测试的HTML:

<html>
  <head>
  </head>

  <body>
    <video id="video"></video>

    <script>
      navigator.mediaDevices.getUserMedia({audio: true, video: {width: 1280, height: 720}})
      .then(function(stream) {
        var video = document.querySelector('#video');
        video.srcObject = stream;

        video.onloadedmetadata = function() {
          video.play();
        };
      }).catch(function() {
        console.log("Failed to get media devices");
      });
    </script>
  </body>
</html>

运行Chrome时,以下结果可正常运行:

chromium --unsafely-treat-insecure-origin-as-secure=http://lvh.me:8000 --use-fake-device-for-media-stream --use-fake-ui-for-media-stream --remote-debugging-port=9222 "http://lvh.me:8000/media.html"

使用python2 -m SimpleHTTPServer 8000作为Web服务器。

但是,以无头模式运行Chrome:

chromium --headless --unsafely-treat-insecure-origin-as-secure=http://lvh.me:8000 --use-fake-device-for-media-stream --use-fake-ui-for-media-stream --remote-debugging-port=9222 "http://lvh.me:8000/media.html"

然后转到http://localhost:9222/,结果如下:

Uncaught TypeError: Cannot read property 'getUserMedia' of undefined
    at media.html:9

有人知道这种矛盾的根源吗?为什么无头的Chrome似乎不遵守unsafely-treat-insecure-origin-as-secure标志?