无法使用MediaStreamAudioSourceNode在Google Chrome中播放声音

时间:2013-07-11 22:32:23

标签: javascript google-chrome webrtc

我一直在玩WebRTC,但在正确授予浏览器使用输入设备权限后,我完全无法播放简单的音频流。

我只是尝试将输入设备连接到上下文目的地,但它不起作用。

此代码段不起作用,我认为应该:

function success(stream)
{
    var audioContext      = new webkitAudioContext();
    var mediaStreamSource = audioContext.createMediaStreamSource(stream);

    mediaStreamSource.connect(audioContext.destination);
}

navigator.webkitGetUserMedia({audio:true, video:false}, success);

这似乎没有从我工作的麦克风捕获任何声音,但如果我使用一个简单的标签并创建一个blob网址,代码突然开始工作。

function success(stream)
{
    audio = document.querySelector('audio');
    audio.src = window.URL.createObjectURL(stream);
    audio.play();
}

navigator.webkitGetUserMedia({audio:true, video:false}, success);

此外,这些演示中没有一个似乎对我有用:http://webaudiodemos.appspot.com/

小提琴的第一个片段:http://jsfiddle.net/AvMtt/

第二个片段的小提琴:http://jsfiddle.net/vxeDg/

在Windows 7x64上使用Chrome 28.0.1500.71 beta-m。

我有一个输入设备和两个输出设备(扬声器,耳机)。每台设备使用相同的采样率。

1 个答案:

答案 0 :(得分:0)

这个问题已经有6年历史了,但是对于偶然发现这个问题的人来说,这个问题的现代版本看起来像是:

function success(stream) {
    let audioContext = new AudioContext();
    let mediaStreamSource = audioContext.createMediaStreamSource(stream);
    mediaStreamSource.connect(audioContext.destination);
}

navigator.mediaDevices.getUserMedia({audio: true, video: false})
.then(success)
.catch((e) => {
    console.dir(e);
});

并且似乎基于https://jsfiddle.net/jmcker/g3j1yo85