报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

如何实现 70% 丢包下音视频的高可用之数据篇

  • 2019-12-19
  • 本文字数:2143 字

    阅读完需:约 7 分钟

如何实现70%丢包下音视频的高可用之数据篇

基于卓越的自研音视频引擎,即构科技实现了超低时延的多路音视频通信和优异的音频体验。通过深度优化音视频数据处理、传输策略和音视频信令服务,让音视频服务在各种环境下保持超高的可用性和优良的体验。


以下为在上行丢包 70%和下行丢包 70%网络环境下的可用性展示:


上行丢包 70%:



下行丢包 70%:



从数据可以看到,在上下行 70%的高丢包环境下,即构示例 APP 依然可保持每秒 15 帧的流畅音视频通话。

如何实现音视频云服务在弱网环境下高可用

音视频云服务,核心是对音频/视频数据的处理和传输。但在实际应用场景中,除了音视频数据,还有一些非音视频数据需要同步处理,比如设备初始化、登录通信房间、发起推/拉流消息等服务,这些非音视频数据的处理通常由信令服务来支持。


因此音视频云服务的弱网高可用需要从音视频数据信令服务两方面入手。

音视频数据

在数据处理上,需要适应网络带宽的变化,动态调整音视频码率大小,通过牺牲一定的音视频质量来保证弱网环境下音视频服务的可用性和流畅度;


在数据传输上,传输信道要足够“智能”,能够视具体网络环境保证所需的音视频数据能够顺利传达。

信令服务

音视频信令服务需要在弱网环境下保证服务的高效稳定,实现信令的精准传达。


针对弱网处理的两个方面,我们的教程将分为上下两篇,本文为上篇,介绍的是对音视频数据的处理。


音视频数据的弱网高可用,我们可以从传输协议、信道 QoS 算法以及智能 QoS 策略来实现。

传输协议的选择

互联网的数据传输协议有 TCP UDP


TCP 可靠、稳定,但是建连需要经过 3 次握手,相对繁琐、效率低且占用系统资源高。


UDP 效率高、快、轻量、占用系统资源较少,但是存在不可靠、无序等缺点。


在网络环境好的情况下,只要音视频编解码器相同,TCP 和 UDP 的传输效率是相当的;而在网络环境较差的情况下,基于 UDP 的私有协议对端到端全链条可控,包括码率自适应、丢包重传和前向纠错等信道 QoS 策略,对抗恶劣网络环境会更有保障。


考虑到上述传输协议的特性,即构科技自研音视频引擎,使用基于 UDP 的私有协议来保证音视频数据的处理和传输。

信道 QoS 算法

常见的信道 QoS 算法有码率自适应、丢包重传、前向纠错、错误隐藏等,以下为不同算法的简单介绍:

码率自适应(ABC)

服务端和推流端协作控制码率来自动适应网络环境变化的技术。在网络好的情况下,适当提高码率,提高语音视频的质量;在网络差的情况下,适当降低码率(帧率和分辨也可能会降低),保障音视频通话的可用性和流畅性。

丢包重传(ARQ)

通过重传关键数据包来纠错的信道保护算法。具体地来说,发送端给每一个数据包都植入序列号和时间戳,序列号代表被发送数据包的顺序,允许接收端通过监测顺序号码来发现是否丢包;时间戳代表语音视频数据包采集的时间点。

前向纠错(FEC)

通过增加冗余数据对丢失数据包进行恢复的信道编码算法。具体地说,由发送端对原始数据进行 FEC 编码,生成冗余奇偶校验数据包,原始数据和冗余数据包合并称作 FEC 数据块,发送端发送 FEC 数据块,接收端接收到 FEC 数据块后,通过冗余数据包和原始数据包来恢复出丢失或者出错的数据包。

错误隐藏(PLC)

应用于实时语音通话的场景。为了减少语音数据包丢失造成对语音通话质量的伤害,错误隐藏 PLC 算法通过前一个语音数据包和后一个语音数据包的相关性来“推测出”当前丢失的语音数据包,从而“隐藏”了信道传输所造成的错误。

即构推出智能 QoS 策略

上面介绍了信道保护的各种 QoS 算法,然而单纯依靠某一种算法无法解决所有问题。即构科技推出一套智能 QoS 策略,既保持媒体数据传输的实时性,又具有优良的网络抗性。以下为即构智能 QoS 策略的介绍:

混合 FEC&ARQ


FEC 和 ARQ 各有优缺点。即构的做法是把 FEC 和 ARQ 通过智能策略混合使用,即混合型 HARQ(Hybrid ARQ)。


混合型 HARQ 的智能策略要充分考虑网络情况,需要根据 RTT 和 PLR(丢包率)的数值来智能地决定使用 FEC 还是 ARQ,以及两者都使用的比例。以下为参考值:


带宽估算

无论是 ABC、FEC 还是 ARQ,都要依赖带宽估算算法来工作。ABC 根据带宽估算的结果来自动调节码率;FEC 和 ARQ 根据带宽估算的结果来分配冗余数据所占的带宽。


