有些日子以来,我试图想象出一个来自webrtc的音频流。 我们已经编写了一些视觉效果,这些视觉效果适用于普通的本地流(webaudio麦克风使用)。
然后我在https://github.com/muaz-khan/WebRTC-Experiment/tree/master/上发现了一些非常有趣的东西,用于在不同浏览器之间传输麦克风输入。 对于前端的所有客户端,我们需要从一个后端获得相同的音频数据。
一切正常,一些测试显示我们可以互相听到。所以我认为可视化输入流也不是问题。
但是:所有频率数据都是空的(零),即使我们可以互相听到。
有人有解决方案或暗示吗?提前谢谢!
这是我分析远程频率数据的测试:
首先包含这些文件:
webrtc-experiment.com/firebase.js
webrtc-experiment.com/one-to-many-audio-broadcasting/meeting.js
var meeting = new Meeting('test');
var audioContext = new window.webkitAudioContext();
var analyser = audioContext.createAnalyser();
// on getting local or remote streams
meeting.onaddstream = function(e) {
console.log(e.type);
console.log(e.audio);
console.log(e.stream);
if(e.type === 'local')
{
//try it with the local stream, it works!
}
else
{
var source = audioContext.createMediaStreamSource(e.stream);
source.connect(analyser);
analyser.connect(audioContext.destination);
console.log(analyser.fftSize);
console.log(analyser.frequencyBinCount);
analyser.fftSize = 64;
console.log(analyser.frequencyBinCount);
var frequencyData = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(frequencyData);
function update() {
requestAnimationFrame(update);
analyser.getByteFrequencyData(frequencyData);
console.log(frequencyData);
};
update();
}
};
meeting.check();
meeting.setup('test');
答案 0 :(得分:1)
我至少在下一次找到了一个简单的“解决方案”:
我已经在所有客户端插入了从麦克风到耳机的公/母音频线。然后我读了当地的麦克风流,这真是一个奇迹,我可以想象我听到的是什么。
不是一个好的解决方案,但它正在做这个工作..
一个问题:是否可以在javascript中重新获取目标作为流?然后我不需要音频线..
答案 1 :(得分:1)
请注意,分析远程流应该适用于Firefox,并且知道它不能在Chrome中运行,请参阅http://code.google.com/p/chromium/issues/detail?id=241543
可能的解决方法是使用WebRTC统计API获取远程音频级别值。
如果您转到chrome:// webrtc-internals /然后选择播放远程流的页面,则其中一个ssrc_XXXX_recv将包含您可以使用的动态更改的audioOutputLevel值。
您可以使用Chrome PeerConnection的统计API,特别是getStats()方法访问该值。
可能的缺点可能是这是用户从视频/音频元素听到的实际声音的值,因此如果用户静音或更改媒体元素的音量,则会影响audioOutputLevel值。
祝你好运! : - )