16

JavaScript関数を使用してWebカメラを閉じようとしています(Ajax応答を受け取った後に閉じる必要があります)が、ページを更新しないと閉じることができないようです。video.src = null、video.pause...などのように閉じるためのすべてのメソッドは、どのブラウザーでもまったく機能しません。独自の方法は、success 関数のパラメーターとして渡されたストリームを閉じることです。このオブジェクトを関数 success の外で使用して Web カメラを閉じる方法はありますか?

この質問は以前に尋ねられたことを知っています ( getUserMedia と RTCPeerConnection Chrome 25 を使用してウェブカメラを停止/閉じる) が、私のニーズは異なるため、この問題を解決するには助けが必要です

ありがとう!

編集:ウェブカメラを閉じようとしている私の作業コード:

navigator.getUserMedia = navigator.getUserMedia || navigator.mozGetUserMedia ||  navigator.webkitGetUserMedia || navigator.msGetUserMedia;
if(navigator.getUserMedia){
  var video_constraints = {
    mandatory: {
       maxHeight: 480,
       maxWidth: 640 
    },
    optional: []
  };
  var self = this;
  self.navigator.getUserMedia({
      audio: false,
      video: video_constraints
  }, self.onSuccess, onError);
}
else{
  alert('An error has occurred starting the webcam stream, please revise the instructions to fix the problem');
}

function onSuccess(stream) {
  var video = document.getElementById('webcam');

  if(navigator.webkitGetUserMedia || navigator.mozGetUserMedia){
      video.src = window.URL.createObjectURL(stream);
  }
  else if(navigator.msGetUserMedia){
      //future implementation over internet explorer
  }
  else{
      video.src = stream;
  }
  self.localStream = stream;
  video.play();
}
function onError() {
  alert('There has been a problem retrieving the streams - did you allow access?');
}

function closeWebcamConnection(){
  this.localStream.stop();
}

うーん..ここにコードを投稿するのは本当に複雑です XD

4

7 に答える 7

30

メソッドLocalMediaStreamを実行してオブジェクトを停止する必要があります。stop()私も同様の問題を抱えていました。あなたがする必要があるのは:

実行LocalMediaStreamの onSuccess コールバック関数でへの参照を保持します。getUserMedia()

var localStream;

onUserMediaSuccess = function(stream) {
   // attach to a video element
   ...
   // keep a reference
   localStream = stream;
};

必要に応じて LocalMediaStream を停止します。

localStream.stop(); 

詳細については、自分の質問(および回答) を参照してください。

于 2013-04-10T12:23:16.747 に答える
1

Chrome 49 で、ビデオ ストリーム トラック (前面カメラ) を閉じ、別のトラック (背面カメラ) を開く際に問題がありました。MediaStream.stop()はバージョン 45 から廃止され、 に置き換えられましたMediaStreamTrack.stop()。詳細については、 Sam Dutton による Google の開発者サイトへの投稿を参照してください。

于 2016-04-11T18:56:26.690 に答える
0

ブラウザのタブで赤い記号を取り除き、両方を無効にするには、これらのエラーのいずれかを受け取ったときにビデオオーディオストリームを送信します。

Uncaught TypeError: localStream.stop is not a function
Uncaught TypeError: _webRTCStream.stop is not a function // TokBox, OpenTok

見つかったトラックを繰り返し処理し、それらをすべて停止します。

if (_webRTCStream.stop) {
  _webRTCStream.stop() // idk what this does, left here for legacy reasons..?
} else {
  _webRTCStream.getTracks().forEach(function(track) { track.stop() })
}

注: _webRTCStreamequals はlocalStream、使用しているライブラリによって異なります。

于 2015-12-30T13:48:03.740 に答える