getUserMedia() не может освободить камеру, MediaStreamTrack не останавливается
Я использую RecordRTC для записи MediaStream. Прямая трансляция работает, запись работает, но когда я прекращаю запись, я пытаюсь освободить камеру, а камера не отпускается. Я копирую поток камеры в глобальную переменную stream
и я использую это, чтобы освободить камеру.
var recorder;
var stream;
var blob;
var video = document.getElementById("video");
var videoConstraints = {
audio: true,
video: {
width: { min: 1024, ideal: 1280, max: 1920 },
height: { min: 578, ideal: 720, max: 1080 },
frameRate: { min: 15, ideal: 23.976 },
facingMode: "user"
}
};
function captureCamera(callback) {
navigator.mediaDevices.getUserMedia(videoConstraints).then(function (camera) {
video.muted = true;
stream = camera;
callback(stream);
}).catch(function (error) {
alert('Unable to capture your camera. Please check console logs.');
console.error(error);
});
}
function stopRecordingCallback() {
blob = recorder.getBlob();
video.src = video.srcObject = null;
video.src = URL.createObjectURL(recorder.getBlob());
video.play();
recorder.destroy();
recorder = null;
stream.getTracks().forEach(track => track.stop());
console.log(stream.getTracks());
}
function hasGetUserMedia() {
return navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia;
}
$('#startRecord, #recordAgain').on("click", function () {
if (hasGetUserMedia()) {
/*----------------recording process start----------------*/
this.disabled = true;
captureCamera(function (camera) {
setSrcObject(camera, video);
video.play();
var options = {
recorderType: MediaStreamRecorder,
mimeType: 'video/mp4\;codecs=h264',
audioBitsPerSecond: 128000,
videoBitsPerSecond: 2097152 // 2 mbps
};
recorder = RecordRTC(camera, options);
recorder.startRecording();
document.getElementById('stopRecord').disabled = false;
});
/*----------------recording process end----------------*/
}
else {
alert('getUserMedia() is not supported by your browser');
}
});
$('#stopRecord').on("click", function () {
this.disabled = true;
document.getElementById('startRecord').disabled = false;
$('#startRecord').hide();
document.getElementById('recordAgain').disabled = false;
$('#recordAgain').show();
recorder.stopRecording(stopRecordingCallback);
});
После линии track.stop()
Я положил stream
в console.log()
и он по-прежнему показывает, что есть 2 трека (аудио и видео).