本文使用的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) 流控制传输协议。

转载于:https://www.cnblogs.com/renhui/p/6369568.html

WebRTC 学习之 WebRTC 简介相关推荐

  1. webrtc学习--了解webrtc服务器

    文章目录 webrtc 服务器架构 0 前言 1 服务器架构 2 Mesh .MCU.SFU的优缺点 2.1 Mesh 2.2 MCU 2.3 SFU 3 开源服务器 4 学习和感受 5 参考博客 w ...

  2. WebRTC学习笔记

    http://blog.chinaunix.net/uid-24567872-id-3961702.html 1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在 ...

  3. 智能会议系统(33)---WebRTC学习之四:最简单的语音聊天

    WebRTC学习之四:最简单的语音聊天 VoiceEngine中与最简单语音聊天相关的头文件有五个,如下表所示: 头文件 包含的类 说明 voe_base.h VoiceEngineObserver ...

  4. 智能会议系统(32)---WebRTC学习之三:录音和播放

    WebRTC学习之三:录音和播放 VoiceEngine中与录音和播放相关的头文件有五个,如下表所示: 头文件 包含的类 说明 voe_base.h VoiceEngineObserver Voice ...

  5. 智能会议系统(30)---WebRTC学习之一:开篇

    WebRTC学习之一:开篇 一.无插件的实时通讯 想像一下,如果你的手机.电视.电脑都可以通过一个平台进行通信,想像一下,你可以在Web应用中轻松地加入视频聊天和p2p数据分享,这就是WebRTC的愿 ...

  6. WebRTC学习与DEMO资源一览

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

  7. webrtc 学习博客

    这是一个非常不错的webrtc学习网站如下 博客链接:http://www.cnblogs.com/lingyunhu/tag/webrtc%20android%20ios/ 今天这篇文章主要总结目前 ...

  8. WebRTC学习—WebRTC详解

    目录 一:WebRTC学习了解   (一)WebRTC应用场景   (二)WebRTC的难点   (三)学习流程   (四)学习目标 二:WebRTC介绍   (一)概述   (二)WebRTC可以实 ...

  9. WebRTC学习进阶之路 --- 五、WebRTC网络知识详解(三)(最全流媒体协议(RTP/RTCP/RTSP/RTMP/MMS/HLS/HTTP/ HTTP-FLV(HDL)/SDP)

    WebRTC学习进阶之路系列总目录:https://blog.csdn.net/xiaomucgwlmx/article/details/103204274 RTP:实时传输协议(Real-time ...

最新文章

  1. AAA及Radius
  2. 怎么看android底层源码,Android 底层按键获取
  3. MYSQL批量插入数据库实现语句性能分析
  4. Makefile 规则
  5. rxjs 怎么使用_使用RxJS Observables进行SUPER SAIYAN
  6. python开发讲解_Python开发系列课程(1) - 初识Python详解
  7. 1000道Python题库系列分享25(40道Pandas客观题)
  8. python测试脚本 进制转换器_使用Python内置的模块与函数进行不同进制的数的转换...
  9. 大数据之-Hadoop之HDFS的API操作_判断是文件还是文件夹---大数据之hadoop工作笔记0062
  10. 有什么好办法说服孩子不玩游戏?
  11. 动态规划,java实现算法导论15章钢条切割
  12. 解决 Error:No suitable device found: no device found for connection System eth0
  13. python - jpg图片转pdf
  14. java实现小写金额转换大写金额
  15. 怎样理解OOP?OOP又是什么?
  16. 盗版 Win7 试用到期后黑屏咋办
  17. spring boot + gateway + nacos 网关统一代理
  18. 生成文字和二维码合成
  19. MMD->Unity一站式解决方案
  20. python表格绘制斜线表头_Python之ReportLab绘制条形码和二维码

热门文章

  1. kali怎么进入root用户_linux中怎么进入root用户
  2. 亚马逊服务器维护,Amazon EC2 维护帮助页面
  3. matlab求最大公倍数_小学数学最大公因数最小公倍数练习
  4. node-red mysql的增删改查_通过curl或者http请求对elasticsearch中的数据进行增删改查...
  5. 如何将多个excel表格合并成一个_如何将一个视频分割成多个片段
  6. 两个not exists_分享两个冷门但又超实用的 Vim 使用技巧!
  7. ionic4 ngFor中使用ngIf
  8. 并注册烧写钩子 获取启动介质类型_Spark Application的注册 源码剖析
  9. springMVC环境搭建
  10. 18计算机二级考试用word吗,计算机二级Word篇-实操真题详解18