本文摘自PHP中文网,作者黄舟,侵删。
1、概述
WebRTC是“网络实时通信”(Web Real Time Communication)的缩写,它主要用来让浏览器实时获取和交换视频、音频和数据。
WebRTC共分三个API。
getUserMedia主要用于获取视频和音频信息,后两个API用于浏览器之间的数据交换。
2、getUserMedia
2.1 简介
首先,检查浏览器是否支持getUserMedia方法。
1 2 3 4 5 6 7 8 | navigator.getUserMedia ||
(navigator.getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia || navigator.msGetUserMedia);
if (navigator.getUserMedia) {
//do something
} else {
console.log('your browser not support getUserMedia');
}
|
Chrome21、Opera 18和Firefox 17支持该方法,目前IE还不支持,上面代码中的msGetUserMedia只是为了确保将来的兼容。
getUserMedia方法接受三个参数。
1 | getUserMedia(streams, success, error);
|
含义如下:
用法如下:
1 2 3 | navigator.getUserMedia({
video: true,
audio: true}, onSuccess, onError);
|
上面的代码用来获取摄像头和麦克风的实时信息。
如果网页使用了getUserMedia,浏览器就会询问用户,是否许可提供信息。如果用户拒绝,就调用回调函数onError。
发生错误时,回调函数的参数是一个Error对象,它有一个code参数,取值如下:
PERMISSION_DENIED:用户拒绝提供信息。
NOT_SUPPORTED_ERROR:浏览器不支持指定的媒体类型。
MANDATORY_UNSATISHIED_ERROR:指定的媒体类型未收到媒体流。
2.2 展示摄像头图像
将用户的摄像头拍摄的图像展示在网页上,需要先在网页上放置一个video元素。图像就展示在这个元素中。
1 | < video id = "webcam" ></ video >
|
然后,用代码获取这个元素。
1 2 3 | function onSuccess(stream) {
var video = document.getElementById('webcam');
//more code}
|
最后,将这个元素的src属性绑定数据流,摄像头拍摄的图像就可以显示了。
1 2 3 4 5 6 7 8 9 | function onSuccess(stream) {
var video = document.getElementById('webcam');
if (window.URL) {
video.src = window.URL.createObjectURL(stream);
} else {
video.src = stream;
}
video.autoplay = true; //or video.play();}
|
它的主要用途是让用户使用摄像头为自己拍照。
2.3 捕获麦克风声音
通过浏览器捕获声音,相对复杂,需要借助Web Audio API。
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 | function onSuccess(stream) {
//创建一个音频环境对像
audioContext = window.AudioContext || window.webkitAudioContext;
context = new audioContext();
//将声音输入这个对像
audioInput = context.createMediaStreamSources(stream);
//设置音量节点
volume = context.createGain();
audioInput.connect(volume);
//创建缓存,用来缓存声音
var bufferSize = 2048;
// 创建声音的缓存节点,createJavaScriptNode方法的
// 第二个和第三个参数指的是输入和输出都是双声道。
recorder = context.createJavaScriptNode(bufferSize, 2, 2);
// 录音过程的回调函数,基本上是将左右两声道的声音
// 分别放入缓存。
recorder.onaudioprocess = function(e){
console.log('recording');
var left = e.inputBuffer.getChannelData(0);
var right = e.inputBuffer.getChannelData(1);
// we clone the samples
leftchannel.push(new Float32Array(left));
rightchannel.push(new Float32Array(right));
recordingLength += bufferSize;
} // 将音量节点连上缓存节点,换言之,音量节点是输入
// 和输出的中间环节。
volume.connect(recorder);
// 将缓存节点连上输出的目的地,可以是扩音器,也可以
// 是音频文件。
recorder.connect(context.destination);
}
|
3、实时数据交换
WebRTC的另外两个API,RTCPeerConnection用于浏览器之间点对点的连接,RTCDataChannel用于点对点的数据通信。
阅读剩余部分
相关阅读 >>
使用HTML5给按钮背景设计不同的动画的简单示例(图文)
使用canvas实现迷宫游戏
HTML5中的postmessage api基本使用方法分享
HTML5多媒体audio和video详细介绍(一)
用js+HTML5实现的小游戏-- 捕鱼达人游戏
HTML5 storag存储详解
h5在canvas中实现自定义路径动画
HTML5怎么添加图片动画效果
h5和css3制作一个相册的代码实例
HTML5开发工具有哪些
更多相关阅读请进入《HTML5》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » HTML5新特性之WebRTC详解