访问变量外部流回调函数 - Javascript,WebRTC

时间:2017-01-08 18:36:27

标签: javascript webrtc

我正在播放网络摄像头,并想要一种方法来停止网络摄像头。我试图通过在流媒体轨道上调用stop来阻止它,尽管我无法在回调函数之外到达轨道变量。如何在回调函数外部访问此函数中的跟踪?基本上是这样的:

function media(i) {
            navigator.getUserMedia = navigator.getUserMedia ||
                navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

            var constraints = {
                audio: false,
                video: true
            };
            var video = document.querySelectorAll("video")[i];
            var localstream;

            function successCallback(stream) {
                localstream = stream; // stream available to console
                var track = stream.getTracks()[0];
                if (window.URL) {
                    video.src = window.URL.createObjectURL(stream);
                } else {
                    video.src = stream;
                }

                track.stop();
            }

            function errorCallback(error) {
                console.log('navigator.getUserMedia error: ', error);
            }

            navigator.getUserMedia(constraints, successCallback, errorCallback);
        }

完整的实例如下所示:

df[df.Nation.str.startswith('U')]

1 个答案:

答案 0 :(得分:1)

track函数的范围外定义media。另外,请考虑在调用Blob URL时撤消video src设置的track.stop()

window.onload = function() {
  let track, url;

  function media(i) {
    navigator.getUserMedia = navigator.getUserMedia ||
      navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

    var constraints = {
      audio: false,
      video: true
    };
    var video = document.querySelectorAll("video")[i];
    var localstream;

    function successCallback(stream) {
      localstream = stream; // stream available to console
      track = stream.getTracks()[0];
      if (window.URL) {
        url = window.URL.createObjectURL(stream);
        video.src = url;
      } else {
        video.src = stream;
      }

      // track.stop();
    }

    function errorCallback(error) {
      console.log('navigator.getUserMedia error: ', error);
    }

    navigator.getUserMedia(constraints, successCallback, errorCallback);
  }

  var button = document.querySelector("button");
  button.onclick = function() {
    track.stop();
    URL.revokeObjectURL(url);
    // document.querySelectorAll("video")[i].src = "";
  }
  media(0)
}

plnkr https://plnkr.co/edit/FJhEBOCTRcE5NUUaEI7B?p=preview

相关问题