WebRTC实时音视频技术的整体架构介绍

2023-11-12

WebRTC 简介


WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。

WebRTC提供了实时音视频的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android。

虽然WebRTC的目标是实现跨平台的Web端实时音视频通讯,但因为核心层代码的Native、高品质和内聚性,开发者很容易进行除Web平台外的移殖和应用。很长一段时间内WebRTC是业界能免费得到的唯一高品质实时音视频通讯技术。

更多资料


良心分享:WebRTC 零基础开发者教程(中文)
WebRTC实时音视频资料精选
官方权威入门文档:Getting Started with WebRTC

另外,你也可以访问WebRTC的官方网站,各种权威资料都能找到,但内容都是英文的: https://webrtc.org

WebRTC的目标


WebRTC(Web Real-Time Communication)项目的最终目的主要是让Web开发者能够基于浏览器(Chrome\FireFox\…)轻易快捷开发出丰富的实时多媒体应用,而无需下载安装任何插件,Web开发者也无需关注多媒体的数字信号处理过程,只需编写简单的Javascript程序即可实现。

W3C等组织正在制定Javascript 标准API,目前是 WebRTC 1.0版本、Draft状态

另外WebRTC还希望能够建立一个多互联网浏览器间健壮的实时通信的平台,形成开发者与浏览器厂商良好的生态环境。同时,Google也希望和致力于让WebRTC的技术成为HTML5标准之一,可见Google布局之深远。

WebRTC技术架构图


WebRTC实时音视频技术的整体架构介绍_8.png 

架构图颜色标识说明:

  • 紫色部分是Web开发者API层;
  • 蓝色实线部分是面向浏览器厂商的API层(也就是红色框标内模块)
  • 蓝色虚线部分浏览器厂商可以自定义实现

官方给出的平台支持情况:

WebRTC实时音视频技术的整体架构介绍_QQ20160505-0.png 

WebRTC架构组件介绍


1Your Web App


Web开发者开发的程序,Web开发者可以基于集成WebRTC的浏览器提供的web API开发基于视频、音频的实时通信应用。

2Web API


面向第三方开发者的WebRTC标准API(Javascript),使开发者能够容易地开发出类似于网络视频聊天的web应用,最新的标准化进程可以查看这里。

3WebRTC Native C++ API


本地C++ API层,使浏览器厂商容易实现WebRTC标准的Web API,抽象地对数字信号过程进行处理。

4Transport / Session


传输/会话层:会话层组件采用了libjingle库的部分组件实现,无须使用xmpp/jingle协议。

- a.  RTP Stack协议栈:Real Time Protocol;
- b.  STUN/ICE:可以通过STUN和ICE组件来建立不同类型网络间的呼叫连接;
- c.  Session Management:一个抽象的会话层,提供会话建立和管理功能。该层协议留给应用开发者自定义实现。

官方给出的WebRTC STUN原理图:
WebRTC实时音视频技术的整体架构介绍_stun.png 

官方给出的WebRTC P2P数据收发原理图:
WebRTC实时音视频技术的整体架构介绍_dataPathways.png 

5VoiceEngine


音频引擎是包含一系列音频多媒体处理的框架,包括从视频采集卡到网络传输端等整个解决方案。

VoiceEngine是WebRTC极具价值的技术之一,是Google收购GIPS公司后开源的。在VoIP上,技术业界领先。


a. iSAC
Internet Speech Audio Codec:针对VoIP和音频流的宽带和超宽带音频编解码器,是WebRTC音频引擎的默认的编解码器。
  • 采样频率:16khz,24khz,32khz;(默认为16khz)
  • 自适应速率为10kbit/s ~ 52kbit/;
  • 自适应包大小:30~60ms;
  • 算法延时:frame + 3ms

b. iLBC
Internet Low Bitrate Codec:VoIP音频流的窄带语音编解码器。标准由IETF RFC3951和RFC3952定义。
  • 采样频率:8khz;
  • 20ms帧比特率为15.2kbps
  • 30ms帧比特率为13.33kbps

c. NetEQ for Voice
针对音频软件实现的语音信号处理元件。NetEQ算法:自适应抖动控制算法以及语音包丢失隐藏算法。使其能够快速且高解析度地适应不断变化的网络环境,确保音质优美且缓冲延迟最小。是GIPS公司独步天下的技术,能够有效的处理由于网络抖动和语音包丢失时候对语音质量产生的影响。

