我想使用javascript getUserMedia函数从手机相机中截取屏幕截图,但分辨率非常差。
T*
没有错误代码,但分辨率不好,我无法阅读照片文字。 有没有一种方法可以从相机获得真实的图像质量?
答案 0 :(得分:0)
MediaCapture
这就是您通过getUserMedia使用的内容。
如果您的相机仅支持1920x1080、1280x720和640x480分辨率,则Media Capture的浏览器实现可以模拟1280x720的480x640提要(请参见MediaStream)。通过测试(主要是Chrome),浏览器通常会将720缩小到640,然后裁剪中心。有时,当我使用虚拟相机软件时,我看到Chrome在不支持的分辨率周围添加了人工黑色填充。客户会看到一条成功消息和正确尺寸的提要,但一个人会看到质的下降。由于存在这种仿真,因此无法保证Feed正确或未按比例缩放。但是,通常它将具有要求的正确尺寸。
您可以了解约束here。基本上可以归结为:给我一个接近x的分辨率。然后,浏览器通过自己的实现确定拒绝约束并抛出错误,获取分辨率或模拟分辨率。
有关该设计的更多信息,请参见mediacapture规范。特别是:
RTCPeerConnection是一个有趣的对象,因为它起作用 同时作为网络的接收器和源 流。作为接收器,它具有源转换功能(例如, 降低比特率,放大/缩小分辨率并进行调整 帧速率),并且作为来源,可以更改自己的设置 跟踪来源。
这样做的主要原因是允许n个客户端访问相同的媒体源,但可能需要不同的分辨率,比特率等,因此尝试通过仿真/缩放/转换来解决此问题。对此不利的是,您永远不会真正知道源分辨率是什么。
ImageCapture
这可能是您的解决方案。
如果对60FPS视频的要求不是很高,并且兼容性还很强,则可以轮询ImageCapture来模拟摄像机并从摄像机接收到更清晰的图像。
您必须检查客户端支持,然后潜在地回退MediaCapture。
API可以控制相机的功能,例如缩放,亮度,对比度,ISO和白平衡。最重要的是,Image Capture允许您访问任何可用的设备相机或网络摄像头的全分辨率功能。以前在网络上拍摄照片的技术使用的是视频快照(将MediaCapture渲染到Canvas),其分辨率低于静态图像的分辨率。
https://developers.google.com/web/updates/2016/12/imagecapture
及其polyfill: