博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebRTC 学习之 WebRTC 简介
阅读量:6701 次
发布时间:2019-06-25

本文共 1872 字,大约阅读时间需要 6 分钟。

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

相关文档链接:

1.什么是WebRTC

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

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。

下面分别说明他们的作用:

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

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

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

2.1 Android WebRTC MediaStream 媒体流

媒体流基本的概念可以理解,这里就不多阐述了,下面说明一下在SDK里面通过查看源码了解到的几个class的继承关系,其他的不做赘述

本地流: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哈哈~)。

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

转载地址:http://oxgoo.baihongyu.com/

你可能感兴趣的文章
Xcode7,ios9 issue ,warning合集
查看>>
Spring整合Quartz定时任务 在集群、分布式系统中的应用(Mysql数据库环境)
查看>>
【英语-刘晓艳-词汇】词汇06
查看>>
Apache版本兼容性问题
查看>>
WIN7 Wireshark: There are no interfaces on which a capture can be done
查看>>
模块化
查看>>
iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理
查看>>
情怀真的可以吃~致文青
查看>>
Win10无法使用小娜搜索本地应用问题的解决方案
查看>>
[C++]宏定义#define A B C
查看>>
python笔记1
查看>>
1106: 回文数(函数专题)
查看>>
【BZOJ 3339 / BZOJ 3585 / luogu 4137】Rmq Problem / mex
查看>>
【原创】Git删除暂存区或版本库中的文件
查看>>
【原创】注意析构函数的使用
查看>>
求 s=a+aa+ aaa+ aaaa +aaaaa+........的值,a是从键盘输入的,项数也为键盘输入
查看>>
java代码做repeat次运算,从键盘输入几个数,比最值
查看>>
Coursera机器学习笔记(一) - 监督学习vs无监督学习
查看>>
新人报道,写的东西还请大神们多指导!也希望能让和我一样的同事少走弯路。...
查看>>
C#中获取当前时间:System.DateTime.Now.ToString()用法
查看>>