198

次の JavaScript コードを使用して Web カメラを開きました。

const stream = await navigator.mediaDevices.getUserMedia({ /* ... */ });

ウェブカメラを停止または閉じるための JavaScript コードはありますか? みんな、ありがとう。

4

16 に答える 16

290

編集

この回答が最初に投稿されて以来、ブラウザー API が変更されました。 .stop()コールバックに渡されるストリームでは使用できなくなりました。開発者は、ストリーム (オーディオまたはビデオ) を構成するトラックにアクセスし、それぞれを個別に停止する必要があります。

詳細はこちら: https://developers.google.com/web/updates/2015/07/mediastream-deprecations?hl=en#stop-ended-and-active

例(上記のリンクから):

stream.getTracks().forEach(function(track) {
  track.stop();
});

ブラウザのサポートは異なる場合があります。

元の答え

navigator.getUserMedia成功のコールバックでストリームを提供します。.stop()そのストリームを呼び出して記録を停止できます (少なくとも Chrome では、FF は気に入らないようです)。

于 2012-09-15T10:54:38.753 に答える
90

次の関数のいずれかを使用します。

// stop both mic and camera
function stopBothVideoAndAudio(stream) {
    stream.getTracks().forEach(function(track) {
        if (track.readyState == 'live') {
            track.stop();
        }
    });
}

// stop only camera
function stopVideoOnly(stream) {
    stream.getTracks().forEach(function(track) {
        if (track.readyState == 'live' && track.kind === 'video') {
            track.stop();
        }
    });
}

// stop only mic
function stopAudioOnly(stream) {
    stream.getTracks().forEach(function(track) {
        if (track.readyState == 'live' && track.kind === 'audio') {
            track.stop();
        }
    });
}
于 2012-07-25T09:42:21.797 に答える
9

さまざまなブラウザーで Webcam Video を開始する

オペラ 12 の場合

window.navigator.getUserMedia(param, function(stream) {
                            video.src =window.URL.createObjectURL(stream);
                        }, videoError );

Firefox Nightly 18.0 の場合

window.navigator.mozGetUserMedia(param, function(stream) {
                            video.mozSrcObject = stream;
                        }, videoError );

クロム 22 の場合

window.navigator.webkitGetUserMedia(param, function(stream) {
                            video.src =window.webkitURL.createObjectURL(stream);
                        },  videoError );

異なるブラウザーで Webcam Video を停止する

オペラ 12 の場合

video.pause();
video.src=null;

Firefox Nightly 18.0 の場合

video.pause();
video.mozSrcObject=null;

クロム 22 の場合

video.pause();
video.src="";

これにより、ウェブカメラのライトが毎回消えます...

于 2012-10-08T18:20:48.217 に答える
4

ストリーミングを閉じるにはトラックが必要であり、トラックにアクセスするにはstreamboject が必要なので、上記の Muaz Khan の回答を参考にして使用したコードは次のとおりです。

if (navigator.getUserMedia) {
    navigator.getUserMedia(constraints, function (stream) {
        videoEl.src = stream;
        videoEl.play();
        document.getElementById('close').addEventListener('click', function () {
            stopStream(stream);
        });
    }, errBack);

function stopStream(stream) {
console.log('stop called');
stream.getVideoTracks().forEach(function (track) {
    track.stop();
});

もちろん、これはすべてのアクティブなビデオ トラックを閉じます。複数ある場合は、それに応じて選択する必要があります。

于 2016-03-16T12:53:29.437 に答える
0

ストリームで .stop() を使用すると、http 経由で接続したときにクロムで機能します。ssl (https) を使用している場合は機能しません。

于 2013-04-10T11:01:20.170 に答える
0

これを確認してください: https://jsfiddle.net/wazb1jks/3/

navigator.getUserMedia(mediaConstraints, function(stream) {
    window.streamReference = stream;
}, onMediaError);

記録を停止

function stopStream() {
    if (!window.streamReference) return;

    window.streamReference.getAudioTracks().forEach(function(track) {
        track.stop();
    });

    window.streamReference.getVideoTracks().forEach(function(track) {
        track.stop();
    });

    window.streamReference = null;
}

于 2019-05-15T10:05:17.247 に答える
0

次のコードは私のために働いた:

public vidOff() {

      let stream = this.video.nativeElement.srcObject;
      let tracks = stream.getTracks();

      tracks.forEach(function (track) {
          track.stop();
      });

      this.video.nativeElement.srcObject = null;
      this.video.nativeElement.stop();
  }
于 2019-05-17T10:27:13.953 に答える
-2

ストリーム フォームの successHandle の参照を持つ

var streamRef;

var handleVideo = function (stream) {
    streamRef = stream;
}

//this will stop video and audio both track
streamRef.getTracks().map(function (val) {
    val.stop();
});
于 2016-07-09T12:27:12.707 に答える