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

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

一、音视频直播

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

        互动直播主要解决人们远程音视频交流的问题,所以其优点是实时性强,时延一般低于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.rhkb.cn/news/83773.html

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

相关文章

文章被限流了?上不了热榜?

文章目录 惨!惨!!惨!!!热榜🔥热榜🔥🔥热榜🔥🔥🔥粉丝破万INSCODE AI 创作 1INSCODE AI 创作 2INSCODE AI 创作 3联系客服 最近不知道C…

【Windows系统】磁盘、Partition和Volume的联系与区别

1、磁盘 Disk,磁盘。 以下摘自微软 磁盘设备和分区 - Win32 apps | Microsoft Learn 硬盘由一组堆积的盘片组成,其中每个盘片的数据都以电磁方式存储在同心圆或 轨道中。 每个盘片都有两个头,一个在盘片的两侧,在磁盘旋转时读取…

企业服务器数据库中了devos勒索病毒怎么办如何解决预防勒索病毒攻击

随着科学技术的不断发展,计算机可以帮助我们完成很多重要的工作,但是随之而来的网络威胁也不断提升。近期,我们收到很多企业的求助,企业的服务器数据库遭到了devos勒索病毒攻击,导致系统内部的许多重要数据被加密无法正…

【高频面试题】微服务篇

文章目录 Spring Cloud1.Spring Cloud 5大组件有哪些?2.服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?3.负载均衡如何实现的 ?4.什么是服务雪崩,怎么解决这个问题?5.微服务是怎么监控的 业务相关6.项…

ubuntu上安装mosquitto服务

1、mosquitto是什么 Mosquitto 项目最初由 IBM 和 Eurotech 于 2013 年开发,后来于 2016 年捐赠给 Eclipse 基金会。Eclipse Mosquitto 基于 Eclipse 公共许可证(EPL/EDL license)发布,用户可以免费使用。作为全球使用最广的 MQTT 协议实现之一 &#x…

springBean生命周期解析

本文基于Spring5.3.7 参考: kykangyuky Spring中bean的生命周期 阿斌Java之路 SpringBean的生命周期, 杨开振 JavaEE互联网轻量级框架整合开发 黑马程序员 JavaEE企业级应用开发教程 马士兵 Spring源码讲解 一. SpringBean生命周期流程图 二. 示例代码 …

【MySQL】汇总数据

目录 一、聚集函数 1.AVG()参数 2.COUNT()函数 3.MAX()函数 4.MIN()函数 5.SUM()函数 二、聚集不同值 三、组合聚集函数 一、聚集函数 聚集函数:运行在行组上,计算和返回单个值的函数,用来汇总数据。 SQL聚集函数 AVG()返回某列的平…

苹果Mac像Windows一样使用

一、将磁盘访问设置的像Windows一样: 1.1、点击任务栏第一个按钮打开“访达”,点击菜单栏上的访达-偏好设置: 1.2、勾选“硬盘”,这样macOS的桌面上就会显示一个本地磁盘,之后重命名为磁盘根,相当于window…

香港站群服务器为什么适合seo优化?

​  香港站群为什么适合seo优化?本文主要从以下四点出发进行原因阐述。 1.香港站群服务器的优势 2.香港站群服务器与国内服务器的对比 3.多IP站群服务器的优势 4.香港站群服务器在SEO优化中的注意事项 1.香港站群服务器的优势 香港站群服务器是为了满足企业SEO优化需求而提供…

强大的AI语言模型

1.kameAI 点我 1️⃣可以绘图 2️⃣对接4.0 3️⃣具有长篇写作

opencv基础58 傅里叶变换cv2.dft()->(图像增强、图像去噪、边缘检测、特征提取、图像压缩和加密)

傅里叶变换 是啥? 傅里叶变换是以法国数学家让-巴蒂斯特约瑟夫傅里叶(Jean-Baptiste Joseph Fourier)的名字命名的,以纪念他对这一数学工具的贡献。傅里叶生活在18世纪末和19世纪初,他是一位多才多艺的科学家&#xff…

echarts 柱状图 实例

实例效果: 代码: draw(data1, data2,data3) {var option {// backgroundColor: rgb(10,36,68),tooltip: {trigger: axis,axisPointer: {type: shadow,},formatter: function (params: any, ticket: any, callback: any) {const item params[0];var str…

【Spring】(三)Spring 使用注解存储和读取 Bean对象

文章目录 前言一、使用注解储存 Bean 对象1.1 配置扫描路径1.2 类注解储存 Bean 对象1.2.1 Controller(控制器存储)1.2.2 Service(服务储存)1.2.3 Repository(仓库存储)1.2.4 Component(组件储存…

查看CentOS版本及系统位数与设置CentOS 7.9 2009 防火墙配置放开端口的命令与过程

一、查看CentOS版本及系统位数 1.1 命令汇总 //1、安装redhat-lsb yum install -y redhat-lsb//2、查看系统版本信息 lsb_release -a //3、查看系统位数 getconf LONG_BIT1.2 截图 二、设置CentOS7.9 2009 防火墙配置放开端口 2.1 命令汇总 //禁止防火墙开机启动。这种方法方…

【深度学习】采用自动编码器生成新图像

一、说明 你知道什么会很酷吗?如果我们不需要所有这些标记的数据来训练 我们的模型。我的意思是标记和分类数据需要太多的工作。 不幸的是,大多数现有模型从支持向量机到卷积神经网,没有它们,卷积神经网络就无法训练。无监督学习不…

国产芯力特Mini LIN SBC SIT1028Q应用方案,可替代TJA1028

SIT1028Q是一款内部集成高压LDO稳压源的本地互联网络(LIN)物理层收发器,可为外部ECU(Electronic Control Unit)微控制器或相关外设提供稳定的5V/3.3V电源,该LIN收发器符合LIN2.0、LIN2.1、LIN2.2、LIN2.2A、…

umi快速搭建中后台管理系统(命令行创建和区块开发的区别)

后台管理系统 命令行创建新项目命令行效果图配置文件package.json umi3构建区块readme.md主页面页面布局页面布局的一些参数总结 区块开发步骤三级目录 命令行创建新项目 命令行 1、 npm i ant-design/pro-cli -g 2、 pro create demo_spacemv_managementsys 3、 umi 3 simpl…

《合成孔径雷达成像算法与实现》Figure3.7

代码复现如下: clc clear all close all%参数设置 TBP 100; %时间带宽积 T 10e-6; %脉冲持续时间%参数计算 B TBP/T; …

【Vue3】自动引入插件-`unplugin-auto-import`

Vue3自动引入插件-unplugin-auto-import,不必再手动 import 。 自动导入 api 按需为 Vite, Webpack, Rspack, Rollup 和 esbuild 。支持TypeScript。由unplugin驱动。 插件安装:unplugin-auto-import 配置vite.config.ts(配置完后需要重启…

Jmeter(五) - 从入门到精通 - 创建网络计划实战和创建高级Web测试计划(详解教程)

1.简介 上一篇中已经将其的理论知识介绍了一下,这一篇就带着大家一步一步的把上一篇介绍的理论知识实践一下,然后再说一下如何创建高级web测试计划。 2.网络计划实战 通过上一篇的学习,将其分类为: (1)不需…