getUserMedia在Firefox上给予错误,在Chrome上静默失败

1szpjjfi  于 2023-04-27  发布在  Go
关注(0)|答案(2)|浏览(132)

完整的Js代码

navigator.getUserMedia = ( navigator.getUserMedia ||
                   navigator.webkitGetUserMedia ||
                   navigator.mozGetUserMedia ||
                   navigator.msGetUserMedia);

        var session = {
          audio: true,
          video: false
        };
        var recordRTC = null;
        navigator.getUserMedia(session, initializeRecorder, onError);

        function initializeRecorder(stream) {
            console.log ("init Recorder");
            var audioContext = window.AudioContext;
            var context = new audioContext();
            var audioInput = context.createMediaStreamSource(stream);
            var bufferSize = 2048;
            // create a javascript node
            var recorder = context.createJavaScriptNode(bufferSize, 1, 1);
            // specify the processing function
            recorder.onaudioprocess = recorderProcess;
            // connect stream to our recorder
            audioInput.connect(recorder);
            // connect our recorder to the previous destination
            recorder.connect(context.destination);
        }

        function recorderProcess(e) {
            var left = e.inputBuffer.getChannelData(0);
            // window.Stream.write(convertFloat32ToInt16(left));
        }

        function onError(errorText)
        {
            console.log (errorText);
        }

加载此页面时,Firefox会执行getUserMedia的onError回调。该错误告诉:
NotFoundError:在这里找不到该对象。
Chrome什么都不做。
FF和Chrome都没有要求我允许使用麦克风。为什么?

iih3973s

iih3973s1#

您需要从http(s)协议运行页面。如果您从file://运行它,安全限制就会启动。
此外,在Chrome中,AudioContext是前缀,因此您需要更改这一行:

var audioContext = window.AudioContext;

var audioContext = window.AudioContext || window.webkitAudioContext;

此外,createJavaScriptNode已过时。请考虑使用createScriptProcessor
(最终ScriptProcessorNode也将被Audio Workers取代-虽然尚未在任何浏览器中实现,但需要注意的是稍后)。

u91tlkcl

u91tlkcl2#

在设备管理器中打开麦克风。确保系统中有任何可用的麦克风。

相关问题