11月7日,即构和上海GDG技术社区联合举办了实时音视频技术云上技术分享专场,来自即构科技和Bilibili的资深技术专家进行了深度分享。大会吸引了众多开发人员交流、观看,并在活动过程中与分享嘉宾进行了热烈互动,下面我们整理了嘉宾们分享的核心内容,错过活动直播的小伙伴可以继续观看学习。

本文是即构科技黄开宁带来的主题为《WebRTC服务端工程实践和优化探索》的技术分享。以下为主要的分享内容:

大家下午好,我是来自即构科技的黄开宁,目前在即构科技负责音视频、媒体服务器以及网关的研发和开发,主要是架构的设计和开发,希望本次分享能让大家在WebRTC服务端实现或者项目选型时能带来一些思考。

接下来进入主题,今天的分享主要分为三个部分:

第一,WebRTC服务器架构介绍及设计思路;

第二,我们开发一个服务器所需要的技术和面临的难点;

第三,QoS服务质量的实现及优化。

一、WebRTC服务器架构介绍和设计思路

我们首先要想一下,为什么需要WebRTC服务器?WebRTC服务器它的作用是什么?在大家的认知里面,WebRTC是谷歌开发的一个项目或者是协议,是现在大家比较熟悉的一个点对点通信方案。点对点方案是指双方浏览器之间是直接互联的,如果我们在多方会议的多方通话的情况下,我们各个通话者之间都是直连的,没有经过第三方。

下面来大概看一下它的优劣势:

优势

第一,简单。这个模型非常简单,点对点,没有经过中间的一些服务器。

第二,延迟小。既然是直连的,我们可能理所当然地认为中间除了这些路由节点之外,就没有其他地方会增加延时了。但是我后面加了一个问号,也就是说未必是这样的。熟悉我们国内运营商网络情况的都知道,联通,移动,电信之间的通信可能是不对称的,如果我是联通,你是移动,咱们直连的话,延迟未必是小的,这个就是我加了一个问号的原因。

第三,端对端带宽适应。这个指的是WebRTC可以根据会话者之间的网络情况、带宽情况进行适应。比如当你的接收带宽不够时,我可以降低上行编码码率来适应你,从而达到一个更好的通话效果。

劣势

第一,连通性能差。点对点之间,由于所有的网络不是在一个防火墙后,我们可能需要打洞,甚至有一些防火墙非常严格的话,我们连打洞都没办法完成,这会极大的影响服务的连通性。我们首先要发现对方,然后要打洞,如果打洞不成功,还需要通过中转服务器来进行媒体的传输,这个过程可能会快则几秒钟,慢则几分钟。也就是说我们从会话开始到双方建立通信,整个过程是非常复杂、耗费非常长的时间。

第二,带宽占用高。所有的与会者是直连的,带来的一个问题是,如果我要看到其他所有人的视频,那么每个人都需要推一路流给我。同样的,其他人也是需要接收除他以外的所有流,这时候我的上行带宽占用是非常高的。在视频会议场景下,少则十几多则二十几个人,现在几百个人的会议也是很常见的。按照我们现行的带宽,是达不到的。

第三,编解码压力大。既然每个人的流要单独发送给其他与会者,那么也要单独编解码,要发送N路就要编N路,并且编解码压力是非常大的,不仅移动端没办法承受,甚至我们的PC端也是没办法承受的,这是它很大的一个劣势。

在我们实际的应用场景上,如果没有服务器,那么我们也没办法进行录制,无法实现视频回播、鉴黄以及CDN分发等功能。综合考虑,我们就会发现点对点方案可能并没有很好的满足我们当前实际的应用需求。

所以这里就要引入一个服务器方案架构,根据刚才提到的点对点三大劣势,我们来重点看看新方案是如何解决的。

连通性

通常我们的服务器都会架构在公网上,所以各个会话者是直接跟我们在公网上的服务器建立连接,省掉了打洞,直接一步到位。

网络带宽占用高

假设当前我们这个会议有四方会话,那我的与会者有三路,我只需发一路到服务器上,通过服务器把我这一路转发给其他三路的与会者就可以了,不需要再去多发两路,这样我的上行带宽就从原本的三路变成了一路了;而接收端,引入MCU的概念,为了节省下行带宽,我们可以将这三路混流,再转发给我,那么我的下行也只有一路。

编解码压力小

通过优化架构带宽,编解码从原来的N路变成一路,也同步缓解了编解码压力。

既然服务器能更好的满足我们的实际应用,那么WebRTC服务器应该怎么进行架构设计呢?开发WebRTC服务器需要哪些技术以及可能会面临哪些难点?WebRTC服务端QoS(服务质量)的实现及优化有哪些重点要注意的?

篇幅关系,关于《WebRTC服务端工程实践和优化探索》的完整内容,大家可以通过我们的活动资料包获取,资料包中还有视频回放、演讲PPT等资料。申请活动资料包链接https://www.wjx.top/m/97579006.aspx。

