WebRTC 入门 01 简介 II

转载请注明出处:http://blog.csdn.net/yamingwu/article/details/44586955

信令

WebRTC的设计目的是解决对多媒体层的控制而不是信令层,它将信令层的东西尽量多的留给了应用层来管理。这样做的原因是不同的应用程序可能希望使用不同的标准信令协议(例如,SIP或XMPP),也可能是自定义的私有信令协议。

而会话描述信息主要用于传递传输层信息,比如媒体类型,格式和媒体相关的配置参数,应用程序使用这些信息来建立多媒体通路。

JavaScript会话建立协议(JESP)提供了供应用程序建立和协商本地和远程会话的接口。这个方法将信令状态机的驱动完全交给了应用程序。应用程序必须在正确的时间使用正确的API并将会话描述信息和ICE(Interactive Connectivity Establishment)信息转换为它所选择的信令协议所期望的消息。

WebRTC API

WebRTC API使得JavaScript应用程序可以使用浏览器的实时能力。浏览器的实时功能提供了用于建立音频、视频和数据传输通道的能力。所有多媒体和数据流都是通过DTLS加密的。DTLS全称为Datagram Transport Layer Security,用于避免UDP传输被窃听、干预和伪造。DTLS基于TLS协议(Transport Layer Security)。

为了保证不同实时浏览器之间的互通性,IETF设置了强制需要实现的最小音频视频编解码器集合。Opus(RFC6716)和G.711是被强制要求实现的音频编解码器。

已定义的API主要是围绕三大部分组成的:MediaStream、PeerConnection和DataChannel。

MediaStream

MediaStream是对实际数据、语音、视频流的抽象。它用于对多媒体流的管理操作。例如,显示多媒体流的内容,记录数据或发送数据到远端节点。MediaStream可以被用于代表来自远端节点的流,也可以用于表示本地要发送到远端的流。

LocalMediaStream代表从本地媒体捕捉设备(摄像头和麦克风等)采集到的多媒体流。要创建和使用一个本地流,web应用程序需要通过getUserMedia()方法向用户发起请求。应用程序在请求中表明要请求的是语音还是视频。当应用程序结束时,需要使用stop()方法来结束对设备的使用。

多媒体层信令通常以不同的流在节点之间进行传输,Secure Real-time Transport Protocol(SRTP)用于传输多媒体数据而RTP Control Protocol(RTCP)信息用于监控传输的状态。而DTLS则用于SRTP key及其相关的管理。在多媒体通信系统中,每个不同的媒体通常使用不同的RTP session来管理。但是为了避免为每个stream打开专门的NAT通道,IETF期望将多个多媒体通信合并到一个RTP Session中。


PeerConnection

PeerConnection使得两个节点可以直接进行通信。通信双方使用web服务器提供的脚本代码(XMPHttpRequest或WebSocket)来对通信过程进行协商。移动节点间建立了连接,多媒体流就可以被直接发送到远端浏览器。

PeerConnection机制使用ICE协议和STUN、TURN服务器来保证基于UDP的多媒体流恩能够给通过NAT和防火墙。

  • STUN(Simple Traversal of UDP over NATs,NAT 的UDP简单穿越)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的NAT之后以及NAT为某一 个本地端口所绑定的Internet端端口。这些信息被用来在两个同时处于NAT 路由器之后的主机之间建立UDP通信。该协议由RFC 3489定义。
  • TURN协议允许NAT或者防火墙后面的对象可以通过TCP或者UDP接收到数据。这在使用了对称式的NAT(或者防火墙)的网络中尤其具有实用价值。
  • TURN方式解决NAT问题的思路与STUN相似,是基于私网接入用户通过某种机制预先得到其私有地址对应在公网的地址(STUN方式得到的地址为出口NAT上的地址,TURN方式得到地址为TURNServer上的地址),然后在报文负载中所描述的地址信息直接填写该公网地址的方式,实际应用原理也是一样的。

DataChannel

DataChannel API用于提供为浏览器之间提供双向点对点传输服务。WebRTC使用封装在DTLS中的Stream Control Transmission Protocol来处理非多媒体数据类型。使用这种方式,数据可以安全和完整被传输。

在已经建立号的PeerConnection对象上,通过CreateDataChannel()方法可以建立DataChannel。每次调用CreateDataChannel()方法都会在现有的SCTP中创建一个新的DataChannel。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值