win*_*toy 5 javascript firefox google-chrome webrtc peerjs
我想使用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);
}
Run Code Online (Sandbox Code Playgroud)
建立联系
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);
}
Run Code Online (Sandbox Code Playgroud)
即使在 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);
Run Code Online (Sandbox Code Playgroud)
JSFiddle:https ://jsfiddle.net/jmcker/4naq5ozc/
原始 Chromium 问题和解决方法:https : //bugs.chromium.org/p/chromium/issues/detail?id=121673#c121
新的 Chromium 问题:https : //bugs.chromium.org/p/chromium/issues/detail ? id = 687574 https://bugs.chromium.org/p/chromium/issues/detail?id=933677
| 归档时间: |
|
| 查看次数: |
3836 次 |
| 最近记录: |