WebRTC 学习之 WebRTC 简介

本文使用的WebRTC相关API都是基于Intel® Collaboration Suite for WebRTC的。html

相关文档连接:https://software.intel.com/sites/products/documentation/webrtc/android/index.htmlandroid

1.什么是WebRTC

咱们都知道浏览器自己不支持相互之间创建信道进行通讯,都须要经过服务器进行中转。好比如今有两个客户端—甲、乙,他俩想要进行通讯,首先须要甲和服务器、乙和服务器之间创建信道。甲给乙发送消息时,甲先将消息发送到服务器上,服务器对甲的消息进行中转,发送到乙处,反过来也是同样。这样甲与乙之间的一次消息要经过两段信道,通讯的效率同时受制于这两段信道的带宽。同时这样的信道并不适合数据流的传输,如何创建浏览器之间的点对点传输,一直困扰着开发者。所以WebRTC应运而生。web

WebRTC是一个开源项目,旨在使得浏览器能为实时通讯(RTC)提供简单的JavaScript接口。说的简单明了一点就是让浏览器提供JS的即时通讯接口。这个接口所创立的信道并非像WebSocket同样,打通一个浏览器与WebSocket服务器之间的通讯,而是经过一系列的信令,创建一个浏览器与浏览器之间(peer-to-peer)的信道,这个信道能够发送任何数据,而不须要通过服务器。而且WebRTC经过实现MediaStream,经过浏览器调用设备的摄像头、话筒,使得浏览器之间能够传递音频和视频。目前此开源项目也支持Android、IOS了,使得Android和IOS设备做为终端设备可以像浏览器同样,进行即时通讯。本文基于Intel® Collaboration Suite for WebRTC的SDK来进行相关的讲解。浏览器

2.WebRTC的构成

WebRTC有三个重要的部分:MediaStream、RTCPeerConnection、RTCDataChannel。服务器

下面分别说明他们的做用:ui

MediaStream:经过设备的摄像头及话筒得到视频、音频的同步流url

PeerConnection: 用于构建点对点之间稳定、高效的流传输的组件spa

DataChannel:可以使得浏览器之间(点对点)简历一个高吞吐量、低延时的信道,用于传输任何数据视频

2.1 Android WebRTC MediaStream 媒体流

媒体流基本的概念能够理解,这里就很少阐述了,下面说明一下在SDK里面经过查看源码了解到的几个class的继承关系,其余的不作赘述htm

本地流:Stream --> LocalStream --> LocalCameraStream

远端流:Stream --> RemoteStream --> RemoteScreenStream、RemoteCameraStream

But : 目前不清楚RemoteScreenStream、RemoteCameraStream 之间的区别到底在哪里,有待研究......

2.2 Android WebRTC PeerConnection 对等链接

PeerConnection是WebRTC技术的主要API,此API的功能主要作的事情是在两个浏览器之间创建媒体和数据链接路径。PeerConnection不单单定义了如何建立对等连接,并且还提供了数据通道建立的API、DTMF启用和控制API、链接统计数据API,以及对等端身份肯定和验证控制API。可是对等链接不是链接,至少不是TCP意义上的那种链接。它是一组路径创建进程(ICE---互动式链接创建)以及一个可肯定应创建哪些媒体和数据路径的协商器。

PeerConnection在源码中能够了解到这个类作的事情不少,并且和native层面直接进行数据沟通,之后能够继续深刻了解一下。

2.3 Android WebRTC DataChannel 数据信(通)道

WebRTC 数据通道是在浏览器之间创建的一种非媒体交互连接,它为开发人员提供了一种灵活切可配置的通道,用于绕过服务器来直接交换数据。DataChannel API是PeerConnection API的一部分,只有在建立对等连接后才能建立数据通道。数据通道的模型是基于WebSocket创建的,具备简单且可设置的send方法和onMessage处理程序。

数据通道的使用情形之一是:提供实时游戏状态更新(例如:WOW 多人团队副本战斗的时候,使用此数据通道,团队中其余人的位置和动做更新方面是否是很容易了,O(∩_∩)O哈哈~)。

数据通道涉及的协议为:SCTP (Stream Control TransPort Protocol) 流控制传输协议。 

相关文章
相关标签/搜索