Video Analysis
-
video -> canvas ->canvas
-
黑屏屏蔽:
- 画布getImageData()计算rgba颜色值,通过算法比较
- ImageData 全黑状态[0,0,0,255];
- 过滤算法:
- Uint8ClampedArray.prototype.findIndex()全部匹配,时间测试(500X300画布)
- 实现:
data- 无黑色:[0-6]ms
- 全黑色:[14-20]ms
- 抽样点匹配,时间测试(基础5点+抽样频率50像素一个点)(500X300画布) 50个点const point1=contextdata;if"0,0,0,255"!==point1return true;const point2=contextdata;if"0,0,0,255"!==point2return true;const point3=contextdata;if"0,0,0,255"!==point3return true;const point4=contextdata;if"0,0,0,255"!==point4return true;const point5=contextdata;//[0,0,0,255]if"0,0,0,255"!==point5return true;//采样const length=Math;const depth=Math;forlet i =1;i<length;i++forlet j =1;j<depth;j++const point = contextdata;if"0,0,0,255"!==pointreturn true;return false;
- 无黑色:[0-2]ms
- 全黑色:[0-2]ms
- Uint8ClampedArray.prototype.findIndex()全部匹配,时间测试(500X300画布)
- 通过比较验证,抽样算法更优,50分辨率几乎能够确保有光源即可检测到,光源抽样范围足够小,可调节
- 透明屏蔽:等同于黑屏屏蔽
- 使用requestAnimationFrame 每一帧执行时间是在27-40ms左右,1s中帧率低于60fps,会出现视屏卡顿,采用setTimeout 0 替代