写点什么

如何实现 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:273412

评论 1 条评论

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

数据结构与算法系列之跳表(GO)

书旅

数据结构 算法 Go 语言

Gradle doesn't run because it can't find tools.jar in JRE

mengxn

kotlin Gradle

修炼码德系列:简化条件表达式

Silently9527

Java 经验分享 代码重构 代码规范

《穿越数据的迷宫》笔记:第1章 数据管理的重要性

方志

数据治理

AnyRTC --- Flutter 实现视频通话

anyRTC开发者

flutter 音视频 WebRTC 跨平台 sdk

整天都在讨论使用SpringBoot,可你居然连缓存都不清楚

小Q

Java 缓存 学习 面试 springboot

华为工程师又爆一份“架构师宝典”,价值百万薪“史诗级”操作系统,送你备战金三银四要不要?

编程 程序员 计算机网络 操作系统

创业项目快速分析框架

boshi

创业 商业

线程池 ForkJoinPool 简介

Java老k

Java 线程池 forkjoinpool 工作窃取

算力 | 手写红黑树

九叔(高翔龙)

数据结构 算法 二叉树 红黑树

Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory

程序员小航

spring 源码 源码阅读

EXCEL、图片处理常用技巧

jiangling500

Excel 图片处理

Appium之测试微信小程序

清菡软件测试

App

架构第十一周作业

Nick~毓

深入浅出 Go - sync.Pool 源码分析

helbing

Go 语言

冰河教你一次性成功安装K8S集群(基于一主两从模式)

冰河

Docker 云原生 k8s

区块链落地开发,区块链版权应用搭建

t13823115967

区块链+ 区块链落地开发 区块链版权应用搭建

《华为数据之道》读书笔记:第 10 章 未来已来:数据成为企业核心竞争力

方志

数字化转型 数据治理

《穿越数据的迷宫》笔记:中文版序二

方志

数据治理

Linux常用命令速查

jiangling500

linux命令

漫画:什么是 “智能供应链” ?

京东科技开发者

云计算 供应链 智能供应链

高速公路二维码定位报警系统搭建解决方案

t13823115967

高速公路二维码定位报警 智慧公安

GO训练营第2周总结

Glowry

关于Mysql常用数据类型的小抄

xzy

MySQL

为什么边缘计算将终止云计算?

VoltDB

数据库 云计算 数据分析 边缘计算

深度剖析github star数15.1k的开源项目redux-thunk

徐小夕

Java GitHub 大前端 React

甲方日常 61

句子

工作 随笔杂谈 日常

智能新时代 安全新未来 首届国网北京电力人工智能数据竞赛正式启动

极客播报

有奖讨论|作为程序员,女朋友是怎么吐槽你的?

Simon郎

女朋友 话题讨论

360OS张焰:AI视觉在教育中的应用

ZEGO即构

Forsage智能合约系统APP开发|Forsage智能合约软件开发(现成)

系统开发 现成系统

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