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

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

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哈哈~)。

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

WebRTC 学习之 WebRTC 简介的更多相关文章

  1. webrtc学习(一): webrtc开始

    一. 编译webrtc 1. 预先准备 1)  vpn. 用于同步代码. 这里给一个大概的估计吧. windows端包含vs2013 win8sdk wdk chromium源码等等, 总共需要至少8 ...

  2. [转]webrtc学习: 部署stun和turn服务器

    [转]webrtc学习: 部署stun和turn服务器 http://www.cnblogs.com/lingdhox/p/4209659.html webrtc的P2P穿透部分是由libjingle ...

  3. WebRTC学习笔记_Demo收集

    1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中增加了webrtc源代码,放在/external/w ...

  4. WebRTC学习之九:摄像头的捕捉和显示

    较新的WebRTC源代码中已经没有了与VoiceEngine结构相应的VidoeEngine了,取而代之的是MeidaEngine.MediaEngine包括了MediaEngineInterface ...

  5. WebRTC学习

    1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/web ...

  6. WebRTC学习与DEMO资源一览

    一. WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/webrtc/ ...

  7. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  8. .NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二)

    原文:.NetCore微服务Surging新手傻瓜式 入门教程 学习日志---结构简介(二) 先上项目解决方案图: 以上可以看出项目结构可以划分为4大块,1是surging的核心底层,2,3,4都可以 ...

  9. Netty学习——Apache Thrift 简介和下载安装

    Netty学习——Apache Thrift 简介和下载安装 Apache Thrift 简介 本来由Facebook开发,捐献给了Apache,成了Apache的一个重要项目 可伸缩的,跨语言的服务 ...

随机推荐

  1. React琐碎

    1 dangerouslySetInnerHTML 使用此属性的原因是得到一个安全的数据,生成一个仅包含唯一key——__html的对象,表明这段内容会被当成text/taint使用,它的使用方式是这 ...

  2. AD+DMA+USART实验中的收获和总结

    由于实验室用的是USART3接口,但是在基地实验时,由于没有RS232,只能换到USART1,进行实验.(在交作业的时候,记得要再换回去) 在这个过程中,遇到困难,用串口软件发送数据时无响应,应该意味 ...

  3. HTTPS SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  4. 连续子数组最大和(python)

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  5. c#: WebBrowser控件html代码注入及交互

    主题仍是下载相关. 页面加载完成后,注入html元素,以使能够与主程序交互.并使WebBrowser与js交互,可以实现一些有趣的功能. 欲使WebBrowser与js交互,其所在页面类,须加上[Co ...

  6. java基础 ----- 循环结构

    循环的结构特点 :    循环条件   循环操作 -----     while 循环 来个小例子,实现打印50 份shij 1.确定循环条件和循环操作 2.套用while语法写出代码 3.检查循环能 ...

  7. 20165315 2017-2018-2《Java程序设计》课程总结

    20165315 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安 ...

  8. 47-java 排列组合

    import java.util.HashSet; public class Main1 { public static int ys = 0; public static int ys2 = 0; ...

  9. 集群环境下定时调度的解决方案之Quartz集群

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  10. centos free详解

    CentOS 6及以前 $ free total used free shared buffers cached Mem: 4040360 4012200 28160 0 176628 3571348 ...