我想使用Peer.js在WebRTC上创建一个简单的音频流。我在本地运行简单的PeerServer。
以下在Firefox 30中完全正常,但我无法在 Chrome 35 中使用它。我希望PeerJS设置有问题,但Chrome - > Firefox工作得很好,而Chrome - > Chrome似乎会发送流,但不会播放扬声器。
设置getUserMedia 注意:取消注释以下这些行,我会听到Chrome和Firefox中的环回。
navigator.getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
window.AudioContext = window.AudioContext || window.webkitAudioContext;
if(navigator.getUserMedia) {
navigator.getUserMedia({video: false, audio: true}, getMediaSuccess, getMediaError);
} else {
alert('getUserMedia not supported.');
}
var localMediaStream;
//var audioContext = new AudioContext();
function getMediaSuccess(mediaStream) {
//var microphone = audioContext.createMediaStreamSource(mediaStream);
//microphone.connect(audioContext.destination);
localMediaStream = mediaStream;
}
function getMediaError(err) {
alert('getUserMedia error. See console.');
console.error(err);
}
建立连接
var peer = new Peer({host: '192.168.1.129', port: 9000});
peer.on('open', function(id) {
console.log('My ID:', id);
});
peer.on('call', function(call) {
console.log('answering call with', localMediaStream);
call.answer(localMediaStream);
//THIS WORKS IN CHROME, localMediaStream exists
call.on('stream', function(stream) {
console.log('streamRecieved', stream);
//THIS WORKS IN CHROME, the stream has come through
var audioContext = new AudioContext();
var audioStream = audioContext.createMediaStreamSource(stream);
audioStream.connect(audioContext.destination);
//I HEAR AUDIO IN FIREFOX, BUT NOT CHROME
});
call.on('error', function(err) {
console.log(err);
//LOGS NO ERRORS
});
});
function connect(id) {
var voiceStream = peer.call(id, localMediaStream);
}
答案 0 :(得分:4)
在Chrome中,它是known bug,目前无法通过AudioAPI访问从对等连接收集的远程音频流。
关于错误的最新评论:
我们正在努力实现该功能。之所以这样 需要很长时间才能首先将APM移动到chrome, 实现一个渲染混合器来从WebRtc获取未混合的数据,然后我们 可以将远程音频流连接到webaudio。
最近在Firefox中进行了修补,因为我记得这也是过去的一个问题。
答案 1 :(得分:0)
我无法使用网络音频播放流,但我确实设法使用基本音频元素播放:
var audio = new Audio();
audio.src = (URL || webkitURL || mozURL).createObjectURL(remoteStream);
audio.play();
答案 2 :(得分:0)
即使在Chrome 73中,这仍然是一个问题。
目前拯救我的解决方案是还将媒体流连接到静音的HTML音频元素。这似乎使流工作,并且音频开始流入WebAudio节点。
这看起来像:
let a = new Audio();
a.muted = true;
a.srcObject = stream;
a.addEventListener('canplaythrough', () => {
a = null;
});
let audioStream = audioContext.createMediaStreamSource(stream);
audioStream.connect(audioContext.destination);
JSFiddle:https://jsfiddle.net/jmcker/4naq5ozc/
Chrome的原始问题和解决方法: https://bugs.chromium.org/p/chromium/issues/detail?id=121673#c121
Chrome新问题:https://bugs.chromium.org/p/chromium/issues/detail?id=687574