getUserMediaAPI介绍无需浏览器插件即可访问硬件媒体设备。getUserMediaAPI原为navigator.getUserMedia,已被最新的web标准废除,改为navigator.mediaDevices.getUserMedia(),但浏览器支持不如旧API普及。MediaDevices.getUserMedia()方法提示用户允许使用视频和/或音频输入设备,例如相机或屏幕共享和/或麦克风。如果用户授权,则返回一个Promise对象,MediaStream对象作为Promise对象的Resolved[success]状态的回调函数参数。相应地,如果用户拒绝权限,或者没有媒体可用时,PermissionDeniedError或NotFoundError作为Promise的Rejected[failure]状态的回调函数参数。请注意,返回的Promise可能既不解决也不拒绝,因为用户不需要选择允许或拒绝。BrowserCompatibilitySyntaxnavigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream){...}).catch(function(error){...})参数容器:指定请求的媒体类型,主要包括对于视频和音频,必须指定至少一种类型或两种类型。如果浏览器找不到指定的媒体类型或者不能满足相应的参数要求,返回的Promise对象会处于rejected[failed]状态,NotFoundError会作为rejected[failed]回调的参数。[示例]不带任何参数请求音频和视频:{audio:true,video:true}[示例]使用1280x720的摄像头分辨率:{audio:true,video:{width:1280,height:720}}[示例]]请求获得最小分辨率1280x720:{audio:true,video:{width:{min:1024,ideal:1280,max:1920},height:{min:776,ideal:720,max:1080}}当请求中包含理想值时,该值具有更高的权重,这意味着浏览器将首先尝试找到最接近指定理想值的设置或摄像头(如果设备有多个摄像头)。[示例]优先使用前置摄像头(如果有):{audio:true,video:{facingMode:"user"}}[示例]强制使用后置摄像头:{audio:true,video:{facingMode:{exact:"environment"}}}成功回调函数seccessCallback的参数stream:stream是MediaStream的对象,表示媒体内容的数据流。它可以通过URL.createObjectURL转换并设置为Video或Audio元素的src属性。新的浏览器也可以通过设置srcObject属性直接使用。失败回调函数errorCallback的参数error,可能的异常有:AbortError:硬件问题NotAllowedError:用户拒绝了当前浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户拒绝了所有媒体全局访问请求。NotFoundError:找不到满足请求参数的媒体类型。NotReadableError:操作系统上的硬件、浏览器或网页错误导致无法访问设备。OverConstrainedError:设备无法满足指定的要求。SecurityError:安全错误,在调用getUserMedia()的文档上禁止使用设备媒体。启用还是禁用此机制取决于各个用户的偏好。TypeError:类型错误,约束对象未设置[empty],或两者都设置为false。示例:HTML5调用媒体设备的摄像头本例中请求访问用户硬件设备的摄像头,通过Video元素显示视频流。网页上提供了一个“拍照”按钮,通过Canvas截取并绘制视频画面。核心代码如下:HTML
