【问题标题】:HTML5 getUserMedia() media sourcesHTML5 getUserMedia() 媒体源
【发布时间】:2013-08-05 15:08:53
【问题描述】:

我用 html5 创建了一个流媒体网络摄像头。目前我可以通过我的网络摄像头拍照,但我想知道是否可以从列表中选择媒体流设备,例如我有两个网络摄像头,我想选择要激活的网络摄像头。如何使用 html5 getUserMedia() 调用来做到这一点? 谢谢!

【问题讨论】:

    标签: html video webcam getusermedia


    【解决方案1】:

    可以获取网络摄像头列表

    <!DOCTYPE html>
          <head>
              <meta charset="utf-8">
              <meta http-equiv="X-UA-Compatible" content="IE=edge">
              <title>Video Camera List</title>
    
              <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js" ></script>
    
              <style type="text/css" media="screen">
                video {
              border:1px solid gray;
            }
          </style>
      </head>
      <body>
        <script>
          if (!MediaStreamTrack) document.body.innerHTML = '<h1>Incompatible Browser Detected. Try <strong style="color:red;">Chrome Canary</strong> instead.</h1>';
    
          var videoSources = [];
    
          MediaStreamTrack.getSources(function(media_sources) {
            console.log(media_sources);
        //  alert('media_sources : '+media_sources);
            media_sources.forEach(function(media_source){
              if (media_source.kind === 'video') {
                videoSources.push(media_source);
              }
            });
    
            getMediaSource(videoSources);
          });
    
          var get_and_show_media = function(id) {
            var constraints = {};
            constraints.video = {
              optional: [{ sourceId: id}]
            };
    
            navigator.webkitGetUserMedia(constraints, function(stream) {
              console.log('webkitGetUserMedia');
              console.log(constraints);
              console.log(stream);
    
              var mediaElement = document.createElement('video');
              mediaElement.src = window.URL.createObjectURL(stream);
              document.body.appendChild(mediaElement);
              mediaElement.controls = true;
              mediaElement.play();
    
            }, function (e) 
            {
           //   alert('Hii');  
              document.body.appendChild(document.createElement('hr'));
              var strong = document.createElement('strong');
              strong.innerHTML = JSON.stringify(e);
              alert('strong.innerHTML : '+strong.innerHTML);
              document.body.appendChild(strong);
            });
          };
    
          var getMediaSource = function(media) {
            console.log(media);
            media.forEach(function(media_source) {
              if (!media_source) return;
    
              if (media_source.kind === 'video') 
              {
                // add buttons for each media item
                var button = $('<input/>', {id: media_source.id, value:media_source.id, type:'submit'});
                $("body").append(button);
                // show video on click
                $(document).on("click", "#"+media_source.id, function(e){
                  console.log(e);
                  console.log(media_source.id);
                  get_and_show_media(media_source.id);
                });
              }
            });
          }
        </script>
      </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      在最新的 Chrome Canary (30.0.1587.2) 中,您似乎可以在chrome://flags 中启用设备枚举(看起来可能已经启用)并使用MediaStreamTrack.getSources API 来选择相机。

      请参阅此WebRTC bugmailing list post 了解更多详情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多