Невозможно отключить веб-камеру после ее активации [дублировать]

Хехех, странно видеть, что я пытаюсь дать лучшее и более простое объяснение после 2600+ голосов на том, что было отмечено как правильный ответ от Grew Hewgill.

Здесь мы идем ...

На мой взгляд, вы лучше поймете и запомните нотацию нотации струны Python, если вы посмотрите на нее следующим образом (читайте дальше).

Давайте работать со следующей строкой. .

azString = "abcdefghijklmnopqrstuvwxyz"

Для тех, кто не знает, вы можете создать любую подстроку из azString, используя нотацию azString[x:y]

. Исходя из других языков программирования, здравый смысл скомпрометирован. Что такое x и y?

Мне пришлось сесть и запустить несколько сценариев в поисках метода запоминания, который поможет мне запомнить, что такое x и y, и помочь мне правильно отрезать строки с первой попытки.

Мой вывод состоит в том, что x и y следует рассматривать как граничные индексы, которые окружают строки, которые мы хотим добавить. Таким образом, мы должны видеть выражение как azString[index1, index2] или даже более ясно, как azString[index_of_first_character, index_after_the_last_character].

Вот пример визуализации этого ...

Letters a b c d e f g h i j ... ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ Indexes 0 1 2 3 4 5 6 7 8 9 ... | | cdefgh index1 index2

Итак, все, что вам нужно сделать, если установить index1 и index2 в значения, которые будут окружать нужную подстроку. Например, чтобы получить подстроку «cdefgh», вы можете использовать azString[2:8], потому что индекс в левой части «c» равен 2, а тот, который имеет правый размер «h», равен 8.

Помните, что мы устанавливаем границы.

Этот трюк работает все время и легко запоминается.

Hopefuly это поможет.

73
задан GusP 25 July 2012 в 06:04
поделиться

11 ответов

EDIT

Поскольку этот ответ был первоначально опубликован, браузер API изменился. .stop() больше не доступен в потоке, который передается обратному вызову. Разработчик должен будет получить доступ к трекам, которые составляют поток (аудио или видео), и останавливать каждый из них по отдельности.

Подробнее здесь: https://developers.google.com/web / updates / 2015/07 / mediastream-deprecations? hl = en # stop-end-and-active

Пример (из ссылки выше):

var track = stream.getTracks()[0];  // if only one media track
// ...
track.stop();

Поддержка браузера может отличаться.

Оригинальный ответ

navigator.getUserMedia предоставляет вам поток в обратном вызове успеха, вы может вызвать .stop() в этом потоке, чтобы остановить запись (по крайней мере, в Chrome, кажется, FF не нравится)

94
ответ дан andrei 25 August 2018 в 05:53
поделиться

Использование .stop () в потоке работает на хроме при подключении через http. Он не работает при использовании ssl (https).

0
ответ дан ACEGL 25 August 2018 в 05:53
поделиться

Запуск веб-камеры видео с различными браузерами

Для Opera 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 );

Для Chrome 22

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

Остановка видео в веб-камерах с различными браузерами

Для Opera 12

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

Для Firefox Nightly 18.0

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

Для Chrome 22

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

При этом свет в веб-камера снижается каждый раз ...

9
ответ дан Alain Saurat 25 August 2018 в 05:53
поделиться

Имейте ссылку потока от successHandler

var streamRef;

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

//this will stop video and audio both track
streamRef.getTracks().map(function (val) {
    val.stop();
});
-1
ответ дан BigBrother 25 August 2018 в 05:53
поделиться

Вы можете завершить поток напрямую, используя объект stream, возвращенный обработчиком успеха, в getUserMedia. например

localMediaStream.stop()

video.src="" или null просто удалит источник из тега видео. Он не выпустит аппаратное обеспечение.

7
ответ дан Christian Gollhardt 25 August 2018 в 05:53
поделиться

Если .stop() устарел, я не думаю, что мы должны повторно добавить его, как @MuazKhan. Это причина того, почему вещи устаревают и больше не должны использоваться. Просто создайте вспомогательную функцию ... Вот еще версия es6

function stopStream (stream) {
    for (let track of stream.getTracks()) { 
        track.stop()
    }
}
4
ответ дан Endless 25 August 2018 в 05:53
поделиться

Попробуйте следующий метод

var mediaStream = null;
    navigator.getUserMedia(
        {
            audio: true,
            video: true
        },
        function (stream) {
            mediaStream = stream;
            mediaStream.stop = function () {
                this.getAudioTracks().forEach(function (track) {
                    track.stop();
                });
                this.getVideoTracks().forEach(function (track) { //in case... :)
                    track.stop();
                });
            };
            /*
             * Rest of your code.....
             * */
        });

    /*
    * somewhere insdie your code you call
    * */
    mediaStream.stop();
4
ответ дан imal hasaranga perera 25 August 2018 в 05:53
поделиться

Поскольку вам нужны дорожки, чтобы закрыть потоковое вещание, и вам нужно stream boject, чтобы добраться до треков, код, который я использовал с помощью ответа Муаза-хана, выглядит следующим образом:

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();
});

Конечно, это закроет все активные видеодорожки. Если у вас несколько, вы должны выбрать соответственно.

3
ответ дан mcy 25 August 2018 в 05:53
поделиться

Вы можете вызвать «stop» над объектом MediaStream , который будет устаревшим ; новое предложение состоит в том, чтобы выпустить медиа-треки, вызвав «стоп» по каждому медиа-треку:

mediaStream.stop();

// or
mediaStream.getAudioTracks()[0].stop();
mediaStream.getVideoTracks()[0].stop();

Обновлено 03 нояб. 2015 г. ---- 10:34:24 AM

Вот кросс-браузер stream.stop hack:

var MediaStream = window.MediaStream;

if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {
    MediaStream = webkitMediaStream;
}

/*global MediaStream:true */
if (typeof MediaStream !== 'undefined' && !('stop' in MediaStream.prototype)) {
    MediaStream.prototype.stop = function() {
        this.getAudioTracks().forEach(function(track) {
            track.stop();
        });

        this.getVideoTracks().forEach(function(track) {
            track.stop();
        });
    };
}
46
ответ дан Muaz Khan 25 August 2018 в 05:53
поделиться

FF, Chrome и Opera начали выставлять getUserMedia через navigator.mediaDevices в качестве стандарта сейчас (Might change:)

онлайн-демонстрация

navigator.mediaDevices.getUserMedia({audio:true,video:true})
    .then(stream => {
        window.localStream = stream;
    })
    .catch( (err) =>{
        console.log(err);
    });
// later you can do below
// stop both video and audio
localStream.getTracks().forEach( (track) => {
track.stop();
});
// stop only audio
localStream.getAudioTracks()[0].stop();
//stop only audio 
localStream.getVideoTracks()[0].stop();
5
ответ дан Sasi Varunan 25 August 2018 в 05:53
поделиться

Не использовать stream.stop(), он устарел

Оповещения MediaStream

Используйте stream.getTracks().forEach(track => track.stop())

12
ответ дан sol-ibit 25 August 2018 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: