WebRtc(网页即时通讯技术)知识点总结
前言
WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,简而言之它是一个支持网页浏览器进行实时语音对话或视频对话的技术。并且还支持跨平台:windows,linux,mac,android,iOS。
实现原理
P2P连接模式
一般我们传统的连接方式,都是以服务器为中介的模式:
类似http协议:客户端<——>服务端(当然这里服务端返回的箭头仅仅代表返回请求数据)。
进行即时通讯时,进行文字、图片、录音等传输的时候:客户端A——服务器——客户端B。
而点对点的连接恰恰数据通道一旦形成,中间是不经过服务端的,数据直接从一个客户端流向另一个客户端:
客户端A——客户端B ... 客户端A——客户端C ...(可以无数个客户端之间互联)
这个过程就像音视频通话的应用场景,我们服务端确实是没必要去获取两者通信的数据,而且这样做有一个最大的一个优点就是,大大的减轻了服务端的压力。
而WebRTC就是这样一个基于P2P的音视频通信技术。
客户端A与B建立p2p连接的过程
1.A和B连接上服务端,建立一个TCP长连接(任意协议都可以,WebSocket/MQTT/Socket原生/XMPP),为了省事,直接采用WebSocket,这样一个信令通道就有了。
2.A从服务器获得ice server同时生成包含session description(SDP)的offer,发送给Socket服务端。
3.Socket服务端把A的offer和candidate转发给B,B会保存下A这些信息。
4.然后B发送包含自己session description的answer(因为它收到的是offer,所以返回的是answer,但是内容都是SDP)和ice candidate给Socket服务端。
5.Socket服务端把B的answer和ice candidate给A,A保存下B的这些信息。
如果想启用这个功能,你必须让你的应用程序传 服务器的URL:
ICE试着找最好的路径来让客户端建立连接,他会尝试所有可能的选项,然后选择最合适的方案,
ICE首先尝试P2P连接,如果失败就会通过Turn服务器进行转接。
信令的类型
会话描述协议(Session Description Protocal,简称SDP)
信令的主要内容的格式都遵循会话描述协议
1) 会话的名称和目的
2)
会话存活时间
3)
包含在会话中的媒体信息,包括:
媒体类型(video, audio, etc)
传输协议(RTP/UDP/IP, H.320, etc)
媒体格式(H.261 video, MPEG video, etc)
多播或远端(单播)地址和端口
4)
为接收媒体而需的信息(addresses,
ports, formats and so on)
5)
使用的带宽信息
6)
可信赖的接洽信息
一个SDP的信令的内容大致上如下:
实时传输控制协议(Real-time ControlProtocol,RTCP)
Sdp协议内规定的视频传输控制协议就是rtcp
最新文章
- 25. vm安装redhat步骤
- Unity3D 游戏前端开发技能树(思维导图)
- hibernate注解——@Temporal
- Ubuntu Linux 12.04 LTS amd64系统本地root提权
- 初识C++的类
- Java API —— 异常
- node初步一:HTTP请求
- 通过URL推送POST数据
- 用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能
- Word字体与像素的对应关系(转)
- IOS——触摸事件 视图检测和事件传递
- JAVAEE——BOS物流项目09:业务受理需求分析、创建表、实现自动分单、数据表格编辑功能使用方法和工作单快速录入
- java中进程与线程的区别
- 2017年前小纪(有关http的一些缓存理论知识)
- Django之CRM项目Day4-编辑客户 公私户 模糊查询
- 解决多个div左浮动后不换行问题
- excel两张表数据匹配数据(VLOOKUP)
- iOS应用开发,全局强制竖屏,部分页面允许旋转的处理
- AltiumDesigner元器件搜索中英文对照
- Codeforces Round #276 div1 B. Maximum Value Hash 乱搞
热门文章
- [内核]Linux UserSpace和Kernel之间如何联系
- jQuery中ajax的使用与缓存问题的解决方法
- MySQL线程池总结
- UEFI + win8 + ubuntu16.04双系统安装
- (转)android从应用到驱动之—camera(1)---程序调用流程
- php -- 魔术方法 之 判断属性是否存在或为空:__isset()
- SSH学习三 SESSION
- UNIQLO
- THINKPHP5加载公共头部尾部模板方法
- [SCOI2010]传送带[三分]