如何html5在浏览器里访问手机后置摄像头
html5需要使用接口chrome30+ for android 已经实现了利用webcam,调用手机后置摄像头,代码如下:
HTML5 GetUserMedia Demo
var video = document.querySelector('video'); var audio, audioType; var canvas1 = document.getElementById('canvas1'); var context1 = canvas1.getContext('2d'); var canvas2 = document.getElementById('canvas2'); var context2 = canvas2.getContext('2d'); navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia; window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL; var exArray = []; //存储设备源ID MediaStreamTrack.getSources(function (sourceInfos) { for (var i = 0; i != sourceInfos.length; ++i) { var sourceInfo = sourceInfos[i]; //这里会遍历audio,video,所以要加以区分 if (sourceInfo.kind === 'video') { exArray.push(sourceInfo.id); } } }); function getMedia() { if (navigator.getUserMedia) { navigator.getUserMedia({ 'video': { 'optional': [{ 'sourceId': exArray[1] //0为前置摄像头,1为后置 }] }, 'audio':true }, successFunc, errorFunc); //success是获取成功的回调函数 } else { alert('Native device media streaming (getUserMedia) not supported in this browser.'); } } function successFunc(stream) { //alert('Succeed to get media!'); if (video.mozSrcObject !== undefined) { //Firefox中,video.mozSrcObject最初为null,而不是未定义的,我们可以靠这个来检测Firefox的支持 video.mozSrcObject = stream; } else { video.src = window.URL && window.URL.createObjectURL(stream) || stream; } //video.play(); // 音频 audio = new Audio(); audioType = getAudioType(audio); if (audioType) { audio.src = 'polaroid.' + audioType; audio.play(); } } function errorFunc(e) { alert('Error!'+e); } // 将视频帧绘制到Canvas对象上,Canvas每60ms切换帧,形成肉眼视频效果 function drawVideoAtCanvas(video,context) { window.setInterval(function () { context.drawImage(video, 0, 0,90,120); }, 60); } //获取音频格式 function getAudioType(element) { if (element.canPlayType) { if (element.canPlayType('audio/mp4; codecs="mp4a.40.5"') !== '') { return ('aac'); } else if (element.canPlayType('audio/ogg; codecs="vorbis"') !== '') { return ("ogg"); } } return false; } // vedio播放时触发,绘制vedio帧图像到canvas// video.addEventListener('play', function () {// drawVideoAtCanvas(video, context2);// }, false); //拍照 function getPhoto() { context1.drawImage(video, 0, 0,90,120); //将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。 } //视频 function getVedio() { drawVideoAtCanvas(video, context2); } HTML5 The Media Capture API提供了对摄像头的可编程访问,用户可以直接用getUserMedia获得摄像头提供的视频流。但实际上用html5调用手机摄像头存在很多问题:1)谷歌的发布的Chrome到了21版本后,才新增了一个用于高质量视频音频通讯的getUserMedia API,该API允许Web应用程序访问摄像头和麦克风,其他手机浏览器只有opera支持html5调用本地拍照功能2)两个浏览器均不支持访问多个摄像头:chrome不支持访问后置摄像头,pera支持访问后置摄像头的
Html5终于解决了上传文件的同时显示文件上传进度的老问题。现在大部分的网站用Flash去实现这一功能,还有一些网站继续采用Html
with enctype=multipart/form-data,但是需要修改服务器端可用才能显示给用户文件上传的进度。本质上你需要做的工作是在服务器端接收一个文件时,你发送给它一个字节流,所以你需要知道你已经接收到多少字节并以某种方式传达这些信息给客户端浏览器,在这个过程一直在不断的进行文件的上传。这种方式运行的非常好,不像Flash上传那这样充满了问题(特别是处理大文件上传的时候),然而这种方法是相当复杂的并且听起来不容易理解,因为你本质上是接管了整个服务器端的处理(获取字节流的时候)同时包括了在服务器端实现multipart/form-data协议,伴随一系列的其他事情。
使用Html5 上传文件
XMLHttpRequest 在Html5 规范中已经有全新的变化,规定了XMLHttpRequest Level 2规范(目前最新版本)包含下列新的特性:
处理字节流,例如作为上传或者下载的File,Blob,FormData对象
上传或者下载中的进度事件
跨站点请求
允许创建匿名请求
可以设置请求超时
在这篇文章中我们将能够更清楚的看到#1和#2两个特性。通常,上传文件用XMLHttpRequest并且提供上传进度信息给最终的用户,需要注意的是这种方式解决了不需要服务器端做任何改变,至少是目前处理multipart/form-data协议。所以服务器端的处理逻辑保留不变,这使得开发者适应这种技术相当容易。
图1:文件上传画面-准备上传 图2:显示上传完成画面
注意:上面的图片中,信息提示区域是提供给用户的:
当前选中文件的信息
文件名
文件大小
文件类型
上传完成多少的百分比进度条
上传速度或者上传带宽
距离上传完成大概还有多长时间
已上传文件大小
服务器端的响应
上面第6项或许看起来不重要,但事实上是相当重要的。因为我们用XMLHttpRequest,上传发生在后台,页面没有发生跳转等任何变化,所以对于你用它处理其他一些事情来说是一个非常好的特性。
Html5 Progress Event
对于Html5 Progress Events规范,Html5 Progess Events提供了下列与本次讨论相关的信息
total - 总的字节数
loaded - 到目前为止上传的字节数
lengthComputable - 可计算的已上传字节
请注意到我们需要用两个信息去计算要显示给用户的其他所有信息。要计算出来其他的信息通过上面我们得到信息是相当容易的,但是那需要一些额外的代码并且创建一个定时器。
Html5 Progress Event 应该是什么
考虑到有一部分人想更好的提供给用户所有的信息,所以Html5 Progress Event应该更好的满足需要,因为它给浏览器供应商提供这些额外信息是相当简单的,所以建议progress event应该修改成如下:
total - 总的字节数
loaded - 到目前为止上传的字节数
lengthComputable - 可计算的已上传字节
transferSpeed long类型
timeRemaining JavaScript 日期对象
Html5 上传 用XMLHttpRequest
浏览器支持情况
支持这一特性的浏览器最低版本
Firefox 4.0 beta 6
Chrome 6
Safari 5.02
IE 9 Beta and Opera 10.62 不支持这一特性
简单的示例
下面是一个完整的Html页面包含了实现文件上传并带有进度提示的JavaScript代码,只是实现了基本的功能,感兴趣的可以自己做扩展。 需要吧上传接口修改成自己服务的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Select a File to Upload
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML5 GetUserMedia Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
</head>
<body>
<input type="button" title="开启摄像头" value="开启摄像头" onclick="getMedia();" /><br />
<video height="120px" autoplay="autoplay"></video><hr />
<input type="button" title="拍照" value="拍照" onclick="getPhoto();" /><br />
<canvas id="canvas1" height="120px" ></canvas><hr />
<input type="button" title="视频" value="视频" onclick="getVedio();" /><br />
<canvas id="canvas2" height="120px"></canvas>
<script type="text/javascript">
var video = document.querySelector('video');
var audio, audioType;
var canvas1 = document.getElementById('canvas1');
var context1 = canvas1.getContext('2d');
var canvas2 = document.getElementById('canvas2');
var context2 = canvas2.getContext('2d');
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL;
var exArray = []; //存储设备源ID
MediaStreamTrack.getSources(function (sourceInfos) {
for (var i = 0; i != sourceInfos.length; ++i) {
var sourceInfo = sourceInfos[i];
//这里会遍历audio,video,所以要加以区分
if (sourceInfo.kind === 'video') {
exArray.push(sourceInfo.id);
}
}
});
function getMedia() {
if (navigator.getUserMedia) {
navigator.getUserMedia({
'video': {
'optional': [{
'sourceId': exArray[1] //0为前置摄像头,1为后置
}]
},
'audio':true
}, successFunc, errorFunc); //success是获取成功的回调函数
}
else {
alert('Native device media streaming (getUserMedia) not supported in this browser.');
}
}
function successFunc(stream) {
//alert('Succeed to get media!');
if (video.mozSrcObject !== undefined) {
//Firefox中,video.mozSrcObject最初为null,而不是未定义的,我们可以靠这个来检测Firefox的支持
video.mozSrcObject = stream;
}
else {
video.src = window.URL && window.URL.createObjectURL(stream) || stream;
}
//video.play();
// 音频
audio = new Audio();
audioType = getAudioType(audio);
if (audioType) {
audio.src = 'polaroid.' + audioType;
audio.play();
}
}
function errorFunc(e) {
alert('Error!'+e);
}
// 将视频帧绘制到Canvas对象上,Canvas每60ms切换帧,形成肉眼视频效果
function drawVideoAtCanvas(video,context) {
window.setInterval(function () {
context.drawImage(video, 0, 0,90,120);
}, 60);
}
//获取音频格式
function getAudioType(element) {
if (element.canPlayType) {
if (element.canPlayType('audio/mp4; codecs="mp4a.40.5"') !== '') {
return ('aac');
} else if (element.canPlayType('audio/ogg; codecs="vorbis"') !== '') {
return ("ogg");
}
}
return false;
}
// vedio播放时触发,绘制vedio帧图像到canvas
// video.addEventListener('play', function () {
// drawVideoAtCanvas(video, context2);
// }, false);
//拍照
function getPhoto() {
context1.drawImage(video, 0, 0,90,120); //将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。
}
//视频
function getVedio() {
drawVideoAtCanvas(video, context2);
}
</script>
</body>
</html>
HTML5 The Media Capture API提供了对摄像头的可编程访问,用户可以直接用getUserMedia获得摄像头提供的视频流。但实际上用html5调用手机摄像头存在很多问题:1)谷歌的发布的Chrome到了21版本后,才新增了一个用于高质量视频音频通讯的getUserMedia API,该API允许Web应用程序访问摄像头和麦克风,其他手机浏览器只有opera支持html5调用本地拍照功能2)两个浏览器均不支持访问多个摄像头:chrome不支持访问后置摄像头,pera支持访问后置摄像头的
怎样用html5实现在微信内置浏览器中正常播放视频
安卓版微信直接调用系统浏览器内核,系统需要升级,老系统没法用 微信本身并没有自己开发一款浏览器,安卓端的微信使用的是一个 自带的专用浏览器,一个精简版的手机QQ浏览器,新版微信的内置浏览器也是手机qq浏览器内核,对html5的支持很不错
HTML5涵盖了哪些功能?
HTML5到底涵盖了哪些功能?这些功能到底在主流的浏览器支持情况如何?1.HTML5核心:这部分主要由W3C官方的规范组成,涉及新的语义元素、新的增强的Web表单、音频和视频、以及通过JavaScript绘图的Canvas。北大青鸟云南嘉荟校区官网http:\/\/www.kmbdqn.cn\/认为这部分大多数主流浏览器均得到很好的支持;2.曾经...
支持html5的浏览器有哪些
支持HTML5的浏览器有:Chrome:该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面 Safari:是苹果计算机的操作系统Mac OS中的浏览器,使用了KDE的KHTML作为浏览器的运算核心 Edge:微软专门为新IE打造的引擎,速度快,目前已经基于此引擎开发了...
用html5写代码,在浏览器中使用<h2>修饰的内容比<h1>修饰的要大,为什么...
这个肯定是有CSS生效了,一个可能是你css文件里的,还有一种就是浏览器默认也会有一些CSS,如果你不想知道是什么原因就直接在你的CSS里重新写一下,h1{font-size:16px;}h2{font-size:14px;}。如果想知道你可以用开发者工具,一般浏览器是F12查看一下CSS代码,找到font-size,...
如何在支持HTML5的浏览器上运行WebGL程序
首先第一步确认自己安装的PHP开发环境是否正确,然后进入到php的“www”文件夹。然后打开开始->所有程序->AppServ->Control Server by Manual->Apache start 手动打开Apache服务器之后,在浏览器中输入:localhost:8080看是否能正常打开网页。我们可以在第四步中可以看到,我们输入的网址打开了一个网站,...
浏览器是如何对 HTML5 的离线储存数据进行管理的?
浏览器对 HTML5 的离线储存数据进行管理的方式是通过 manifest 文件。在离线的情况下,浏览器发现 html 头部有 manifest 属性,它会请求 manifest 文件,如果是第一次访问 app ,那么浏览器就会根据 manifest 文件的内容下载相应的资源并且进行离线存储。如果已经访问过 app 并且资源已经被缓存了,那么浏览...
edge浏览器如何修改html5
1、首先,在win10的开始菜单中找到“设置”,打开在打开的设置面板中找到“系统”。2、其次,在系统下面找到左边的“默认应用”,之后会看到应用对应的“edge浏览器”。3、最后,点击“选择默认应用”,会看到很多模式,选择html5模式即可。
请问html5 有哪些优势?谢谢
6、Canvas 对象 将给浏览器带来直接在上面绘制矢量图的能力,这意味着用户可以脱离Flash 和Silverlight,直接在浏览器中显示图形或动画。7、浏览器中的真正程序 将提供 API 实现浏览器内的编辑,拖放,以及各种图形用户界面的能力。内容修饰Tag 将被剔除,而使用CSS。8、Html5取代Flash在移动设备的地位。
如何让浏览器支持HTML5啊
而HTML5的新属性用到的不多,通常都是新属性+js兼容法 对于特殊的功能性新标签,国内几乎没有大型网站使用,如video、audio、canvas等 移动端大多是webkit内核,可放心使用HTML5 在国内,你要是等现代浏览器普及了再开始用HTML5那至少要5年以上,IE6应该还有1年左右就差不多灭绝了,IE8短时间内不会...
html5怎么在浏览器上直接访问3d文件?
你的3D文件是否是3DMAX之类做出来的?如果是的话直接可以通过3dmax导出3d模型(obj文件),然后可以下载第三方的浏览器3D引擎three.js,直接可以显示这个3D文件
丘蒋双迪: 一、iOS + Safari1、打开手机web检查器.通过【设置】>【Safari】>【高级】>【Web检查器】打开.见下图(点击查看大图),并且你会看到该选项下面对电脑操作的相应描述,照做就好.2.链接电脑(Mac)2.1 先在手机Safari中打开你想调...
北塘区17743224603: html5文件怎么在手机上打开 - ?
丘蒋双迪: 直接打开就可以了,如果提示你选择什么程序打开,选择你手机上的浏览器打开就可以了.
北塘区17743224603: 如何html5在浏览器里访问手机后置摄像头 - ?
丘蒋双迪: 我也是后来才发现, chrome好像不支持访问后置摄像头, 不知道怎么回事, 但firefox和opera是支持访问后置摄像头的,你可以试试
北塘区17743224603: 怎么在手机上查看自己做的html5页面 - ?
丘蒋双迪: 给自己的电脑设置一个局域网内的动态ip,比如:192.168.1.5 电脑安装了如xampp之类的服务器运行环境,将做好的页面放到安装目录下,手机输入192.168.1.5/+目录,或者用浏览器生成二维码功能,直接扫码.
北塘区17743224603: 如何在移动设备上调试html5开发的网页 - ?
丘蒋双迪: 移动设备上调试html5开发的网页方法:一、iOS + Safari通过【设置】>【Safari】>【高级】>【Web检查器】打开.见下图:二、Android + Chrome【设置】>【关于手机】>【版本号(Build number)】,对版本号这一项连点7下(这是官方文档里的说法)就会提示“你已成为开发者”.
北塘区17743224603: 如何使用Html5生成安卓手机桌面图标? - ?
丘蒋双迪: HTML5是没有这个功能的,可以使用浏览器的内置发送到桌面图标功能,以下以UC为例:1、进入UC浏览器首页后,点击所示的图标2、会看到【书签/历史】点击它 3、进入书签后,随后长按几秒你想发送到手机桌面的书签网址4、接着会弹出后台打开、删除书签、编辑书签、加入导航、发送至桌面五个操作按钮,点击【发送至桌面】出现添加桌面书签,点击【确定】5、发送桌面成功,退出后就可以看到书签在手机桌面上.随时想看就看,很方便的哦
北塘区17743224603: 手机浏览器怎么支持html5拍照 - ?
丘蒋双迪: 最近在做一个公司的保险信息处理系统项目,开发微信端浏览器访问的HTML5的页面,页面中有一个<input id="input" type="file"/>标签,iOS直接就支持吊起相机拍照或是相册选择,但android中不支持吊起相机拍照,只能吊起相册选择,...
北塘区17743224603: 如何通过Html网页调用本地安卓app - ?
丘蒋双迪: 通过Html网页调用本地安卓app 一、通过html页面打开Android本地的app1、首先在编写一个简单的html页面<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><...
北塘区17743224603: html5页面怎么支持手机浏览器 - ?
丘蒋双迪: html5页面是和手机浏览器兼容的.BootStrap响应式开发.开发手机端响应式布局网站,适合移动开发人员学习.也就是响应式开发.
北塘区17743224603: 怎么让手机访问html网页 - ?
丘蒋双迪: 那要把HTML文件上传服务器绑定域名,然后用手机访问域名就可以了啊!