【发布时间】:2017-11-22 03:48:32
【问题描述】:
我想使用 webAudio 制作一个简单的 VU Meter 来指示 <video> 元素的音量,其中包含来自网络摄像头的实时流(使用 Janus 流式传输)。我从其他示例中创建了以下函数。流初始化后调用,但analyser.getByteFrequencyData(array);方法生成的数组全为零。
function meterInit(){
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
videoElement = document.getElementById('remotevideo');
source = audioCtx.createMediaElementSource(videoElement);
analyser = audioCtx.createAnalyser();
analyser.smoothingTimeConstant = 0.2;
analyser.fftSize = 512;
analyser.minDecibels = -200;
source.connect(analyser);
analyser.connect(audioCtx.destination);
javascriptNode = audioCtx.createScriptProcessor(2048, 1, 1);
javascriptNode.connect(audioCtx.destination);
analyser.connect(javascriptNode);
javascriptNode.onaudioprocess = function() {
var array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(array);
var average = getAverageVolume(array)
document.getElementById('vuMeter').value = average;
}
}
function getAverageVolume(array) {
var values = 0;
var average;
var length = array.length;
// get all the frequency amplitudes
for (var i = 0; i < length; i++) {
values += array[i];
}
average = values / length;
return average;
}
【问题讨论】:
-
仅使用 ScriptNode 来制作动画循环听起来很奇怪,但 that should work。你的控制台没有错误?您使用哪种浏览器?从janus,你得到一个MediaStream?你是怎么设置的?
标签: javascript html5-video web-audio-api