Webrtc createMediaElementSource播放,但getByteFrequencyData返回所有0';s

Webrtc createMediaElementSource播放,但getByteFrequencyData返回所有0';s,webrtc,web-audio-api,Webrtc,Web Audio Api,我试图可视化音频从网页上的元素出来。该元素的源是通过sip.js连接到星号调用的WebRTC流。音频按预期工作 但是,当我尝试使用web audio api获取频率数据时,它返回一个包含所有0的数组,即使音频正在工作。这似乎是createMediaElementSource的问题。如果我调用getUserMedia并使用createMediaStreamSource将麦克风连接到输入端,我确实会得到返回的频率数据 这在Chrome40.0和Firefox31.4中都有尝试。在我的搜索中,我发现A

我试图可视化音频从网页上的元素出来。该元素的源是通过sip.js连接到星号调用的WebRTC流。音频按预期工作

但是,当我尝试使用web audio api获取频率数据时,它返回一个包含所有0的数组,即使音频正在工作。这似乎是createMediaElementSource的问题。如果我调用getUserMedia并使用createMediaStreamSource将麦克风连接到输入端,我确实会得到返回的频率数据

这在Chrome40.0和Firefox31.4中都有尝试。在我的搜索中,我发现Android Chrome也有类似的错误,但我的桌面Chrome和Firefox版本似乎应该正常运行。到目前为止,我有一种感觉,这个错误可能是由于音频播放器从sip.js中的另一个AudioContext获取音频,或者与CORS有关。我尝试的所有演示都正常工作,但仅使用createMediaStreamSource获取麦克风音频,或使用createMediaElementSource播放文件(而不是流式播放到某个元素)

我的代码:

var context = new (window.AudioContext || window.webkitAudioContext)();

    var analyser = context.createAnalyser();
    analyser.fftSize = 64;
    analyser.minDecibels = -90;
    analyser.maxDecibels = -10;
    analyser.smoothingTimeConstant = 0.85;

    var frequencyData = new Uint8Array(analyser.frequencyBinCount);
    var visualisation = $("#visualisation");
    var barSpacingPercent = 100 / analyser.frequencyBinCount;
    for (var i = 0; i < analyser.frequencyBinCount; i++) {
            $("<div/>").css("left", i * barSpacingPercent + "%").appendTo(visualisation);
    }
    var bars = $("#visualisation > div");
    function update() {
            window.requestAnimationFrame(update);
            analyser.getByteFrequencyData(frequencyData);
            bars.each(function (index, bar) {
                    bar.style.height = frequencyData[index] + 'px';
                    console.debug(frequencyData[index]);
            });
    };

$("audio").bind('canplay', function() {
    source = context.createMediaElementSource(this);
    source.connect(analyser);
    update();
});
var context=new(window.AudioContext | | window.webkitadiocontext)();
var analyzer=context.createanalyzer();
Analyzer.fftSize=64;
分析仪。minDecibels=-90;
分析仪最大分贝=-10;
分析仪.平滑时间常数=0.85;
var frequencyData=新的UINT8阵列(分析仪频率B计数);
var可视化=$(“可视化”);
var barSpacingPercent=100/分析仪频率b计数;
对于(var i=0;idiv”);
函数更新(){
window.requestAnimationFrame(更新);
分析仪。GetByTefFrequencyData(频率数据);
条形图。每个(功能)(索引,条形图){
bar.style.height=频率数据[索引]+‘px’;
调试(frequencyData[index]);
});
};
$(“音频”).bind('canplay',function(){
source=context.createMediaElementSource(此);
源。连接(分析仪);
更新();
});

非常感谢您的帮助。

Chrome不支持RTPeerConnection输出流(远程流)的WebAudio处理;看见他们的错误是。 编辑:他们现在在Chrome 50中支持此功能

请参阅firefox即将登陆的测试代码作为此bug的一部分:
. 此错误会将webaudio输入添加到Firefox中的RTPeerConnections;我们对输出媒体流进行WebAudio处理已有一段时间了。那里的测试代码测试双方;请注意,这在很大程度上取决于测试框架,因此只需将其用作连接到webaudio的指南。

Chrome 50已经发布,现在应该支持此功能。另见: