通过WebRTC实现实时视频通信(一)
WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla基金会、Opera支持下被包括进万维网联盟的W3C推荐标准。
不需要插件的实时通信
想像一下,如果你的手机、电视、电脑都可以通过一个平台进行通信,想像一下你可以在Web应用中轻松地加入视频聊天和p2p数据分享,你还没有兴奋吗?这就是WebRTC。
想试一试吗?WebRTC现在已经被集成到Chrome,Opera和火狐上了,你可以试试这个应用:
在Chrome、Opera或Firefox中打开apprtc.appspot.com。
点击允许按钮允许应用使用你的摄像头。
在新的选项卡,甚至在另外一台电脑上打开正文显示的URL。
这里是这个应用的具体教程: later in this article。
开始
如果你没有时间阅读这个系列的文章,想直接编码,你可以这样:
你果你没有用过getUserMedia,要先学习一下它,教程:HTML5 Rocks article ,Demo:simpl.info/gum。
掌握RTCPeerConnection API,教程:simple example below ,Demo:simpl.info/pc,。
了解一下WebRTC的实现、防火墙和NAT转发,教程:apprtc.appspot.com.
webRTC使用大头照拍摄:gbtags.com/gb/share/2491.htm
或者你可以直接跳到这一步:在WebRTC codelab上一步一步的学习如何构建一个完整的视频聊天应用程序,包括一个简单的信号服务器。
关于WebRTC的小故事
其实一个Web开发的终极挑战就是通过音频和视频进行实时通信,视频通信应该像文本通信一样自然,如果没有它,我们在用户交互方面的创新能力会受到限制。
在过去,实时通信都比较复杂,需要非常丰富的音频和视频技术才能被进行开发。 完整的实现实时通信需要整合大量的数据和服务,在Web上实现尤其困难。
2008年,Gmail视频聊天火了。2011年谷歌发布了Hangouts,收购了GIPS,GIPS是一个RTC方向的公司,然后开源了它的相关技术,在同年5月,爱立信构建了 第一个WebRTC的实现。
Hangouts 是谷歌在2013年的Google I/O大会上发布了统一消息服务,整合了此前的Google Talk、Google+ Messenger和 Hangouts视频聊天服务等产品。新的Hangouts完全基于云计算技术,将成为谷歌其他服务的一大支柱。尽管谷歌在热门的移动消息应用市场动作较 慢,但谷歌正在为未来的发展做准备。从表面来看,Hangouts是类似WhatsApp和Facebook Messenger的又一款消息应用。
WebRTC目前用做实时通信、免费视频插件、音频和视频数据传输。以下是实际的应用:
很多Web服务已经使用了RTC,但是都需要下载插件或是原生app,比如Skype,Facebook和Google Hangouts。
下载安装更新插件非常麻烦。
插件不容易发现问题,测试很困难,大部分都需要授权,开发成本太高。
安全性
这里有几个实时通信应用可以出现的安全性问题:
未加密的媒体数据流可以会在浏览器或通信途中被获取。
应用可能会在用户不知情的情况下记录视频和其它信息。
恶意软件或病毒可能被安装在一个不起眼的插件或应用中。
WebRTC通过各种特性避免了这些问题:
对数据流和信号量进行编码加密。
。WebRTC 不是一个插件,可以运行在浏览器的沙箱中,组件不需要单独安装。
摄像头和手机必须通过严格的授权,只有在显示用户界面的时候才能调用。
关于WebRTC安全性的详细讨论不在本文的讲解范围内,如果你想了解更多这方面的问题,可以看一看IETF提供的 WebRTC Security Architecture。
开发者工具
当WebRTC会话被创建的时候,chrome://webrtc-internals (opera://webrtc-internals )就会提供会话详细的数据流和图表:
chrome://webrtc-internals 截图
跨浏览器的 interop notes
adapter.js 是一个JavaScript 的WebRTC适配, 由Google贡献,它可以解决浏览器差异化的规范的变化。
想了解更多WebRTC信号量,可以通过apprtc.appspot.com 查看输出日至。
Chrome bugsBug报告:crbug.com/new 。Opera:bugs.opera.com/wizard/ 。Firefox:bugzilla.mozilla.org。
在哪里使用WebRTC
WebRTC有以下三个API:
MediaStream (别名 getUserMedia)
getUserMedia 可以在Chrome, Opera 和 Firefox中实现。 你可以看看这个跨平台的Demo:simpl.info/gum 和Chris Wilson的 例子 ,让getUserMedia作为音频的输入。
RTCPeerConnection 是在Chrome中和Android设备中使用,经过几次迭代之后RTCPeerConnection现在支持 Chrome and Opera 作为webkitRTCPeerConnection,Firefox 作为mozRTCPeerConnection。
RTCDataChannel 支持Chrome 25, Opera 18 和Firefox 22 以上的版本。
通常有报道说一个平台支持WebRTC,一般都说他们支持getUserMedia,而不支持其它RTC组件,开发的时候需要先弄清楚。
我的第一个WebRTC项目
WebRTC 项目需要做以下几件事情:
取到音频、视频或其它数据的数据流。
得到网络信息,如IP地址和端口,通过网络和其它WebRTC客户端交换数据,解决防火墙的NAT转发的问题。
协调信号来报告错误,启动或关闭会话。
交换媒体和客户端信息,处理如分辨率和编码解码器问题。dia and client capability, such as resolution and codecs.
数据流通信。
为了实现数据流之间的通信,WebRTC实现了以下的接口:
MediaStream: 取得数据流,比如从摄像头和手机中获取。
RTCPeerConnection: 音频和视频通话,设备加密和带宽管理。
RTCDataChannel: 点对点通信。
总结
大家应该大概明白WebRTC的概要了。在下一篇文章中,我们会针对这三个API来具体的讲解构建WebRTC的流程。
通过WebRTC实现实时视频通信(一)的更多相关文章
- 通过WebRTC实现实时视频通信(三)
通过WebRTC实现实时视频通信(一) 通过WebRTC实现实时视频通信(二) 通过WebRTC实现实时视频通信(三) 在这篇文章中我们继续了解WebRTC的相关API,RTCPeerConnecti ...
- 通过WebRTC实现实时视频通信(二)
通过WebRTC实现实时视频通信(一) 通过WebRTC实现实时视频通信(二) 通过WebRTC实现实时视频通信(三) 在上一篇文章中,我们讲解了WebRTC的概述.历史.安全性和开发者工具.接下来我 ...
- WebRTC学习资料大全
在学习WebRTC,找了些资料,记录一下,供以后查询. 有些需要FQ才能看 WebRTC 介绍 官网在这里:https://webrtc.org/.然后这里有一个官方的Getting Started: ...
- 单独编译使用WebRTC的音频处理模块
块,每块个点,(12*64=768采样)即AEC-PC仅能处理48ms的单声道16kHz延迟的数据,而 - 加载编译好的NS模块动态库 接下来只需要按照 此文 的描述在 android 的JAVA代码 ...
- 1.3、WebRTC架构
文章导读:本文的讲解的是webrtc系统架构,每个人都要Get到这些知识:第一.了解webrtc架构分层:第二.对每层技术有一个清晰的认知.学完本节内容可以为我们后面学习核心API起到至关重要的作用, ...
- 基于webrtc的资源释放问题(二)
基于webrtc的资源释放问题(二) ——建立连接的过程中意外中断 应用背景: 我们在打电话的时候会不会遇到这种情况?打电话的时候未接通之前挂掉了电话,或者在接通之后建立的连接的过程中挂掉电话? 特别 ...
- Android IOS WebRTC 音视频开发总结(五四)-- WebRTC标准之父谈WebRTC
本文主要是整理自国内首届WebRTC大会上对Daniel的一些专访,转载必须说明出处,欢迎关注微信公众号blacker,更多说明详见www.rtc.help 说明:以下内容主要整理自InfoQ的专访, ...
- WebRTC学习笔记_Demo收集
1. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中增加了webrtc源代码,放在/external/w ...
- 可以用WebRTC来做视频直播吗?
https://www.zhihu.com/question/25497090 作者:韦易笑链接:https://www.zhihu.com/question/25497090/answer/72 ...
随机推荐
- 为什么Android手机总是越用越慢?
根据第三方的调研数据显示,有77%的Android手机用户承认自己曾遭遇过手机变慢的影响,百度搜索“Android+卡慢”,也有超过460万条结果.在业内,Android手机一直有着“越用越慢”的口碑 ...
- HDU 4685 Prince and Princess 二分图匹配+tarjan
Prince and Princess 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4685 Description There are n pri ...
- 记一次完整的pc前端整站开发
我所做的项目是一个线上的旅游平台,当然不是大家耳熟能详的那些旅游平台了,项目刚开始也没有必要去评价它的好坏,在这里我就不多说了~这是线上地址有兴趣的同学可以去看看(www.bookingctrip.c ...
- HAproxy和TIME WAIT的一次问题排查
近日平稳运行了将近4年的发号器突然出现问题,在元旦0分的时候出现短暂的性能下降,导致发号失败率飙高到一个不可接收的值,哎,意外总是发生在你想不到的地方. 这几天赶紧和小伙伴们赶紧追查原因,制定改造方案 ...
- CSS3制作ajax loader icon
demo 本文用到的两个CSS3属性:transform.animation 一.HTML <div class="ajax-loading"> <div cla ...
- 开发npm模块经验总结
1.在windows下开发的package.json的bin链接的全局命令可能会在linux下报错:“没有那个文件或目录”之类的错误...此时可以在linux下用vim打开bin链接的js文件,设置s ...
- Android证书有效性验证方案
1.前言: 1.1.SSL劫持攻击: 目前虽然很多Android APP使用了https通信方式,但是只是简单的调用而已,并未对SSL证书有效性做验证.在攻击者看来,这种漏洞让htt ...
- xapian的使用
1.先来看一下Xapian的介绍: Xapian的官方网站是http://www.xapian.org,这是一个非常优秀的开源搜索引擎项目,搜索引擎其实只是一个通俗的说法,正式的说法其实是IR(Inf ...
- hdu 4647 Another Graph Game,想到了就是水题了。。
题目是给一个无向图,其中每个节点都有点权,边也有边权,然后就有2个小朋友开始做游戏了ALICE &BOB 游戏规定ALICE 先行动然后是BOB,然后依次轮流行动,行动时可以任意选取一个节点并 ...
- 取消SVN版本号控制的bash脚本
原理非常easy,递归删除当前文件夹下全部的 .svn 文件. 把 .svn 换成 .git 就可以用于删除 git 控制