webrtc – createMediaElementSource播放但getByteFrequencyData返回全0

webrtc – createMediaElementSource播放但getByteFrequencyData返回全0,第1张

概述我正在尝试可视化来自网页上元素的音频.该元素的源是通过sip.js连接到Asterisk调用的WebRTC流.音频按预期工作. 但是,当我尝试使用web audio api获取频率数据时,它会返回一个全0的数组,即使音频工作正常.这似乎是createMediaElementSource的一个问题.如果我调用getUserMedia并使用createMediaStreamSource将我的麦克风连接 我正在尝试可视化来自网页上元素的音频.该元素的源是通过sip.Js连接到Asterisk调用的WebRTC流.音频按预期工作.

但是,当我尝试使用web audio API获取频率数据时,它会返回一个全0的数组,即使音频工作正常.这似乎是createMediaElementSource的一个问题.如果我调用getUserMedia并使用createmediastreamsource将我的麦克风连接到输入,我确实得到了返回的频率数据.

这是在Chrome 40.0和firefox 31.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();});

任何帮助是极大的赞赏.

解决方法 Chrome不支持RTCPeerConnection输出流(远程流)的WebAudio处理;见 this question.他们的错误是 here.
编辑:他们现在支持Chrome 50

请参阅firefox即将登陆的测试代码,作为此错误的一部分:
Bug 1081819.这个BUG会将webaudio输入添加到firefox中的RTCPeerConnections;我们已经对输出MediaStreams进行了一段时间的WebAudio处理.那里的测试代码测试双方;请注意,它在很大程度上取决于测试框架,因此只需将其用作挂钩到webaudio的指南.

总结

以上是内存溢出为你收集整理的webrtc – createMediaElementSource播放但getByteFrequencyData返回全0全部内容,希望文章能够帮你解决webrtc – createMediaElementSource播放但getByteFrequencyData返回全0所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1061141.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存