WebRTC 学习

关键任务:open-webrtc-toolkits

目标:

  1. 搭建环境,能够简单使用上述工具包:客户端 windows sdk 或 js,部署服务端
  2. 既然是 Intel 推出,是否支持低成本的 x86 架构,其他架构呢?跨平台特性?
  3. 过程中是否需要很多知识点或者工具链,是影响任务进度的关键

8/19/21 周五,工作计划:

  1. 了解 JavaScript 的语法,编写 demo
  2. 执行 OWT 的代码实验室的 js client。失败,案例描述和仓库代码不一致,本地服务器能够访问,但按钮功能异常。

WebRTC 介绍

先看 官方 的介绍:

借助 WebRTC,您可以在基于开放标准的应用程序中添加实时通信功能。它支持在同级之间发送视频,语音和通用数据,从而使开发人员能够构建功能强大的语音和视频通信解决方案。

该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。

WebRTC 背后的技术被实现为一个开放的 Web 标准,并在所有主要浏览器中均以常规 JavaScript API 的形式提供。

对于本机客户端(例如 Android 和 iOS 应用程序),可以使用提供相同功能的库。

三种架构:p2p 的 mesh 网状架构;p2s 的 MCU(Multi-point Control Unit);以及 p2s 的 SFU(Selective Forwarding Unit)

  • Mesh:每一个 P2P 连接有独立的传输策略控制,通讯质量有一定的保障。但是,这种架构对于客户端系统是一种浪费,一方面需要分配更多的端口,消耗更多的系统资源;另一方面,由于要向其它三个客户端发送本地音视频数据,增加了上行网络带宽的消耗,在同等带宽条件下,支持的多人通话路数就相对有限,视频质量(码率)也比较低。
  • MCU 将接收到的多路流进行转码和混合,并向每个终端输出单路流的做法,节省了终端用户的下行带宽,并且还能够对不同网络条件的用户,订制不同码率的输出视频流,让多人场景有更好的用户体验。典型的应用场景是多人音视频通话。
  • SFU 是解决服务器性能问题的有吸引力的方法,因为它不涉及视频解码和编码的计算费用,它以最低的开销来转发各路媒体流,典型的应用场景是1对多的直播服务。

三种架构的区别,摘自 WebRTC基础介绍

WebRTC:stun/turn服务器搭建

OWT 介绍

借助WebRTC,您可以在基于开放标准的应用程序中添加实时通信功能。它支持在同级之间发送视频,语音和通用数据,从而使开发人员能够构建功能强大的语音和视频通信解决方案。该技术可在所有现代浏览器以及所有主要平台的本机客户端上使用。 WebRTC背后的技术被实现为一个开放的Web标准,并在所有主要浏览器中均以常规JavaScript API的形式提供。对于本机客户端(例如Android和iOS应用程序),可以使用提供相同功能的库。 摘抄来源

视频会议是WebRTC的主要卖点,因此关于WebRTC的处理方式,很多开源媒体服务器的架构有有所不同,有的服务器端支持MCU方式,有的支持SFU方式,还有的WebRTC服务器支持混合方式。

Intel® Collaboration Suite for WebRTC(面向 WebRTC 的英特尔® 协同通信开发套件)开源后命名为Open WebRTC Toolkit(OWT),采用商业友好的Apache 2.0 License软件许可。前者的 官方网址 ,后者在 github 上 。这个开发套件包含服务端和客户端,客户端部分广泛支持 JavaScript,Android,iOS,Linux,Windows ,服务端支持SFU和MCU模式,可实现实时音视频分析功能。

JavaScript 入门

JavaScript 是一种开发语言,一门脚本语言。它有自己的语法集合。类似 C/C++ 有对应的 GCC/G++ 编译器,那么 JavaScript 解释执行也是需要工具的:JavaScript 引擎

JavaScript引擎是一般会附带在网页浏览器之中。 目前为止,最通用的JavaScript宿主环境是网页浏览器。网页浏览器一般使用公共的API创建“宿主对象”以便于在JavaScript中支持DOM。

各家浏览器公共 API 的接口名称很像,但多有区别。并未统一标准。

Node.js 与浏览器的区别

Node.js 与浏览器的区别

在浏览器中,大多数时候做的是与 DOM 或其他 Web 平台 API(例如 Cookies)进行交互。 当然,那些在 Node.js 中是不存在的。 没有浏览器提供的 document、window、以及所有其他的对象。

而且在浏览器中,不存在 Node.js 通过其模块提供的所有不错的 API,例如文件系统访问功能。

JavaScript语言与node

JavaScript语言本身是指ECMAScript,语言本身不包含BOM、DOM。

BOM、DOM是浏览器环境给JavaScript提供的编程接口对象,理论上DOM、window都是属于BOM。

以前的JavaScript就是只能在浏览器里运行,包含ECMAScript和BOM浏览器的东西。

node不是一门新语言,他只是把chrome V8引擎移植到自己的环境当中,在这个环境之上构建了一系列的底层API,给ECMAScript提供了一些特定环境的编程接口。

nodejs没有BOM、DOM。

在简单了解了一些背景后,可以看看 Node.js 的背景及它能做什么,擅长什么

libuv

libuv 是 node.js 作者做的一个封装库,在 unix 环境整合的 libev ,而在 windows 下用 IOCP 另实现了一套。

node就像一个胶带,把V8和libuv粘在了一起。

V8毫无疑问,负责解析执行JavaScript,相当于语言层面的桥梁;而libuv则是负责操作系统底层功能的封装,例如基于IOCP的event loop、file system、non-blockiong network等。简单来说node将两者结合在一起,赋予 JS 操作底层方法的能力,扩大了这门语言的应用面。