Отсутствие звуковых дорожек в MediaStream: проблема в firefox

Я снимаю экран пользователя и звук с помощью getDisplayMedia и getUserMedia и могу записать полный снимок экрана. Но это работает только в Chrome, а не в Firefox. Когда я запускаю свое приложение в Firefox, оно выдает ошибку «DOMException: AudioContext.createMediaStreamSource: No audio track in MediaStream». Ниже мой фрагмент кода. У меня установлены последние версии обоих браузеров. Любая помощь будет оценена. Заранее спасибо.

Примечание. - Ошибка выдачи в строке context.createMediaStreamSource (desktopStream)

async function captureScreen() {
    desktopStream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true });
    microPhoneStream = await navigator.mediaDevices.getUserMedia({ video: false, audio: true });

    const tracks = [
        ...desktopStream.getVideoTracks(),
        ...mergeAudioStreams(desktopStream,microPhoneStream)
    ];
    stream = new MediaStream(tracks);
    var options = { mimeType: "video/webm; codecs=opus,vp8" };
    startRecording(stream, options);
    ....
    ....
    ....
}


//merges two audio streams into one
const mergeAudioStreams = (desktopStream, microPhoneStream) => {
    const context = new AudioContext();
    try {
        const source1 = context.createMediaStreamSource(desktopStream);
        const source2 = context.createMediaStreamSource(microPhoneStream);
        const destination = context.createMediaStreamDestination();

        const desktopGain = context.createGain();
        const voiceGain = context.createGain();

        desktopGain.gain.value = 0.7;
        voiceGain.gain.value = 0.7;

        source1.connect(desktopGain).connect(destination);
        source2.connect(voiceGain).connect(destination);
        return destination.stream.getAudioTracks();
    }
    catch (err) {
    console.log(err);
    }
};

person Tejas Ghonge    schedule 03.06.2021    source источник


Ответы (1)


Firefox в настоящее время не поддерживает запись звука с помощью getDisplayMedia. Для этого есть запрос функции.

Что вы можете сделать, так это проверить, есть ли в ваших потоках какие-либо звуковые дорожки, прежде чем создавать аудиоузел, например:

const destination = context.createMediaStreamDestination();

if (desktopStream.getAudioTracks().length) {
    const source1 = context.createMediaStreamSource(desktopStream);
    const desktopGain = context.createGain();
    desktopGain.gain.value = 0.7;
    source1.connect(desktopGain).connect(destination);
}

if (microPhoneStream.getAudioTracks().length) {
    const source2 = context.createMediaStreamSource(microPhoneStream);
    const voiceGain = context.createGain();
    voiceGain.gain.value = 0.7;
    source2.connect(voiceGain).connect(destination);
}

return destination.stream.getAudioTracks();
person naktinis    schedule 08.06.2021
comment
Да, это хорошее решение !! Спасибо друг. - person Tejas Ghonge; 09.06.2021
comment
Рад, что помог! Если вы считаете это хорошим ответом, подумайте о том, чтобы принять его и проголосовать за него. Ваше здоровье! - person naktinis; 09.06.2021