NetEQ 也是WebRTC中一个极具价值的技术,对于提高VoIP质量有明显效果,加以AEC\NR\AGC等模块集成使用,效果更好。


d. Acoustic Echo Canceler (AEC)
回声消除器是一个基于软件的信号处理元件,能实时的去除mic采集到的回声。

e. Noise Reduction (NR)
噪声抑制也是一个基于软件的信号处理元件,用于消除与相关VoIP的某些类型的背景噪声(嘶嘶声,风扇噪音等等… …)

6VideoEngine


WebRTC视频处理引擎:VideoEngine是包含一系列视频处理的整体框架,从摄像头采集视频到视频信息网络传输再到视频显示整个完整过程的解决方案。

a. VP8
视频图像编解码器,是WebRTC视频引擎的默认的编解码器。VP8适合实时通信应用场景,因为它主要是针对低延时而设计的编解码器。

VPx编解码器是Google收购ON2公司后开源的,VPx现在是WebM项目的一部分,而WebM项目是Google致力于推动的HTML5标准之一。


b. Video Jitter Buffer
视频抖动缓冲器,可以降低由于视频抖动和视频信息包丢失带来的不良影响。

c. Image enhancements
图像质量增强模块:对网络摄像头采集到的图像进行处理,包括明暗度检测、颜色增强、降噪处理等功能,用来提升视频质量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebRTC实时音视频技术的整体架构介绍 的相关文章

  • 如何使用webrtc录制视频

    我需要在使用 Nodejs 构建的网站上使用笔记本电脑摄像头录制视频 为此 我使用 webRTC 到目前为止 我可以使用笔记本电脑摄像头拍照 但我需要录制视频 有人可以帮忙解释一下代码将如何进行吗 我当前的代码如下
  • org.webrtc.RTCPeerConnection 无法将视频发布到服务器

    我使用 webrtc 在会议中发送和获取视频 子主视频正常显示 但问题是视频没有发布到服务器 我检查方法 setlocalDescription 没有返回错误 这是我的sdp 有人可以帮忙吗 我搜索了很多解决方案 但我仍然不知道我的问题 我
  • WebRTC、捕获屏幕

    我当前的问题是 我想找到一种在 Android 上的 webrtc 连接期间捕获帧 屏幕截图的方法 我知道这里已经有一些解决方案 但没有一个对我有用 按照我目前的方法 我遵循了这个Gist https gist github com Eri
  • 在 Android 上使用 WebRTC 实现 Kurento 客户端

    我正在尝试在支持 API 22 的 Android 设备上实现 WebRTC 并且正在尝试连接到 Kurento 媒体服务器以建立媒体服务器功能 对于我的应用程序服务器层 我尝试使用基于 Tomcat 的 Java 服务器 这正在实现 Ku
  • Microsoft Azure 媒体服务上的类似 Skype 的应用程序

    目前我正在研究一个类似 Skype 的应用程序的想法 例如 人们与其他人进行视频通话 现在我想运行这个微软Azure媒体服务 http azure microsoft com en us services media services 但是
  • 如何在 Safari 浏览器上获取 WebRTC 日志

    我一直在尝试获取在 safari 浏览器上运行的 Web 应用程序的 webrtc 日志 类似于我们通过转到页面在 Firefox 中获取的日志about webrtc并在 chrome 上使用chrome webrtc internals
  • 如何与本机桌面 (win) 应用程序建立对等连接

    我需要与本机桌面 win 应用程序和网络浏览器建立对等连接 只是为了传输原始数据 从理论上讲 WebRTC 似乎是实现这一目标的唯一方法 如果您想使用 WebRTC 在浏览器和桌面之间交换数据 您可以使用此库将桌面部分编码为 C 语言 ht
  • 使用 django 通道将 webRTC 视频流发送到服务器

    我正在尝试创建一个用 django 编写的人脸检测 Web 应用程序 该应用程序是这样工作的 用户导航到该 url 相机在客户端计算机上启动 然后将每一帧发送到服务器进行人脸检测 然后将处理后的帧显示在网页上 我知道我无法使用 opencv
  • 在 Heroku 上部署 PeerJS 服务器

    我的 PeerJS 服务器有问题 我从这里使用了 部署到 Heroku 按钮 https github com peers peerjs server https github com peers peerjs server 我不知道如何连
  • Node教程一对多无加载远程服务器Stream Spinner动不停

    我对在项目中使用所需的 Kurrento 很陌生 但是当我克隆 git hub 上为 Kurento 提供的教程并遵循 one2Many 调用的说明时 首先 adapter js 的软件包损坏了 因为我成功解决了它们 但之后出现了一个问题
  • 如何运行媒体流

    我创建了一个网络摄像头流 navigator getUserMedia video true function stream videoTag src window URL createObjectURL stream videoTag p
  • WebRTC 与 python

    我想用 python twisted 制作一个流服务器 它接收 WebRTC 视频流 然后对其应用一些 OpenCV 算法 但是我找不到 WebRTC 的 python 模块 如何使用 python twisted 发送和接收 WebRTC
  • 如何在 iOS 和 macOS 上的 Safari 中使用网络摄像头录制视频?

    我已经发布了几条路径 1 录制视频https caniuse com feat html media capture https caniuse com feat html media capture但它仅适用于 iOS 并且无法自定义 我
  • 我需要 TURN 服务器吗?

    在什么情况下我应该使用 TURN 服务器 现在我有一个运行完美的 WebRTC 应用程序 该应用程序即将发布 我是否需要设置自己的 TURN 服务器 或者可能仅适用于主要应用程序 WebRTC 可以通过多种方式进行连接 并且当它在第一个选择
  • WebRTC 暂停和恢复流

    我正在尝试使用 WebRTC 构建一个 Web 应用程序 当某些事件触发时需要暂停 恢复视频 音频流 我已经尝试过getTracks 0 stop 但我不知道如何恢复流 对此有什么建议吗 谢谢 getTracks 0 stop 是永久的 U
  • 如何在 Android webRTC 上启用 H264

    如何在 Android WebRTC 上启用 H264 PeerConnection to createOfferSDP中没有h264描述 由于某种原因 Google 默认会阻止他们自己的软件编解码器 因此 如果您的芯片组中没有硬件解码 或
  • 为什么turn服务器不支持tcp连接?

    我是 WebRTC 新手 我需要为我的 webrtc 应用程序配置我自己的 Turn 服务器 我使用以下命令安装了我的转弯服务器 apt get install coturn 我只需要通过 tcp 运行转变服务器 它不必使用 UDP 进行任
  • Twilio webRTC 通话在 10 分钟后中断

    使用 Twilio js 使用 webRTC 录制通话 工作正常 但在 10 分钟时 完全正确 电话挂断 TwiML 上的最大记录时间设置为 7200 秒 浏览器的控制台显示 Twilio PeerConnection signalingS
  • 无需画布/显示器即可拍摄隐形 WebRTC/视频照片

    我读了拍摄静态照片 https developer mozilla org en US docs Web API WebRTC API Taking still photos来自 MDN 的描述如何从网络摄像头捕获照片 使用视频元素和med
  • WebRTC:通道、轨道和流与 RTP SSRC 和 RTP 会话之间的关系

    来自 Mozilla 网站 https developer mozilla org en US docs Web API Media Streams API https developer mozilla org en US docs We

