Jitsi,getDisplayMedia() 不捕获参与者的声音

问题描述

我从 getdisplaymedia 获取屏幕视频和系统声音流,从 getusermedia 获取麦克风流,并使用 MediaRecorder 录制这些流。麦克风和屏幕录制都很好,所有系统声音都会出现,但jitsi参与者的声音没有录制。这是我的代码

函数 openShareScreen() {

navigator.mediaDevices.getdisplayMedia({
    video: { displaySurface: "browser" },audio: true
}).then((desktopStream) => {
  
    let screenAudioTrack = desktopStream.getAudioTracks()[0];
    if (screenAudioTrack === undefined) {
        confirmSwalMessageConfirmOnly("Ses Paylaşımı Yapılmadı!","Görüşme kaydı için lütfen görüntü ve ses paylaşımına izin veriniz!","warning",openShareScreen);
        //recording = false;
        desktopStream.getTracks()
            .forEach(track => track.stop())
        return null;
    }

    var finalStream = new MediaStream();

    navigator.mediaDevices.getUserMedia({
        video: false,audio: true
    }).then((voiceStream) => {

        //Kamera ve mikrofon izin kontrolü yapılıyor
        navigator.permissions.query(
            { name: 'camera' },{ name: 'microphone' }
        ).then(function (permissionStatus) {

            // granted,denied,prompt
            if (permissionStatus.state !== 'granted') {
                confirmSwalMessageConfirmOnly("Mikrofon/Kamera izni verilmedi!","Görüşme kaydı için internet tarayıcınıza mikrofon ve kameraya erişim izni veriniz!",openShareScreen);
                //recording = false;
                desktopStream.getTracks().forEach(track => track.stop())
                voiceStream.getTracks().forEach(track => track.stop());
                return null;

            }
        })

        // important: we must convert multiple audio tracks into single audio track
        var mixedAudioStream = getMixedAudioStreamXYZ([voiceStream,desktopStream]) || microphone;

        mixedAudioStream.getAudioTracks().forEach(function (audioTrack) {
            finalStream.addTrack(audioTrack);
        });

        desktopStream.getVideoTracks().forEach(function (videoTrack) {
            finalStream.addTrack(videoTrack);
        });

        //Verilen time out interval süresinde kaydı başla
        var timeOutStopRecorder;
        recordLoop();

        function recordLoop() {
            
            recorder = new MediaRecorder(finalStream,{ mimeType: 'video/webm',videoBitsPerSecond: glbVideoBitsPerSecond });

            recorder.ondataavailable = e => {

                if (e.data && e.data.size > 0) {
                    recordingData = [];
                    recordingData.push(e.data);

                }
            };

            recorder.onstop = () => {
                saveRecordDone = false;
                clearTimeout(timeOutStopRecorder);
                var blob = new Blob(recordingData,{ type: 'video/webm' })
                console.log("Kayıt diske Yazıldı:" + getDateTimeNow());
                SaveRecord(blob);
                recordLoop();
            };
            console.log("Kayıt Başladı:" + getDateTimeNow());
            recorder.start();
            timeOutStopRecorder = setTimeout(() => {
                console.log("Kayıt Durdu:" + getDateTimeNow());
                recorder.stop();
            },60000);
        }

        //recorder = RecordRTC(finalStream,{
        //    type: 'video',//    mimeType: "video/webm;codecs=vp8,opus",//    videoBitsPerSecond: glbVideoBitsPerSecond
        //});

        //recorder.startRecording();
        //recording = true;
        finalStream.getVideoTracks()[0].addEventListener('ended',() => {
            //stopRecordingAndSave();
            recorder.stop();
            confirmSwalMessageConfirmOnly("Paylaşım durduruldu!",openShareScreen);
            //recording = false;
        });
    }).catch(err => {
        console.warn(err);
        confirmSwalMessageConfirmOnly("Mikrofon/Kamera izni verilmedi!",openShareScreen);
        //recording = false;
    });
}).catch(err => {
    confirmSwalMessageConfirmOnly("Uyarı!",openShareScreen);
    //recording = false;
});

}

函数 getMixedAudioStreamXYZ(arrayOfAudioStreams) {

var audioContext = new AudioContext();

var audioSources = [];

var gainNode = audioContext.createGain();
gainNode.connect(audioContext.destination);
gainNode.gain.value = 0; // don't hear self

var audioTracksLength = 0;
arrayOfAudioStreams.forEach(function (stream) {
    if (!stream.getAudioTracks().length) {
        return;
    }

    audioTracksLength++;

    var audioSource = audioContext.createmediastreamsource(stream);
    audioSource.connect(gainNode);
    audioSources.push(audioSource);
});

if (!audioTracksLength) {
    return;
}

audioDestination = audioContext.createMediaStreamDestination();
audioSources.forEach(function (audioSource) {
    audioSource.connect(audioDestination);
});
return audioDestination.stream;

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...