摄像头检测
打开摄像头,看实际拿到的分辨率与帧率 —— 注意是"实际拿到",不是"你请求的":摄像头、驱动和浏览器三方合起来,经常给出一个和请求不一样的数。画面只在本机处理,不上传、不录制。
—
"请求的"和"实际拿到的"为什么不一样
你把 1920×1080 填进约束里,摄像头不保证给你这个数:它可能只有 1280×720,也可能给你一个比请求更大的值。浏览器不会因为你请求了一个它给不了的分辨率就报错,它会退回一个最接近的。所以这一页把两个数分开印 —— 只看"请求"那一栏,你会以为摄像头是 1080p 的。
帧率是量出来的
getSettings().frameRate 是驱动声称的帧率,而这一页报的是实际出帧的节奏:用 requestVideoFrameCallback 数一秒内真正到达的画面帧。两者经常对不上 —— 光线不足时摄像头会自动降帧来换曝光,那一刻报出来的 fps 会明显低于标称值,而画面看起来只是"有点卡"。
这一页不评价画质
分辨率、帧率是数字,而画质不是:噪点、偏色、对焦、动态范围,这些要控制光照、用标准色卡、在固定参数下比较才有意义。所以这一页只给数字和画面,不给你一个"画质评分"。想快速判断偏色,盯着画面里那张白纸看比任何自动分数都可靠。
常见问题
先看摄像头旁边那颗指示灯亮不亮 —— 不亮说明它根本没被打开。亮着但画面黑,通常是:镜头盖没打开、摄像头上有个滑块式的物理遮挡,或者别的程序抢占了设备。某些笔记本还有 Fn 键控制摄像头开关。
不会。 视频流只接到 <video> 元素上显示,既不录制也不发送。整页没有网络请求,关掉按钮之后摄像头立刻被释放。
三个常见原因:(1) 光线不足 —— 摄像头自动延长曝光时间,帧率跟着掉;(2) USB 带宽不够(同一台机器上还插着别的 USB 摄像头或设备);(3) 驱动或摄像头本身就是 30fps 的。把灯打开再看一次,能最快分辨是哪一种。
授权之后,上面的「设备」下拉里会列出所有摄像头(授权之前浏览器不给标签,只给一堆空名字)。手机上默认用第一个,也就是通常的前置。