随机推荐

  • 【干货】虚拟对抗训练简介

    虚拟对抗训练是一种有效的正则化技术 在监督学习 半监督学习和无监督聚类方面取得了良好的效果 虚拟对抗训练已用于 提高监督学习绩效 半监督学习 深度无监督聚类 有几种正则化技术可以防止过度拟合 并有助于模型更好地概括出看不见的例子 正则化有助
  • Linux和UNIX“新手”们必备的与Linux系统编程相关的基本概念

    1 操作系统的核心 内核 术语 操作系统 通常包含两种不同含义 1 指完整的软件包 这包括用来管理计算机资源的核心层软件 以及附带的所有标准软件工具 诸如命令行解释器 图形用户界面 文件操作工具和文本编辑器等 2 在更狭义的范围内 是指管理
  • 用Android studio 2.3调度程序时提示“Installation failed with message Failed to establish session”错误,需要在在开发者选项

    用Android studio 2 3调度程序时提示 Installation failed with message Failed to establish session 错误 需要在在开发者选项里关闭MIUI优化
  • 【以太网硬件二十一】USXGMII是什么?-Part2

    个人主页 highman110 作者简介 一名硬件工程师 持续学习 不断记录 保持思考 输出干货内容 目录 PCS功能细节 XGMII到USXGMII的映射 带内配置和状态信号 自协商相关 电气特性 PCS功能细节 USXGMII把并行的X
  • Apache Flink Flink Time & Window 解析

    一 Window Time 介绍 Apache Flink 以下简称 Flink 是一个天然支持无限流数据处理的分布式计算框架 在 Flink 中 Window 可以将无限流切分成有限流 是处理有限流的核心组件 现在 Flink 中 Win
  • call、apply、bind的区别

    为什么要改变this的指向 var name codereasy let obj name 张三 say function console log this name obj say setTimeout obj say 10 正常情况下
  • linux I/O优化 磁盘读写参数设置

    转载 http wlservers blog 163 com blog static 120622304201241715945256 关于页面缓存的信息 可以用 cat proc meminfo 看到 其中的Cached 指用于pagec
  • Java Maven安装及环境配置教程

    一 安装 1 安装包 apache maven 3 6 3 安装包下载地址 2 下载安装包然后直接解压就行 注意 文件的位置路径不能有中文 二 环境配置 1 用户变量 双击Path 点击新建 将如下复制进去 然后点击确定 MAVEN HOM
  • opencv实战项目 手势识别-手部距离测量

    手势识别系列文章目录 手势识别是一种人机交互技术 通过识别人的手势动作 从而实现对计算机 智能手机 智能电视等设备的操作和控制 1 opencv实现手部追踪 定位手部关键点 2 opencv实战项目 实现手势跟踪并返回位置信息 封装调用 3
  • Spark数据分析之pyspark

    一 大数据简史 从hadoop到Spark 1 hadoop的出现 1 问题 1990年 电商爆发以及机器产生了大量数据 单一的系统无法承担 2 办法 为了解决 1 的问题许多公司 尤其是大公司领导了普通硬件集群的水平扩展 3 执行 had
  • HashCode方法的调用对Java锁的影响

    在回顾以前写的锁升级的代码时 意外发现hashCode方法的调用会对锁产生影响 于是做了几个测试并查阅了一些资料 把最终的结果记录于此 结论 首先上结论 一个对象在调用原生hashCode方法后 来自Object的 未被重写过的 该对象将无
  • qt可停靠控件和工具栏(Dock Widgets and Toolbars)

    可停靠控件能够停靠在QMainWindow中或者作为一个独立窗口浮动 QMainWindow提供了四个可停靠控件的地方 上方 下方 左方 右方 Microsoft Visual Stadio程序和Qt Linguist程序使用大量的可停靠窗
  • python 函数中的省略号

    1 省略号在python里也是个对象 2 赋值号后面省略号 给该变量赋值一个default值 具体python的机制我不清楚 应该是在类里面定义好的 或者参数省略 3 冒号后面省略号 表示函数的定义内容不写了 函数的定义内容不写了 相当于p
  • PTA6(python)

    python程序设计06 面向对象 7 1 求两点之间距离 7 2 类的定义和使用 7 3 优异生查询 类和对象 7 4 新型计算器 7 5 学生类的使用 7 6 三维向量运算 7 7 继承类应用 7 8 有关队列操作 7 9 有关堆栈操作
  • python调用everything批量查找表格中的文件名在磁盘中是否存在

    python调用everything批量查找表格中的文件名在磁盘中是否存在 介绍 Everything 配置 使用openpyxl读写文件 读文件 写文件 BeautifulSoup的使用 创建 beautifulsoup 对象 soup
  • 基础实验篇

    uORB是PX4 Pixhawk系统中非常重要且关键的模块之一 是用于无人机模块间通信的协议机制 本篇将详细介绍uORB并详细拆解uORB消息读写与自定义实验流程 三 基础实验篇 uORB消息读写与自定义实验 三 01 基于RflySim平
  • 代码随想录一刷-Day01

    代码随想录一刷 Day01 LeetCode704 二分查找 这道属于是入门必刷了 但是虽然能做出来 在细节上还是不够注意 public int search int nums int target if nums null nums le
  • @excel注解_EasyPOI 详细教程以及注解的使用

    因为项目的原因需要用到POI来操作Excel 文档 以前都是直接使用POI来操作的 但是最近听到easypoi的存在 所以自己简单的尝试了下 别说 他还真的挺好用的 Easypoi介绍 Easypoi 为谁而开发 不太熟悉poi的 不想写太
  • LocalDate的用法与String互转

    一 LocalDate常用用法 1 1 申明定义 LocalDate formatDate LocalDate of 2020 2 5 自定义 LocalDate today LocalDate now 获取当前日期 1 2 getX 获取
  • WebRTC实时音视频技术的整体架构介绍

    WebRTC 简介 WebRTC 名称源自网页实时通信 Web Real Time Communication 的缩写 是一个支持网页浏览器进行实时语音通话或视频聊天的技术 是谷歌2010年以6820万美元收购Global IP Solut