Хехех, странно видеть, что я пытаюсь дать лучшее и более простое объяснение после 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 это поможет.
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 не нравится)
Использование .stop () в потоке работает на хроме при подключении через http. Он не работает при использовании ssl (https).
Запуск веб-камеры видео с различными браузерами
Для 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="";
При этом свет в веб-камера снижается каждый раз ...
Имейте ссылку потока от successHandler
var streamRef;
var handleVideo = function (stream) {
streamRef = stream;
}
//this will stop video and audio both track
streamRef.getTracks().map(function (val) {
val.stop();
});
Вы можете завершить поток напрямую, используя объект stream, возвращенный обработчиком успеха, в getUserMedia. например
localMediaStream.stop()
video.src=""
или null
просто удалит источник из тега видео. Он не выпустит аппаратное обеспечение.
Если .stop()
устарел, я не думаю, что мы должны повторно добавить его, как @MuazKhan. Это причина того, почему вещи устаревают и больше не должны использоваться. Просто создайте вспомогательную функцию ... Вот еще версия es6
function stopStream (stream) {
for (let track of stream.getTracks()) {
track.stop()
}
}
Попробуйте следующий метод
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();
Поскольку вам нужны дорожки, чтобы закрыть потоковое вещание, и вам нужно 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();
});
Конечно, это закроет все активные видеодорожки. Если у вас несколько, вы должны выбрать соответственно.
Вы можете вызвать «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();
});
};
}
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();
Не использовать stream.stop()
, он устарел
Используйте stream.getTracks().forEach(track => track.stop())