【活动回顾】WebRTC服务端工程实践和优化探索的更多相关文章

  1. Nuxt.js服务端渲染实践,从开发到部署

    感悟 经过几个周六周日的尝试,终于解决了服务端渲染中的常见问题,当SEO不在是问题的时候,或许才是我们搞前端的真正的春天,其中也遇到了一些小坑,Nuxt.js官方还是很给力的,提issue后很积极的给 ...

  2. JSR-303 Bean Validation 介绍及 Spring MVC 服务端参数验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用很多时候同样的数据验证逻辑会出现在不同的层,这样 ...

  3. spring-oauth-server实践:客户端和服务端环境搭建

    客户端:http://localhost:8080/spring-oauth-client/index.jsp 服务端:http://localhost:8080/spring-oauth-serve ...

  4. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...

  5. Day01_搭建环境&CMS服务端开发

    学成在线 第1天 讲义-项目概述 CMS接口开发 1 项目的功能构架 1.1 项目背景 受互联网+概念的催化,当今中国在线教育市场的发展可谓是百花齐放.如火如荼. 按照市场领域细分为:学前教育.K12 ...

  6. 04_天气查询_JAX-WS方式_服务端

    [简述] WebService的Java实现共有三种方式:JAX-WS(JAX-RPC).JAXM&SAAJ.JAX-RS. JAX-WS: JAX-WS  的全称为 Java API for ...

  7. 开源分享 Unity3d客户端与C#分布式服务端游戏框架

    很久之前,在博客园写了一篇文章,<分布式网游server的一些想法语言和平台的选择>,当时就有了用C#做网游服务端的想法.写了个Unity3d客户端分布式服务端框架,最近发布了1.0版本, ...

  8. TCP/IP网络编程之基于TCP的服务端/客户端(二)

    回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服 ...

  9. gSOAP calc服务端与客户端示例

    1. Web服务定义描述头文件 typedef double xsd__double; int ns__add(xsd__double a, xsd__double b, xsd__double &a ...

  10. 微服务项目开发学成在线_day01_CMS服务端开发

    05-CMS需求分析-什么是CMS 什么是CMS?CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同.CMS有哪些类型? 每个公司对每个项目的C ...

随机推荐

  1. yolov5训练自己的数据集

    1.安装cuda 可以先看看自己的 显卡信息,支持哪个cuda版本 cuda下载地址:https://developer.nvidia.com/cuda-toolkit-archive 我的RTX30 ...

  2. 在Vue中使用键盘事件,回调函数被执行两次

    暂时先不考虑v-for的key,查看下面的代码 <template> <div> <form @submit.prevent="addTask"> ...

  3. Dokcer应用部署(搭建Wordpress网站)

    实现多个容器之间的协同,搭建Wordpress网站,要用到3个容器,Wordpress.MariaDB和Nginx 拉取镜像 使用docker pull拉取3个镜像: $ sudo docker pu ...

  4. 深度学习入门系列之doc

    这周老师让把深度学习的名词过一遍,小玛同学准备在过一遍Deep Learning名词的同时把基本的模型也过一遍. 感谢杰哥发我深度学习入门系列能让我有机会快速入门. 下面就来doc一些学到的东西 线性 ...

  5. ARL:资产侦察灯塔系统

    资产灯塔,不仅仅是域名收集 功能简介 "挖洞神器"资产安全灯塔(ARL),旨在快速侦察与目标关联的互联网资产,构建基础资产信息库. 协助甲方安全团队或者渗透测试人员有效侦察和检索资 ...

  6. 关于linux下Qt5.7.0安装中文输入法无法显示的问题

    关于linux下Qt5.7.0安装中文输入法无法显示的问题 本文是以我自己系统ubuntu-x64 + fcitx + Qt5.7.0为例: sudo apt-get install fcitx-fr ...

  7. 任务系统之Jenkins子任务

    今天下班即开启五一假期,早上临时定了行程去山东日照,原本计划下班就出发,但下班看了看导航,这一路红得发黑,于是决定还是晚点再走,现在有时间了,写篇简单的技术文章来提升下Blog逐渐降低的技术内容含量吧 ...

  8. JavaScript中的四种枚举方式

    字符串和数字具有无数个值,而其他类型如布尔值则是有限的集合. 一周的日子(星期一,星期二,...,星期日),一年的季节(冬季,春季,夏季,秋季)和基本方向(北,东,南,西)都是具有有限值集合的例子. ...

  9. office办公套件基础教程

    正文 1.网页端的应用-office全家桶 这里我选择先聊web端的应用,首先,我们来想象一下,只要你有网络,有浏览器,就能打开一个网页,在网页上进行编辑.处理一些word.报表.ppt等,你不需要复 ...

  10. 2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一个子序列。 t 中每两个 相邻 字母在字

    2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一个子序列. t 中每两个 相邻 字母在字 ...