音视频绕不开的话题之WebRTC

什么是WebRTC?

闲来无事,我们今天探讨下音视频绕不开的一个话题:WebRTC。WebRTC之于音视频行业,无异于FFMpeg,可以说WebRTC的开源,让音视频行业大跨步进入发展快车道。

WebRTC是一个支持实时音视频通信的开源项目,它允许网络应用或者站点在无需安装任何插件或者第三方的软件的情况下,建立浏览器之间点对点的(Peer-to-Peer)的音视频通信。

WebRTC项目由三个模块组成:媒体模块、信令模块和网络模块。

  1. 媒体模块:主要负责音视频的采集、编解码以及加密等处理,其中音视频的采集和编解码过程分别使用了G.711、H.264和Opus等音视频编解码协议,这些协议可以在保证音视频质量的同时,尽可能地减少传输的数据量,从而提高通信效率。
  2. 信令模块:主要负责在通信过程中提供信令交换的支持,包括建立通信连接、协商通信参数以及管理通信过程等功能。
  3. 网络模块:主要负责音视频数据的传输,包括数据包的发送和接收,同时还支持对等网络连接的建立和维护。

WebRTC的发展历程

2010年5月,Google以6820万美元收购VoIP软件开发商Global IP Solutions的GIPS引擎,并改为名为“WebRTC”。WebRTC使用GIPS引擎,实现了基于网页的视频会议,并支持722,PCM,ILBC,ISAC等编码,同时使用谷歌自家的VP8视频解码器;同时支持RTP/SRTP传输等。

谷歌2011年6月3日宣布向开发人员开放WebRTC架构的源代码。这个源代码将根据没有专利费的BSD(伯克利软件发布)式的许可证向用户提供。开发人员可访问并获取WebRTC的源代码、规格说明和工具等。 [2]

