注:我昨天刚发了一篇[关于WebRTC的文章](http://blog.csdn.net/hfahe/article/details/8445000),但是WebRTC的变化如此之大,让我不得不再用一篇文章的篇幅从另外一个方面详细阐述它带给我们的变化。Firefox、Opera、Android、iOS平台的广泛支持会让它可以立即落地,实现很多有趣的视频功能和应用。你准备好使用它了吗?
关键词:视频 [RTCPeerConnection](http://updates.html5rocks.com/tag/rtcpeerconnection) [getUserMedia](http://updates.html5rocks.com/tag/getusermedia) WebRTC 多媒体
--------
WebRTC在过去的几周内发生了**很多事情**,有一个重大的更新。
特别是我们很高兴地看到多个浏览器和平台开始支持WebRTC。
getUserMedia目前可以在Chrome浏览器中直接使用,此外还有Opera、Firefox Nightly构建版、Aurora浏览器(尽管在Firefox中需要[设置首选项](https://hacks.mozilla.org/2012/11/progress-update-on-webrtc-for-firefox-on-desktop/comment-page-1/#comment-1851192 "Firefox在桌面上WebRTC的最新进展"))。可以看一看[simpl.info/gum](http://www.simpl.info/gum "Simple cross-platform getUserMedia demo")上getUserMedia跨浏览器的演示,以及Chris Wilson使用getUserMedia来进行网络音频输入的[惊人演示](http://webaudiodemos.appspot.com/)。
Chrome稳定版已经支持webkitRTCPeerConnection,并且无须在about:flgas里设置。Chrome24及以上版本已经支持TURN服务器(TURN协议允许NAT或者[防火墙](http://baike.baidu.com/view/3067.htm)后面的对象可以通过TCP或者UDP接收到数据。这在使用了对称式的NAT或者防火墙的网络中尤其具有实用价值)。在[simpl.info/pc](http://www.simpl.info/peerconnection "Simple cross-platform getUserMedia demo")上有一个Chrome RTCPeerConnection非常简单的演示,以及在[apprtc.appspot.com](http://updates.html5rocks.com/2012/12/apprtc.appspot.com "Video chat demo")上有一个超棒的视频聊天应用。(关于命名的解释:经过几次迭代,目前API的命名为webkitRTCPeerConnection。其他名称及实现已被废弃。当W3C标准已经稳定时,webkit前缀将被删除。)
桌面版Firefox Nightly和Aurora浏览器也已经支持WebRTC,而在iOS和Android上可以通过[爱立信Bowser浏览器](https://labs.ericsson.com/apps/bowser "爱立信库巴浏览器")支持。
![](https://box.kancloud.cn/2016-08-09_57a9aa56c25c7.jpg)
**DATACHANNEL**
[DataChannel](http://www.html5rocks.com/en/tutorials/webrtc/basics/#toc-datachannel "HTML5Rocks文章的DataChannel章节")是用于任意数据高性能、低延时、点对点通信的WebRTC API。这个API非常简单,类似于WebSocket,但是它的通信是直接发生在浏览器之间的,所以DataChannel的速度远远超过WebSocket,即便我们还需要一个中继(TURN)服务器(用“TCP/UDP打孔”的方式来穿越防火墙和防止网络地址转换失败)。
Chrome 25计划支持DataChannel,需要通过about:flags激活-尽管它可能会错过这个版本。这将仅用于实验,可能不会充分发挥全部的作用,而且无法和Firefox进行通信。DataChannel在以后的版本中会更加稳定,并且可以和Firefox互通。
Firefox Nightly构建版和Aurora支持mozGetUserMedia、mozRTCPeerConnection和DataChannel(但是不要忘记在about:flags中设置参数!)
在Firefox中运行DataChannel的截图如下:
![](https://box.kancloud.cn/2016-08-09_57a9aa56d78ba.jpg)
该演示URL为[http://mozilla.github.com/webrtc-landing/data_test.html](http://mozilla.github.com/webrtc-landing/data_test.html "Mozilla DataChannel的例子")。下面是代码片断:
~~~
pc1.onconnection = function() {
log("pc1 onConnection ");
dc1 = pc1.createDataChannel("This is pc1",{}); // reliable (TCP-like)
dc1 = pc1.createDataChannel("This is pc1",{outOfOrderAllowed: true, maxRetransmitNum: 0}); // unreliable (UDP-like)
log("pc1 created channel " + dc1 + " binarytype = " + dc1.binaryType);
channel = dc1;
channel.binaryType = "blob";
log("pc1 new binarytype = " + dc1.binaryType);
// Since we create the datachannel, don't wait for onDataChannel!
channel.onmessage = function(evt) {
if (evt.data instanceof Blob) {
fancy_log("***pc2 sent Blob: " + evt.data + ", length=" + evt.data.size,"blue");
} else {
fancy_log('pc2 said: ' + evt.data, "blue");
}
}
channel.onopen = function() {
log("pc1 onopen fired for " + channel);
channel.send("pc1 says Hello...");
log("pc1 state: " + channel.state);
}
channel.onclose = function() {
log("pc1 onclose fired");
};
log("pc1 state:" + channel.readyState);
}
~~~
[hacks.mozilla.org博客](https://hacks.mozilla.org/2012/11/progress-update-on-webrtc-for-firefox-on-desktop/comment-page-1/#comment-1851192)上有更多Firefox实现的信息和演示。2013年初Firefox 18将会提供WebRTC基础功能的支持,并且附加功能在支持计划中,包括getUserMedia和createOffer/应答限制,以及TURN(允许浏览器在防火墙后进行互相通信)。
WebRTC的更多信息,请参阅[WebRTC入门](http://www.html5rocks.com/en/tutorials/webrtc/basics/)。这里甚至还有一本正在印刷中的[WebRTC书籍](http://webrtcbook.com/),目前以电子书格式提供。
**分辨率限制**
Chrome 24及以上版本已经实现了[分辨率限制](http://tools.ietf.org/html/draft-alvestrand-constraints-resolution-00#page-4)功能。它可用于为getUserMedia()和RTCPeerConnection的addStream()调用设置视频的分辨率。
在[simpl.info/getusermedia/constraints](http://simpl.info/getusermedia/constraints/index.html "Resolution Constraints example on simpl.info")上有一个示例,通过设置一个断点和改变参数值展示不同的限制,。
这里有几个陷阱。在一个浏览器标签中设置getUserMedia的分辨率限制会影响所有的标签。设置不允许限制分辨率会出现一个非常奇怪的错误信息:
~~~
navigator.getUserMedia error: NavigatorUserMediaError {code: 1, PERMISSION_DENIED: 1}
~~~
如果你在本地而不是服务器上使用getUserMedia,会出现和上面一样的错误。
**流式屏幕捕获**
[Chrome开发版](https://developer.chrome.com/trunk/extensions/tabCapture.html)已经支持标签捕获。因此我们可以从标签中捕获一个可视区域,作为视频流用于本地或者RTCPeerConnection的addStream()。这对屏幕捕获和网页共享非常有用(《[使用WebRTC实现远程屏幕共享](http://blog.csdn.net/hfahe/article/details/8445000)》这篇文章正是讲到这方面的内容)。要了解更多信息,请参阅[WebRTC标签内容捕获建议](http://www.chromium.org/developers/design-documents/extensions/proposed-changes/apis-under-development/webrtc-tab-content-capture "WebRTC选项卡的内容捕获建议")。
译自:http://updates.html5rocks.com/2012/12/WebRTC-hits-Firefox-Android-and-iOS
转载请注明:来自蒋宇捷的博客-http://blog.csdn.net/hfahe
- 前言
- AutoPager的简单实现
- 利用CSS3特性巧妙实现漂亮的DIV箭头
- IE9在Win7下任务栏新特性简介
- 浏览器九宫格的简单实现
- Raphael js库简介
- 使用CSS3构建Ajax加载动画
- 用CSS3创建动画价格表
- 用CSS3实现浏览器的缩放功能
- 用纯CSS3实现QQ LOGO
- 用CSS3创建旋转载入器
- 使用Javascript开发移动应用程序
- 用HTML5创建超酷图像灰度渐变效果
- 使用CSS3创建文字颜色渐变(CSS3 Text Gradient)
- 仅用CSS创建立体旋转幻灯片
- 如何创建跨浏览器的HTML5表单
- 用CSS3实现动画进度条
- HTML5 Guitar Tab Player
- 奇妙的HTML5 Canvas动画实例
- 谈HTML5和CSS3的国际化支持
- 实现跨浏览器的HTML5占位符
- 前端开发必备工具:WhatFont Bookmarklet-方便的查询网页上的字体
- 使用HTML5和CSS3来创建幻灯片
- HTML5之美
- 如何使用HTML5创建在线精美简历
- 以小见大、由浅入深-谈如何面试Javascript工程师
- 快速入门:HTML5强大的Details元素
- 用CSS3实现图像风格
- HTML5视频字幕与WebVTT
- 用纯CSS3实现Path华丽动画
- 用3个步骤实现响应式网页设计
- 遇见CSS3滤镜
- 关于CSS3滤镜的碎念
- 用纯CSS3绘制萌系漫画人物动态头像
- CSS3新的鼠标样式介绍
- 用HTML5献上爱的3D玫瑰
- 对HTML5 Device API相关规范的解惑
- 如何使用HTML5实现拍照上传应用
- 2012第一季度国外HTML5移动开发趋势
- HTML5新特性:范围样式
- 百度开发者大会-《用HTML5新特性开发移动App》PPT分享
- Chrome 19对于HTML5最新支持的动态:电池状态API,全屏API,震动API,语音API
- 遇见Javascript类型数组(Typed Array)
- 用HTML5 Audio API开发游戏音乐
- 用HTML5实现人脸识别
- 用Javascript实现人脸美容
- Chrome 20对于HTML5最新支持的动态:颜色输入,网络信息API,CSS着色器
- 用HTML5实现手机摇一摇的功能
- 用HTML5实现iPad应用无限平滑滚动
- 用非响应式设计构建跨端Web App
- 了解SVG
- HTML5图像适配介绍
- HTML5安全:内容安全策略(CSP)简介
- HTML5安全:CORS(跨域资源共享)简介
- 用CSS3 Region和3D变换实现书籍翻页效果
- 谈谈移动App的思维误区
- Chrome新特性:文件夹拖拽支持
- 《关注HTML5安全》
- HTML5安全风险详析之一:CORS攻击
- HTML5安全风险详析之二:Web Storage攻击
- HTML5图像适配最新进展:响应式图片规范草案
- HTML5移动Web App相关标准状态及路线图
- HTML5安全风险详析之三:WebSQL攻击
- Chrome引入WebRTC支持视频聊天App
- HTML5安全风险详析之四:Web Worker攻击
- HTML5安全风险详析之五:劫持攻击
- HTML5安全风险详析之六:API攻击
- HTML5安全攻防详析之七:新标签攻击
- 在iOS Safari中播放离线音频
- 使用WebRTC实现远程屏幕共享
- Firefox、Android、iOS遇见WebRTC
- HTML5光线传感器简介
- HTML5安全攻防详析之八:Web Socket攻击
- HTML5安全攻防详析之完结篇:HTML5对安全的改进
- 激动人心!在网页上通过语音输入文字 - HTML5 Web Speech API介绍
- Web滚动性能优化实战
- 用CSS3设计响应式导航菜单
- 用HTML5构建高性能视差网站
- 漫谈@supports与CSS3条件规则
- HTML5下载属性简介
- 如何开发优秀的HTML5游戏?-迪斯尼《寻找奥兹之路》游戏技术详解(一)
- 如何开发优秀的HTML5游戏?-迪斯尼《寻找奥兹之路》游戏技术详解(二)
- 趋势:Chrome为打包应用提供强大新特性
- 从HTML5移动应用现状谈发展趋势
- 基于HTML5的Web跨设备超声波通信方案