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 трека (аудио и видео).

0 ответов

Другие вопросы по тегам