如何访问navigator.getUserMedia() ?

How do I access navigator.getUserMedia()?

本文关键字:navigator getUserMedia 访问 何访问      更新时间:2023-09-26

我目前正在运行Chrome 11,并试图访问getUserMedia的HTML5原生音频和视频流支持,但我得到一个错误说,navigator.getUserMedia是未定义的。如果它不受支持,我如何访问它,或者我需要等到Chrome合并它?

这是我用来测试getUserMedia的代码,我发现

 <h1>Snapshot Kiosk</h1>
 <section id="splash">
  <p id="errorMessage">Loading...</p>
 </section>
 <section id="app" hidden>
  <p><video id="monitor" autoplay></video> <canvas id="photo"></canvas>
  <p><input type=button value="&#x1F4F7;" onclick="snapshot()">
 </section>
 <script>
  navigator.getUserMedia('video user', gotStream, noStream);
  var video = document.getElementById('monitor');
  var canvas = document.getElementById('photo');
  function gotStream(stream) {
    video.src = URL.getObjectURL(stream);
    video.onerror = function () {
      stream.stop();
      noStream();
    }
    video.onloadedmetadata = function () {
      canvas.width = video.videoWidth;
      canvas.height = video.videoHeight;
      document.getElementById('splash').hidden = true;
      document.getElementById('app').hidden = false;
    }
  }
  function noStream() {
    document.getElementById('errorMessage').textContent = 'No camera available.';
  }
  function snapshot() {
    canvas.getContext('2d').drawImage(video, 0, 0);
  }
 </script>

最新的opera桌面版本支持getUserMedia()详见:http://labs.opera.com/news/2011/10/19/

这只是一个等待游戏,其他浏览器实现这一点。现在歌剧有了支持,另一个应该很快跟上。

自从昨晚(2012年5月3日)getUserMedia()在Chrome金丝雀接受一个对象不是字符串。

要尝试一下,可以从控制台在任何带有video元素的页面(比如这个页面)上运行以下代码:
navigator.webkitGetUserMedia(
  {"video": true, "audio": true}, 
  function(s){
    document.querySelector('video').src = 
      window.webkitURL.createObjectURL(s);
  }, 
  function(e){console.log(e);}
);

我认为在最新的chrome开发(12.0.742.16 dev)中有一个存根方法,但我无法让它在Mac OSX上做任何事情。至少我以为我看到了。我刚检查过,这个方法似乎已经不在那里了。以下是实现getUserMedia的webkit bug报告:https://bugs.webkit.org/show_bug.cgi?id=56586

我认为目前唯一有效的实现是在Android的Opera中。http://my.opera.com/core/blog/2011/03/23/webcam-orientation-preview

chrome/webkit方法是webkitGetUserMedia,但它还没有实现。

Chrome开发通道刚刚添加了WebRTC支持,所以现在你在这里问的实际上变得合理。参见:https://groups.google.com/forum/# !主题/discuss-webrtc LuY7zYLA8sA

基本上,您必须使用webkit前缀:webkitGetUserMedia(),尽管关于此方法的文档很少,但我目前正在尝试拼凑它的工作演示