设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 964|回复: 1

WebRTC是什么,讲解,demo实例 网页p2p cdn播放器源码 在线下载器

[复制链接]
 成长值: 26510

签到天数: 3349 天

[LV.Master]伴坛终老

发表于 2017/11/24 05:11 | 显示全部楼层 |阅读模式 |Google Chrome 60.0.3112.113|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
在讲WebRTC之前,我们先回顾一下Web通信的演化历史。在AJAX出现之前,也就是05年之前,如果需要更新内容,必须重载整个网页页面。AJAX出现之后,通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。但AJAX不能与服务器进行双工通信,因此服务器无法主动推消息给浏览器,只能通过浏览器进行轮询。Websocket的出现使这个局面得到改观,浏览器与服务器能进行全双工通信。不管是AJAX还是Websocket,都需要将数据发送给服务端。为了在两个用户间传送数据,开发者需要购买服务器网络,这方面的成本是非常庞大的。由谷歌支持的一项新技术——WebRTC彻底改变了这个局面。WebRTC是Web Real-Time Communication的缩写,实现了浏览器之间直接的实时通讯,而不再需要服务器中转,谷歌致力于让其成为HTML5的标准之一,目前大部分浏览器也已经支持。
12年谷歌的chrome浏览器正式原生支持WebRTC,web开发者只需要几行javascript代码就可以开发出丰富的实时多媒体应用,而用户也无需安装插件,直接打开浏览器就可以与对方实时聊天。这时候有些嗅觉敏锐的开发者开始利用WebRTC的数据通道技术做P2P流媒体,例如国外一家公司叫做peer5。我们公司的创始人Alan在腾讯工作的时候也投入到这方面的研究,但失望的发现用WebRTC做P2P流媒体还有一些问题难以解决,比如用户在线的时间并不稳定,当用户关闭页面,WebRTC的数据通道也就关闭了。随后在13年和14年,Firefox和Opera也相继宣布支持WebRTC。这时Alan提出一个大胆的设想,既然浏览器做种不稳定,那么把相同的协议实现在路由器和NAS中呢?我们都知道路由器是24小时开启的,但大部分时间是处于闲置状态,如果能把这些计算能力和网络带宽利用起来,这样相当于千家万户都是节点,你的邻居甚至你自己也许就在为你看视频提供加速,想想都是很酷的事情!因此我们提出了众包CDN的概念,并且申请了专利。15年,腾讯的X5浏览器内核和微信也提供了支持,同年,我们梨享计算也正式宣布成立。
可能大家会有疑问,WebRTC将来真的会成为一种主流技术吗?我们用事实说话,看看各大浏览器的支持情况就知道了。从图中可以看出,大部分浏览器都已支持WebRTC,包括chrome、firefox和opera,微软的edge浏览器部分支持WebRTC。另外,苹果也在近期的WWDC大会上宣布safari11支持WebRTC。未来基于WebRTC的应用将越来越多,这是可以肯定的。
所以,目前的迅雷玩客云,百度金矿等项目都是基于这个想法。
我们假设现在有两个浏览器A和B要建立WebRTC对等连接,对等连接就是两个Web浏览器之间的直接媒体连接,如果A要主动联系B,需要先通过HTTP向信令服务器发送一个SDP,SDP可以理解为一个电脑名片,全称是Session Description Protocol,会话描述协议,用于描述对等连接的媒体特征。那么信令服务器又是什么呢?它就像一个红娘,帮两个互相不认识的人牵线。浏览器A发过来的SDP叫做offer,信令服务器将其传给浏览器B,后者收到后回应一个SDP对象,叫做answer,也通过信令服务器中转给A。交换完SDP后,两个对等端就开始尝试ICE打洞,打洞成功后开始协商密钥,之后就可以开始安全的媒体或数据会话了。
由于IPv4提供的IP资源有限,IPv6还没有推广开来,大部分网络设备还处于内网中,需要通过NAT设备来与外部internet连接。NAT全称Network Address Translation,网络地址转换,装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。当两个对等端处于不同的局域网中时,需要先知道对方的公网IP和端口。这时候可以先向STUN服务器发送测试数据包,后者做出响应,指示其在测试数据包中监测到的IP地址,此地址将成为潜在的候选地址返回。拿到候选地址的浏览器将其通过信令服务器发送给对等端,对等端也进行同样的操作,之后双方用所有得到的候选地址尝试连接,如果都没有成功的情况下,会用TURN服务器来作为中转服务器,TURN服务器是在所有替代方案都无效的情况下才有采取的,因为成本比较高昂。为了加速通话建立时间,有一个叫trickle ice的方案,其思想是客户端一边收集candidate一边发送给对方,比如local candidate 不需要通过stun获取直接就可以发起,这降低了了连通性检测完成的时间。

基于WebRTC实现的网页播放器源码
https://github.com/PearInc/PearPlayer.js
demo https://demo.webrtc.win/pearplayer/

例如这个也是一个实现网站,直接把种子p2p在线化:https://webtorrent.io/


基于WebRTC实现的网页在线下载器源码
https://github.com/PearInc/PearDownloader.js
demo https://demo.webrtc.win/peardownloader/

例如典型客户,腾讯:https://x5.tencent.com/tbs/

欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 942 天

[LV.10]以坛为家III

发表于 2017/11/24 14:55 来自手机 | 显示全部楼层
路过
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2021/3/5 14:47 , Processed in 0.125254 second(s), 20 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表