发送端和服务端协同对网络带宽进行检测和估算,发送端把网络带宽的统计信息上报给服务端,服务端把网络带宽的估算结果反馈给发送端。当然,也可以完全在发送端进行带宽估算。

带宽分配

码率自适应 ABC 模块估算出带宽以后,发送端把带宽分配给原始数据包、FEC 校验包和 ARQ 重传包,这里需要智能的带宽分配策略。带宽分配策略是根据网络情况,包括 RTT 和 PLR 等因素,为原始数据包和冗余数据包分配带宽。


冗余数据包的带宽分配得越多,QoS 信道保护算法的纠错能力就越强,然而原始数据包就相应分配得越少,语音视频的质量也就相对降低。


冗余数据包的带宽分配得越少,QoS 信道保护算法的纠错能力就越弱,但原始数据包的带宽分配得越多,语音视频的质量也就相对得到保障。


因此,智能的带宽分配策略是要在语音视频的质量和 QoS 信道保护算法的纠错能力之间寻找平衡点。


以下为智能的带宽分配策略示例(仅作为参考):




基于 UDP 协议自研音视频引擎卓越的性能,配以针对性调校的信道 QoS 策略,即构科技在音视频数据的处理和传输上具有优秀的网络抗性,在复杂环境下依然可实现稳定高质的低延时多路音视频通话。


2019-12-19 10:273209

评论 1 条评论

发布
用户头像
即构的音视频解决方案可以看看
2020-01-06 17:35
回复
没有更多了
发现更多内容

uni-app跨端开发H5、小程序、IOS、Android(七):uni-app渲染

黑马腾云

html5 uni-app 大前端 3月日更

一个有情怀的PPT模板下载网站

happlyfox

学习 3月日更 工具分享

领跑行业!浪潮云斩获“2021云管和云网大会”多项殊荣

云计算 云原生

LiteOS内核源码分析:位操作模块

华为云开发者联盟

LiteOS 源代码 位操作 bit Huawei LiteOS

人工智能能和人类辩论了;《云网产业发展白皮书》发布

京东科技开发者

人工智能

【Axure9百例NO.45】中继器的不同场景下的样式处理

zhuchuanming

原型设计 Axure 交互原型

NA公链(Nirvana)NAC公链独步公链江湖

区块链第一资讯

区块链

适配器模式在Mybatis中的妙用

Java小咖秀

Java 源码 设计模式 mybatis 开发

java deep vs shallow copies

shengjk1

Java deep copy shallow cop

JVM G1GC的算法与实现

Yano

Java JVM GC G1GC

Flink 提交作业运行的各种模式总结

shengjk1

flink flink 执行

图像视频压缩:深度学习,有一套

华为云开发者联盟

深度学习 自编码器 图像压缩 循环神经网络 视频压缩

一文搞懂 FlinkSQL 的 KafkaSource

shengjk1

flink flink源码 flink sql

C语言性能优化:减少相关性依赖,利用指令并行提升性能

1

编程 性能优化 C语言 cpu 100%

实践解析丨Rust 内置 trait:PartialEq 和 Eq

华为云开发者联盟

rust hash Trait PartialEq Eq

Veema 寄来的新书

吴威

vmware 容灾 备份 veeam esxi

上帝视角掌管城市动向!智慧园区驱动城市数字化转型

一只数据鲸鱼

物联网 数据可视化 智慧城市 智慧园区

一文搞懂Flink SQL执行过程

shengjk1

flink flink源码 flink sql flink sql 执行过程

LeetCode题解:126. 单词接龙 II,BFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

如何在Python中实现Round函数?

华为云开发者联盟

Python 函数 Numpy Round 舍入函数

【IstioCon 2021】如何在Istio中进行源地址保持?

华为云原生团队

开源 云原生 istio 华为云 服务网格

一文搞懂 FlinkSQL函数 LAST_VALUE 的原理

shengjk1

flink flink sql flink 源码

带你全面认识CMMI V2.0(三)——实践域

IPD产品研发管理

CMMI

Java学习笔记——实体类(ENTITY,VO,DTO,BO)

棉花糖

Java

AIOT技术大起底:别人开发“软件”,海尔智家开发“生活”

DT极客

Python OpenCV 图像处理二值化,取经之旅第 7 天

梦想橡皮擦

3月日更

万众瞩目的EGG Network,备受期待的New-DeFi自治共识论坛在海口闭幕

币圈那点事

区块链

前端开发:数据处理方法分享(其一)

三掌柜

vue.js 大前端 3月日更

开源的 Switch 模拟器——GitHub 热点速览 v.21.12

HelloGitHub

GitHub 开源

深入理解ES8的新特性SharedArrayBuffer

程序那些事

JavaScript ecmascript 程序那些事 es8

企业数字化转型,营销技术驱动超级增长!

博文视点Broadview

如何实现70%丢包下音视频的高可用之数据篇_架构_即构_InfoQ精选文章