जवाबों:
संपादित करें
चूंकि यह उत्तर मूल रूप से पोस्ट किया गया है इसलिए ब्राउज़र एपीआई बदल गया है।
.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()
रिकॉर्डिंग को रोकने के लिए उस स्ट्रीम पर कॉल कर सकते हैं (कम से कम क्रोम में, ऐसा लगता है कि एफएफ यह नहीं करता है)
इनमें से किसी भी कार्य का उपयोग करें:
// 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();
}
});
}
नोट: उत्तर को अपडेट किया गया था: 06/09/2020
stream.getTracks().forEach(track => { track.stop() })
? या अगर आप वास्तव में शॉर्टहैंड को सही ठहराने के लिए अक्सर ऐसा कर रहे हैं, तो आप हमेशा एक सहायक फ़ंक्शन को परिभाषित कर सकते हैं stopAllTracks(stream)
।
उपयोग न करें stream.stop()
, यह पदावनत है
उपयोग stream.getTracks().forEach(track => track.stop())
एफएफ, क्रोम और ओपेरा उजागर शुरू कर दिया है getUserMedia
के माध्यम से navigator.mediaDevices
मानक के रूप में अब (बदल सकता है :)
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 video
localStream.getVideoTracks()[0].stop();
अलग-अलग ब्राउज़रों के साथ वेब कैमरा वीडियो शुरू करना
ओपेरा 12 के लिए
window.navigator.getUserMedia(param, function(stream) {
video.src =window.URL.createObjectURL(stream);
}, videoError );
फ़ायरफ़ॉक्स नाइटली 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 );
अलग-अलग ब्राउज़रों के साथ वेबकैम वीडियो रोकना
ओपेरा 12 के लिए
video.pause();
video.src=null;
फ़ायरफ़ॉक्स नाइटली 18.0 के लिए
video.pause();
video.mozSrcObject=null;
क्रोम 22 के लिए
video.pause();
video.src="";
इसके साथ वेब कैमरा लाइट हर बार नीचे जाता है ...
मान लें कि हमारे पास वीडियो टैग और आईडी में स्ट्रीमिंग वीडियो है - <video id="video"></video>
तो हमें निम्नलिखित कोड होना चाहिए -
var videoEl = document.getElementById('video');
// now get the steam
stream = videoEl.srcObject;
// now get all tracks
tracks = stream.getTracks();
// now close each track by having forEach loop
tracks.forEach(function(track) {
// stopping every track
track.stop();
});
// assign null to srcObject of video
videoEl.srcObject = null;
आप सफलता हैंडलर में लौटे स्ट्रीम ऑब्जेक्ट का उपयोग करके सीधे स्ट्रीम को समाप्त कर सकते हैं। जैसे
localMediaStream.stop()
video.src=""
या null
सिर्फ वीडियो टैग से स्रोत को हटा देगा। यह हार्डवेयर जारी नहीं करेगा।
नीचे विधि की कोशिश करें:
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();
यदि .stop()
पदावनत कर दिया जाता है तो मुझे नहीं लगता कि हमें @MuazKhan की खुराक की तरह इसे फिर से जोड़ना चाहिए। यह इस बात का कारण है कि क्यों चीजें अपदस्थ हो जाती हैं और इसका उपयोग नहीं किया जाना चाहिए। इसके बजाय बस एक हेल्पर फ़ंक्शन बनाएं ... यहां एक अधिक es6 संस्करण है
function stopStream (stream) {
for (let track of stream.getTracks()) {
track.stop()
}
}
for (let track of stream.getTracks()) { track.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();
});
बेशक यह सभी सक्रिय वीडियो ट्रैक्स को बंद कर देगा। यदि आपके पास कई हैं, तो आपको उसके अनुसार चयन करना चाहिए।
आपको सभी ट्रैक रोकने की आवश्यकता है (वेबकैम, माइक्रोफ़ोन से):
localStream.getTracks().forEach(track => track.stop());
कृपया इसे देखें: 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;
}
वेब कैमरा शुरू करें
stopWebCamera =()=>
//Start Web Came
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
//use WebCam
navigator.mediaDevices.getUserMedia({ video: true }).then(stream => {
this.localStream = stream;
this.video.srcObject = stream;
this.video.play();
});
}
}
सामान्य रूप से वेब कैमरा या वीडियो प्लेबैक बंद करें
stopVideo =()=>
{
this.video.pause();
this.video.src = "";
this.video.srcObject = null;
// As per new API stop all streams
if (this.localStream)
this.localStream.getTracks().forEach(track => track.stop());
}
वीडियो स्ट्रीम के साथ भी वेब कैमरा फंक्शन कार्य करना बंद करें:
this.video.src = this.state.videoToTest;
this.video.play();
स्ट्रीम फॉर्म सक्सेस का संदर्भ लें
var streamRef;
var handleVideo = function (stream) {
streamRef = stream;
}
//this will stop video and audio both track
streamRef.getTracks().map(function (val) {
val.stop();
});
stream.stop()
क्रोम के लिए कामmediaRecorder.stop()
नहीं करता है, रिकॉर्डिंग बंद कर देता है, जबकि यह ब्राउज़र द्वारा प्रदान की गई धारा को नहीं रोकता है। क्या आप इस stackoverflow.com/questions/34715357/…