WebRTC | 音视频直播客户端框架

news2024/12/25 12:23:04

        端到端通信互动技术可分解为以下几个技术难点:客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。

一、音视频直播

        音视频直播可分成两条技术路线:一条是以音视频会议为代表的实时互动直播;另一条是以娱乐直播为代表的流媒体分发。

        互动直播主要解决人们远程音视频交流的问题,所以其优点是实时性强,时延一般低于500ms;而娱乐直播则主要解决音视频的大规模分发问题,因此其在大规模分发上更具优势,但实时性比较差,通常时延在3s以上。

1.常见的直播技术

常见的直播技术

        上表中,只有WebRTC技术用于实时互动直播,而其他几种技术都用于娱乐直播。

        HLS是基于HTTP的,它首先对媒体流(文件)进行切片,然后通过HTTP传输,接收端则需要将接收到的切片进行缓冲,之后才能将媒体流平稳地播放出来。(实际上,最初娱乐直播也只有RTMP这一种方案可选,但后来由于苹果宣布不再支持RTMP,并推出了自己的解决方案HLS,最终导致RTMP走向了消亡。

        将RTMP换成HLS需要付出高昂的成本,于是有人提出了HTTP-FLV方案,即传输的内容仍然使用RTMP格式,但底层传输协议换成HTTP,这种方案既可以保障其实时性比HLS好,又可以节约升级的成本,因此也受到各方的欢迎。不过HTTP-FLV的扩展性比较差,因此它只是一种临时方案。

        HLS方案虽然不错(有大量的用户使用),但其他公司也有类似的方案,这使得各直播厂商不得不写多套代码,费时费力。于是,FFMPEG推出了DASH方案,该方案与HLS类似,也是以切片的方式传输数据,最终该方案成为国际标准,从而使直播厂商只要写一套代码就可以实现切片传输了。

2.音视频直播的现状

        WebRTC的愿景是让浏览器间可以快速、方便地实现端到端的实时音视频互动。实时互动直播与娱乐直播技术相结合成为现在直播服务器的主流技术方案。

        音视频直播技术有两个重要趋势:一是实时互动直播技术与娱乐直播技术合二为一;二是WebRTC已经是直播技术的标准,大家都在积极地拥抱WebRTC。

二、自研直播客户端架构

1.基本的五大模块

        一个最简单的直播客户端至少应该包括:音视频采集模块、音视频编码模块、网络传输模块、音视频解码模块和音视频渲染模块五大部分。

        细化一下,音频的采集模块与视频的采集模块是分开的,而音频编解码模块与视频的编解码模块也是分开的。也就是说,音频采用了一条处理流程,视频则采用了另外一条处理流程,它们之间并不相交。在音视频处理中,我们一般称每一路音频或每一路视频为一条轨。

2.支持跨平台

        除上述笼统的五大模块之外,还需考虑跨平台问题。只有在各个平台上都能实现音视频的互联互通,才能称得上是一个合格的音视频直播客户端。以音频采集为例,在不同的平台上,采集音频数据时使用的系统API是不一样的。PC端使用的是CoreAudio;Mac端使用的系统API也称为CoreAudio,不过具体的函数名是不同的;Android端使用的是AudioRecord;iOS端使用的是AudioUnit;Linux端使用的是PulseAudio。

3.编解码的插件化管理

        对于音视频直播客户端来说,我们不但希望它可以处理音频数据、视频数据,而且还希望它可以分享屏幕、播放多媒体文件、共享白板……即使是处理音视频,我们也希望它可以支持多种编解码格式:

  • 音频除了可以支持Opus、AAC外,还可以支持G.711/G.722、iLBC、Speex等;
  • 视频除了可以支持H264外,还可以支持H265、VP8、VP9、AVI等。

        G.711/G.722主要用于电话系统,音视频直播客户端要想与电话系统对接,就要支持这种编解码格式;Opus主要用于实时通话;AAC主要用于音乐类的应用,如钢琴教学等。实现插件化管理可以很方便的使直播客户端能够支持尽可能多的编解码器。

4.关注其他问题

  • 音视频不同步问题

        音视频数据经网络传输后,由于网络抖动和延迟等问题,很可能造成音视频不同步。对此,可在音视频直播客户端增加音视频同步模块以保障音视频的同步。

  • 3A问题

        3A是指:Acoustic Echo Cancelling(AEC),即回音消除;Automatic Gain Control(AGC),即自动增益;Active Noise Control(ANC,也称为Noise Cancellation、Noise Suppression),即降噪。

  • 音视频实时问题

        TCP是以牺牲实时性来保障网络服务质量的。所以,为了保证实时性,一般情况下实时直播应该首选UDP。

三、WebRTC客户端架构

         从WebRTC架构图中可以了解到,它大体上可以分成四层:接口层、Session层、核心引擎层和设备层。

  • 接口层包括两部分:一是Web层接口;二是Native层接口。也就是说,既可以使用浏览器开发音视频直播客户端,也可以使用Native(C++、Android、OC等)开发音视频直播客户端。
  • Session层的主要作用是控制业务逻辑,如媒体协商、收集Candidate等。
  • 核心引擎层包括的内容比较多。从大的方面说,它包括音频引擎、视频引擎和网络传输层。音频引擎层包括NetEQ、音频编解码器(如Opus、iLBC)、3A等;视频引擎包括JitterBufer、视频编解码器(VP8、VP9、H264)等;网络传输层包括SRTP、网络I/O多路复用、P2P等。
  • 设备层主要与硬件打交道,它涉及的内容包括:在各终端设备上进行音频的采集与播放,视频的采集,以及网络层等。

四、自研系统与WebRTC比较

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fabric

Fabric Fabric.js是一个非常好用的Javascript HTML5 canvas库,封装了canvas原生较为复杂的api,在canvas元素的顶部提供交互式对象模型,用于实现图片的变形旋转拖拉拽等功能。 在线demo: 官网链接 下载 npm install fabric --save或 yarn …

实力认证 | 百分点科技蝉联中国大数据企业50强

近日,第八届中国大数据产业生态大会在京召开 ,本届大会以“数实共融 生态共建”为主题,由赛迪传媒、大数据产业生态联盟、《软件和集成电路 》杂志社联合主办。会上颁布多个奖项,百分点科技斩获2023中国大数据企业50强、金沙奖“…

由于找不到vcruntime140_1.dll,无法继续执行代码重新安装程序,怎么解决

vcruntime140_1.dll是Microsoft Visual C Redistributable for Visual Studio 2015中的一个动态链接库文件。它是用于支持在Windows操作系统上运行使用Visual C编写的应用程序或游戏所必需的文件之一。当出现vcruntime140_1.dll丢失的错误时,通常是由于缺少或损坏了…

作者推荐 | 【深入了解系统性能优化】「实战技术专题」全方面带你透彻探索服务优化技术方案(系统服务调优)

全方面带你透彻探索服务优化技术方案(服务器系统性能调优) 调优意义计划分析 流程相关分析优化分析Nginx请求服务日志将请求热度最高的接口进行优化异步调用优化方式注意要点 分析调用链路追踪体系建立切面操作分析性能和数据统计存储相关的调用以及耗时…

拓展知识 启望未来 | 记内蒙古移动《AntDB ACA初级认证培训》活动

炎炎六月,迎来了备受期待的“亚信科技AntDB数据库初级认证培训”活动。通过培训,希望内蒙古移动及项目组的伙伴们能够系统学习到国产数据库的核心知识,提升专业技能,为服务感知提升、运维团队培育注入新的活力。 26号上午&#xf…

Pytest测试框架3

目录: pytest结合数据驱动-yamlpytest结合数据驱动-excelpytest结合数据驱动-csvpytest结合数据驱动-jsonpytest测试用例生命周期管理(一)pytest测试用例生命周期管理(二)pytest测试用例生命周期管理(三&a…

rust-异步学习

rust获取future中的结果 两种主要的方法使用 async: async fn 和 async 块 async 体以及其他 future 类型是惰性的:除非它们运行起来,否则它们什么都不做。 运行 Future 最常见的方法是 .await 它。 当 .await 在 Future 上调用时,它会尝试把…

vue2.29-Vue3跟vue2的区别

1、vue3介绍 更新(和重写)Vue的主要版本时,主要考虑两点因素:首先是新的JavaScript语言特性在主流浏览器中的受支持水平;其次是当前代码库中随时间推移而逐渐暴露出来的一些设计和架构问题。 相较于vue2,vu…

从零开始打造你的书店小程序商城

随着互联网的发展,线上商城成为了书店经营的重要方式之一。如何快速搭建一个符合书店特点的小程序商城呢?下面将为您详细介绍利用乔拓云平台搭建一个符合书店特点的小程序商城的步骤。 首先,登录乔拓云平台,进入商城后台管理页面。…

uniapp两个单页面之间进行传参

1.单页面传参:A --> B url: .....?code JSON.stringify(param), 2.单页面传参B–>Auni.$emit() uni.$on()

Aspose.Imaging for Python via .NET Crack

Aspose.Imaging for Python via .NET Crack Aspose.Imaging for Python via.NET是一个提供高级图像处理功能的库。您可以使用此API轻松创建、加载、操作、转换或压缩图像。另外,Aspose.Imaging for Python通过.NET支持绘图和使用图形基元。图像导出和转换-API的核心…

使用XMLHttpRequest实现文件异步下载

1、问题描述 我想通过异步的方式实现下载文化&#xff0c;请求为post请求。一开始我打算用ajax。 $.ajax({type:post,contentType:application/json,url:http://xxx/downloadExcel,data:{data:JSON.stringify(<%oJsonResponse.JSONoutput()%>)},}).success(function(dat…

旅游系统开源

线上旅游电子商务系统 适用业务场景&#xff1a; 线路、酒店、门票、租车、邮轮、导游、团购、签证、特产、户外、商城等。 支持B2C\B2B2C\B2B业务&#xff0c;支持微信公会号、微信小程序、PC端等等。 源码介绍&#xff1a; 1、采用WEB软件应用最广泛的PHPMYSQL语言 采用B…

4大软件测试策略的特点和区别(单元测试、集成测试、确认测试和系统测试)

四大软件测试策略分别是单元测试、集成测试、确认测试和系统测试。 一、单元测试 单元测试也称为模块测试&#xff0c;它针对软件中的最小单元&#xff08;如函数、方法、类、模块等&#xff09;进行测试&#xff0c;以验证其是否符合预期的行为和结果。单元测试通常由开发人…

单例模式(C++)

定义 保证一个类仅有一个实例&#xff0c;并提供一个该实例的全局访问点。 应用场景 在软件系统中&#xff0c;经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例&#xff0c;才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器&#xff0c;提供一种…

【Docker】Docker私有仓库的使用

目录 一、搭建私有仓库 二、上传镜像到私有仓库 三、从私有仓库拉取镜像 一、搭建私有仓库 首先我们需要拉取仓库的镜像 docker pull registry 然后创建私有仓库容器 docker run -it --namereg -p 5000:5000 registry 这个时候我们可以打开浏览器访问5000端口看是否成功&…

zookeeper和kafka

目录 一、zookeeper理论 1.1、zookeeper定义 1.2、zookeeper工作机制 1.3、zookeeper特点 1.4、zookeeper的数据结构 1.5、zookeeper应用场景 1.6、zookeeper的选举机制 二、部署Zookeeper 集群 2.1、环境准备 2.2、安装 Zookeeper 2.3、修改配置文件 2.4、配置…

编写第一个 React Native 程序

React Native 目录 使用React Native CLI命令创建的目录如下图所示&#xff1a; 重要目录说明 目录说明__tests__存放测试用例的目录.bundle / config配置文件&#xff08;一般不会用到&#xff09;android 和 IOS 文件夹这两个文件夹主要是存放安卓和 ios 相关的配置文件和…

ESP32学习笔记(52)————三轴加速度ADXL345使用(SPI方式)

一、简介 ADXL345 是一款 ADI 公司推出的基于 iMEMS 技术的超低功耗3轴加速度计&#xff0c;分辨率高(13位)&#xff0c;测量范围达 16g。数字输出数据为 16 位二进制补码格式&#xff0c;可通过 SPI(3线或4线) 或 I2C 数字接口访问。ADXL345 非常适合移动设备应用。它可以在倾…

小研究 - MySQL 分区技术在海量系统日志中的应用

随着信息技术的飞速发展&#xff0c;系统的业务功能不断扩大&#xff0c;产生的日志与日俱增&#xff0c;导致应用软件的运行速度越来越慢&#xff0c;不能很好地满足用户对软件性能的需求。基于此&#xff0c;重点研究了 MySQL 分区技术在大数据量软件日志中的应用&#xff0c…