Google Chrome:2012年1月,将WebRTC集成进Dev Channel,同年6月又完成Stable Channel的20版的集成(2012年7月,PeerConnection与MediaStream仍必须透过chrome://flags page来打开)。

Mozilla Firefox:2012年初Mozilla集成WebRTC入Firefox Alpha,此一版本的Audio Mixing已完成于Media Stream。

2012年1月,谷歌已经把这款软件集成到Chrome浏览器中。同时FreeSWITCH项目宣称支持iSAC audio codec。

2012年4月,Mozilla展示Firefox中WebRTC的视频对话。

2013年6月,发布22.0版本正式集成及支持WebRTC。

2013年9月,发布24.0版本,并宣布Firefox for Android(移动版)正式集成及支持WebRTC。

Opera:2012年1月,Opera初步集成WebRTC。

Internet Explorer:Microsoft开始开放API。

Ericsson:2012年11月,Ericsson Labs做出了全世界第一个可以支持WebRTC的手机浏览器。

SeaMonkey:2013年1月发布的15.0版本初步集成WebRTC。

2019年10月22日,W3C WebRTC 工作组(Web Real-Time Communications Working Group)发布 WebRTC 可伸缩视频编码(SVC)扩展(Scalable Video Coding (SVC) Extension for WebRTC)的首个公开工作草案(First Public Working Draft)。 文档定义了 WebIDL 中的一组 ECMAScript APIs 来扩展 WebRTC 1.0 API,以允许用户代理支持可伸缩视频编码(SVC)。 [5]

2022年3月15日,W3C 媒体工作组发布自动播放策略检测(Autoplay Policy Detection)规范的首个公开工作草案。该规范为开发者提供了一种能力,用以探测在不同情况下是否允许自动开始播放媒体文件。欢迎公众通过 Github 反馈对该文档的意见与建议。

WebRTC用途

WebRTC的用途有以下几个方面:

  1. 网页实时通信:WebRTC的主要目的是实现网页间的实时通信,包括音视频通话、屏幕共享等。通过WebRTC技术,用户可以在不安装任何插件或第三方软件的情况下,在网页上直接进行实时音视频通信,大大提高了通信的便捷性和效率。
  2. 点对点通信:WebRTC支持点对点的通信方式,这种通信方式可以在对等体之间直接建立连接,避免了传统通信方式中的服务器中转,提高了通信效率和可靠性。
  3. 安全性保障:WebRTC使用了一些安全机制,如DTLS和SRTP等协议,对音视频数据进行加密和完整性保护,保障了通信的安全性。
  4. 跨平台:WebRTC可以在各种支持HTML5的浏览器中使用,包括PC、移动设备和智能电视等设备,可以跨平台使用。
  5. 灵活的扩展性:WebRTC提供了丰富的API和接口,可以方便地进行定制和扩展,可以满足不同场景下的需求。

WebRTC通信原理

WebRTC将媒体采集、编码、传输、解码、渲染等功能集成在一起,并通过一些安全机制和网络传输技术,实现了实时、安全、高效的音视频通信。

​通信原理主要包括以下几个步骤:

  1. 媒体采集:在通信开始前,用户通过WebRTC的API,将本地的音视频数据采集到应用中。
  2. 媒体编码:在媒体采集后,WebRTC会对音视频数据进行编码,以便进行后续的传输和处理。WebRTC支持多种音视频编码协议,如H.264、G.711和Opus等。
  3. 媒体数据传输:在媒体编码后,WebRTC会将音视频数据传输到对等体之间。WebRTC支持点对点(P2P)的通信方式,可以在对等体之间直接建立连接,避免了传统通信方式中的服务器中转,提高了通信效率和可靠性。
  4. 媒体解码:在接收到对等体传来的音视频数据后,WebRTC会对这些数据进行解码,还原成原始的音视频流。
  5. 媒体渲染:在音视频数据解码后,WebRTC会将音视频数据进行渲染,以便用户可以听到和看到对方的音视频信息。
  6. 数据加密和完整性保护:在音视频数据传输过程中,WebRTC使用了一些安全机制,如DTLS和SRTP等协议,对音视频数据进行加密和完整性保护,保障了通信的安全性。
  7. 网络传输和连接管理:WebRTC还提供了网络传输和连接管理的功能,包括信令传输、网络状态检测、连接管理等功能,以保证通信的稳定性和可靠性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20991.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件高效自动化部署:华为云部署服务CodeArts Deploy

随着互联网、数字化的发展,公司机构与各类企业往往需要进行大量频繁的软件部署,部署设备类型多样,如:本地机器、云上裸金属服务器、云上虚拟机与容器等。 面对多种部署模式、分布式复杂运行环境,该如何用最短时间、高…

初识stm32

1、什么是单片机? 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处 理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功 能(可能还包括显示驱动电路、…

建议收藏 | 可视化ETL平台--Kettle

Kettle的介绍 学习目标 知道什么是ETL及Kettel是开源的ETL工具 了解kettle环境的安装流程 1.ETL介绍 ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程),对于企业或行业应用来说,我们经常会遇到各种…

python中的生成器(generator)

一、生成器 生成器是 Python 中非常有用的一种数据类型,它可以让你在 Python 中更加高效地处理大量数据。生成器可以让你一次生成一个值,而不是一次生成一个序列,这样可以节省内存并提高性能 二、实现generator的两种方式 python中的gener…

LeetCode·每日一题·2544. 交替数字和·模拟

作者:小迅 链接:https://leetcode.cn/problems/alternating-digit-sum/solutions/2341276/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-7fjq/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权&#…

QT使用同一按钮实现打开/关闭新窗口

QT使用同一按钮实现【打开/关闭】新窗口,实现方案如下: 使用一个全局状态变量记录窗口打开状态通过该状态实现新窗口的show和close 实现代码如下: #include "mainwindow.h" #include "ui_mainwindow.h" #include "…

C++ | 反向迭代器

目录 前言 一、基本框架 二、起始位置和结束位置 三、反向迭代器的自增与自减 四、反向迭代器的判断 五、list类的修改 六、单独设计反向迭代器类的意义 前言 反向迭代器实际上与我们前面的stack、queue、priority一样,都是适配器;我们可以通过正向…

信道编码---RS编码与译码原理

本文介绍了RS编码以及译码的原理。 本文的内容基本上都来自刘梦欣的《基于FPGA的RS编译码研究与设计》,大家可以通过知网找到这篇文章,链接在下面。对RS码的原理讲解非常清楚,如果要看的话可以结合第2和第3部分一起看更好懂。我的整理也是比较…

【采用有限元法技术计算固有频率和欧拉屈曲荷载】使用有限元法的柱子的固有频率和屈曲荷载(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Java----使用eureka进行注册连接(微服务简单实现)

当采用微服务架构时,各个业务流程被逐一分解,虽说是分解,但还是要进行连接的,最简单的就是使用http请求,将他们联系起来,通过给容器注入restTemplate,然后使用内置的方法进行请求,但…

抖音seo源码-源代码开发搭建-开源部署操作日志

一、开发者前言大环境概述 抖音seo源码开发是一项非常重要的技术,在抖音上,有很多视频,如果你想让自己的视频脱颖而出,那么就需要优化自己的seo源码。不过,为了保护用户的隐私,抖音并不公开其seo算法的细节…

Git的使用

初始化仓库 git init 查看仓库状态 git status 仓库的四种状态: Untracked(未跟踪): 文件未被Git追踪,即Git对文件的版本控制尚未开始。这意味着文件还没有被添加到Git仓库中。Unmodified(未修改): 文…