对HTML5 Device API相关规范的解惑
最后更新于:2022-04-01 19:43:29
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-09_57a9a2deb502a.png)
在HTML5中,Device API相关内容众多,而且结构比较复杂,内容有所重叠,大家在使用时可能会遇到许多问题,下面我针对这些问题谈一下个人的理解。
1、**The Media CaptureAPI VS System Information API,两者都可以访问摄像头和话筒,有什么区别?**
背景:[The Media Capture API](http://www.w3.org/TR/media-capture-api/)定义了一个高级别的API来访问设备的摄像头和话筒,SystemInformation API的[输入设备](http://www.w3.org/TR/2010/WD-system-info-api-20100202/#output-devices)展示了系统的输入设备,例如鼠标、键盘、摄像头和话筒。
**答案**:The Media CaptureAPI定义的API提供了对设备的音频、图像和视频的捕捉能力。注意,它是一个高级别的接口,实现了照相机和话筒的可编程访问。
System InformationAPI集中在关注设备状态(虽然它也有set方法)。例如可以读取摄像头以下属性:supportsVideo(是否支持视频录制)、hasFlash(是否支持闪光灯)、sensorPixels(图像传感器像素)、maxZoomFactor(最大支持多少变焦),另外还可以遍历所有摄像头。
所以,前者是高级别接口来实现对摄像头和话筒的可编程访问,后者关注摄像头和话筒的设备状态。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-09_57a9a2decf44f.jpg)
摄像头和话筒是手机的重要功能
2、**DeviceOrientationEvent VS System Information API VS Sensor API,三者都可以读取传感器信息,有何区别?**
背景:DeviceOrientationEvent提供了对于设备物理方向和运动信息的事件处理,常见的信息来源包括陀螺仪、罗盘等传感器。System Information API里专门有一部分是传感器结果。而Sensor API本身就是为传感器而定义的API。
**答案**:DeviceOrientationEvent主要关注运动和方位传感器,并且它并不提供对基本传感器数据的访问或者对传感器的控制,而是高层次的封装。
System InformationAPI目前主要关注环境传感器,包括环境亮度、环境温度、大气压力、临近距离(临近传感器,还记的面部贴到iPhone屏幕时屏幕自动关闭吗?),另外没有其他传感器支持。
Sensor API如其名,准备提供对所有已知传感器的访问,并且提供的是原始的传感器数据。
所以,前者是对运动和方位传感器高级别的封装,第二个主要关注环境传感器的信息,第三个会提供所有传感器的原始数据。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-09_57a9a2dee27fd.jpg)
传感器支持的重力感应游戏
3、**Speech InputAPI VS The Media Capture API,两者都和语音输入有关,有何异同?**
背景:Speech Input API支持语音输入和识别,The Media Capture API可以获取输入的音频。
**答案**:Speech Input API由Google提出,目前还只是文件草案,而且主要用于语音识别,旨在帮助Web开发者使用标准的语音识别软件。由于未来语音识别的重要性,可以想见这个API在Google、Apple和Microsoft之间将会有一番标准的剧烈争斗,不会轻易的成为工作组草案。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-09_57a9a2df0413e.jpg)
Google与Apple将会有一番龙争虎斗
The Media Capture API作为目前W3C认可的工作组草案,关注的主要是音频采集。
所以,前者主要是用于语音识别的文件草案,而后者是关注音频采集的工作组草案。
4、**The Media Capture VS HTML Media Capture,两者有何联系和区别?**
背景:两者命名类似,又都是[DeviceAPI的组成部分](http://www.w3.org/2009/dap/)。
**答案**:两者都关注摄像头和话筒。HTML Media Capture API如起名,只能通过表单在捕获后获取到图像和音视频,它是一个简单的,很容易实现的,能在大多数情况下方便使用的API。The Media Capture API(getUserMedia)来源于Device标签,是对摄像头和话筒的可编程访问,未来将成为webRTC的一个规范(有可能不属于HTML5),Opera Mobile和Chrome都提供了对它的支持。它非常强大和好玩,可以实时的捕捉视频,不过它更复杂,并且有一些安全问题。
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-09_57a9a2df1df95.png)
使用HTML Media Capture来进行文件上传时的多媒体采集
5、**Device APIVS Device Characteristics,两者有何联系和区别?**
背景:Device API包含SystemInformation API,而System Information API包括Device Characteristics、Sensor Results和Network Characteristics,见[http://dev.w3.org/2009/dap/system-info/](http://dev.w3.org/2009/dap/system-info/)。
**答案**:Device API是设备整体所有相关的API,包括硬件、软件等多个方面,而Device Characteristics集中在设备硬件特性上。Device API整体结构如下:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-09_57a9a2df35bd8.png)
Device API结构
最后,你会注意到在大部分HTML5草案页面里“Statusof This Document”都会有如下文字“Publication as a Working Draft does not imply endorsement by the W3C Membership.This is a draft document and may be updated, replaced or obsoleted by otherdocuments at any time. It is inappropriate to cite this document as other thanwork in progress.”,这代表这些规范都还只是草案,并不是最终稳定状态,W3C随时有可能会进行调整。
附:API地址
The Media Capture API:[http://www.w3.org/TR/media-capture-api/](http://www.w3.org/TR/media-capture-api/)
HTML Media Capture API:[http://www.w3.org/TR/2011/WD-html-media-capture-20110414/](http://www.w3.org/TR/2011/WD-html-media-capture-20110414/)
System InformationAPI:[http://www.w3.org/TR/2010/WD-system-info-api-20100202/](http://www.w3.org/TR/2010/WD-system-info-api-20100202/)
OrientationEvent:[http://www.w3.org/TR/orientation-event/](http://www.w3.org/TR/orientation-event/)
Sensor API:[http://dev.w3.org/2009/dap/system-info/Sensors.html](http://dev.w3.org/2009/dap/system-info/Sensors.html)
Speech InputAPI:[http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html](http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html)
原创文章,转载请标明出处:[蒋宇捷的专栏](http://blog.csdn.net/hfahe)
';