Javascript 如何生成HTML5视频音量水平图?
给出一个30多岁的普通网络视频:Javascript 如何生成HTML5视频音量水平图?,javascript,html5-video,html5-audio,web-audio-api,Javascript,Html5 Video,Html5 Audio,Web Audio Api,给出一个30多岁的普通网络视频: <video src="my-video.mp4"></video> 注意: 请给我纯JavaScript。没有图书馆 根据用途的不同,有几种方法可以做到这一点 为了获得准确度,您可以使用传统的音量和单位进行测量,如LUFS/(K加权,响度),(满刻度dB)等 简单简单的方法是只绘制波形的峰值。你只会对正值感兴趣。为了获得峰值,您需要检测两点之间的方向,并在方向从上向下变化时记录第一个点(p0>p1) 对于所有方法,您最终可以应用某种
<video src="my-video.mp4"></video>
注意:
- 请给我纯JavaScript。没有图书馆
- 优点:有效(分析部分),数据最终准备就绪时快速分析,适用于较小的文件,如果缓存的URL无需重新下载即可使用
- 缺点:初始加载时间长/用户体验不好,可能占用内存/不适合大文件,音频与视频同步“分离”,强制重新使用URL*,如果大文件和/或缓存不到位,则必须重新下载/流式传输文件,目前会导致某些浏览器/版本出现问题(请参见下面的示例)
- 优点:内存/资源便宜
- 缺点:在播放完整个文件之前,绘图无法完整显示,用户可能跳过/跳转部分,也可能无法完成
- 优点:音频可以独立于视频文件加载到内存中,结果非常接近级别使用
- 缺点:可能会延迟视频的初始加载,可能无法在视频开始前及时准备好,需要提前进行额外处理
- 优点:上传时可以打印,请求视频时可以存储作为元数据提供的原始打印数据,低带宽,视频开始时数据准备就绪(假设数据表示时间段的平均值)
- 缺点:服务器上需要能够分离、分析和生成绘图数据的基础设施,这取决于数据的存储方式,可能需要修改数据库
var ctx=c.getContext(“2d”),ref,audio;
var actx=new(AudioContext | | webkitadiocontext)();
var url=“//dl.dropboxusercontent.com/s/a6s1qq4lnwj46uj/testaudiobyk3n_lo.mp3”;
ctx.font=“20px无衬线”;
ctx.fillText(“加载和处理…”,10,50);
ctx.fillStyle=“#001730”;
//加载音频
获取(url,{mode:“cors”})
.then(函数(resp){return resp.arrayBuffer()})
.then(actx.decodeAudioData.bind(actx))
.then(功能(缓冲区){
//从通道0获取数据(您需要测量所有/平均值。)
var channel=buffer.getChannelData(0);
//每个窗口的dB+绘图
var点=[0];
ctx.clearRect(0,0,c.宽度,c.高度);
ctx.移动到(x,c.高度);
对于(变量x=1,i,v;x>1),总和*c.高度);//-r/2以进行视觉补偿
}
ctx.lineWidth=2;
ctx.strokeStyle=“#c00”;
ctx.stroke();
//仅适用于音频/进度条
c、 style.backgroundImage=“url”(+c.toDataURL()+”);
c、 宽度=c.宽度;
ctx.fillStyle=“#c00”;
奥迪
volume|
level| ******
| * * **
| * * * **
|** * *** *
| ** * * * *
+---------------*-*-----************------+--- time
0 30s
video is and quiet
loud here here