写点什么

高网络抗性技术与低延迟连麦技术

2020 年 2 月 04 日

高网络抗性技术与低延迟连麦技术

信道 QoS

信道的保障即网络传输的保障。音视频实验室互动直播 SDK 从几个方面对音视频码流进行保护。


首先是信道码流的 FEC(前向纠错),它包括普通的逻辑运算 FEC 和 RS 码 FEC(RS 码原理请问度娘谷哥):



FEC 抗丢包能力和冗余率成正比:冗余越高,抗性越好。它的优点是延迟低(单帧内 FEC 引入的延迟可以忽略),但它的最大缺点是需要占用网络带宽,这样会导致音视频编码的有效码率的降低,从而导致音视频质量的下降。


因此 UDT 协议引入了丢包重传技术。在上行和下行端,SDK 会通过探测算法,实时监测网络情况,根据当前网络的上行、下行的延迟、抖动、丢包和可用带宽等情况,自适应地调制重传 BUF 大小、重传延迟、重传次数、重传间隔、一次重传包数等。下行端还加入了智能 jitterbuf,根据网络的丢包和抖动情况,它能够自动调整抗抖能力和延迟大小,从多方面保证最优的重传效率,减少无效的重传,避免带宽的浪费。



其次,音频还有 PLC 机制,通过前后帧插值、复制 pitch、带内冗余编码参数、基于混响滤波器等手段,在解码端进行纠错。


信源 QoS

信源 QoS 保障机制主要应用于视频中。我们知道,视频的端到端传输需要经过采集-前处理-编码-传输-解码-显示,其中关键点在于发送端的编码和接收端的解码。


视频的编码是把一帧一帧的采集图像数据用一定的压缩算法压缩为比原来小几百几千倍的码流。在编码压缩图像帧时,需要用到空间上的邻域参考和时间上的前后域参考关系。如果被参考的数据丢失或者损坏,那么参考了这些数据的图像帧在解码端就无法解码,视频就会出现卡顿、花屏等现象,导致用户体验很差。


在视频的 H264/H265 编码中,一般的帧类型有 I 帧、P 帧、B 帧(各种帧类型的详细情况请问度娘谷哥,参考 H264/H265 协议)。I 帧是帧内自参考、P 帧是帧间前向参考、B 帧可以前向后向参考。一帧 I 帧和若干帧 P 帧或 B 帧,组成了一个编码 GOP。解码器解码一组 GOP,必须先解码出为首的 I 帧。



实时视频通讯一般采用 IPPPPPP 的 GOP 模式。

原因:B 帧有后向参考,需要等待后面的帧到来才能解码,这样会引入延时;I 帧也不能刷太频繁,因为 I 帧码率大、占带宽,且容易出现图像发虚现象。


小科普:


I 帧一般质量较好,P 帧质量相对较差。I 帧过密时,会察觉到 I 帧和 P 帧替换时的图像质量的明显差异,这种现象又叫做呼吸效应。


网络良好的实时视频会议,一般采用 GOP 无限大的模式。但该模式有个缺点:如果其中某一帧因为丢包或其他原因导致有损,那么同一个 GOP 内它后面所有的帧都无法解码。所以该模式下每一帧都同样重要,做 QoS 保护时也需要同等对待。由于该模式过分依赖信道 QoS 的保护,导致 QoS 机制的灵活性不够、网络适应性不好。


鉴于此,我们利用 H264/H265 编码的多参考帧机制,对编码 GOP 模式进行了针对性的优化,使得视频帧的抗网络丢包能力大大提高,同时有利于对不同的帧类型划分不同的重要程度,以此来进行不对等的信道抗丢包保护。


流控 QoS

音视频实验室互动直播 SDK 还在流控层面上保证音视频的质量,客户端分析统计当前接收和发送的媒体流信息和网络状态,上报给流控服务器,流控服务器根据当前上行和下行的网络状态(丢包大小、抖动大小、延迟大小、可用带宽大小等)自动调节当前编码和传输参数,比如配置合适的编码帧率、码率、分辨率、GOP 类型、GOP 大小、编码 QP 等等;配置合适的 UDT 重传参数和延迟参数;配置合适的 FEC 参数(冗余率、FEC 方法、分组策略等),从多方面避免网络丢包和拥塞恶化,主动调节网络的带宽负担。


需要强调的是,上述三个层面的 QoS 机制并不是独立运行的,而是通过流控服务器和客户端的交互有机地结合在一起,形成一个统一的音视频媒体 QoS 保障机制。



比如,流控服务器根据网络状态,配置编码的各种参数的同时,会配置当前的抗丢包方式,可能只用信道保护或者信源保护,也可能信道和信源同时使用;也可能根据不同的帧类型和不同的 GOP 类型对视频帧使用不同的 FEC 方法、不同的 FEC 冗余率;客户端也会根据当前接收到的码流情况,来决定当前丢包用丢包重传,还是用 FEC 恢复;可能还会配置当前是否需要主动 FEC 等等。三个层面的 QoS 是个比较复杂的关系。


通过三层 QoS 机制,音视频实验室互动直播 SDK 能够获得高达 65%的下行丢包、35%的上行丢包的网络抗性。



本文转载自腾讯多媒体实验室公众号。


原文链接:https://mp.weixin.qq.com/s/BmLeVbM5wsZUKVcCH1skbw


2020 年 2 月 04 日 20:39228

评论

发布
暂无评论
发现更多内容

垃圾代码和优质代码的区别?

xcbeyond

Java 优化代码 3月日更

翻云覆雨——前景理论之隔离效应

Justin

心理学 28天写作 游戏设计

Spring Boot工程结构

韩斌

Spring Boot

广告主营销策略的改变,为什么总离不开户外媒体?

󠀛Ferry

七日更 3月日更

正则表达式.05 - 匹配模式

insight

正则表达式 3月日更

CloudQuery v1.3.4 版本更新

CloudQuery社区

oracle 运维 编辑器 sql 数据库管理工具

2021最新腾讯面经分享:Java面试核心点/技术笔记/学习视频(春招必备)

比伯

Java 编程 程序员 架构 面试

第9周课后练习-性能优化三

潘涛

架构师训练营 4 期

B端产品经理自我认知

lenka

3月日更

redis工作原理(下)

Sakura

28天写作 28天挑战 3月日更 21天挑战

熬夜重构了IDEA插件Toolkit(整合程序员常用的工具箱),更加便捷

Silently9527

Java idea插件 程序员工具、

手写的第一个 Java 应用程序,执行的时候发生了什么?

白色蜗牛

Java

Webpack 基石 tapable 揭秘

vivo互联网技术

前端 webpack 流程管理 tapable

密码学系列之:内容嗅探

程序那些事

加密解密 密码学 程序那些事 内容嗅探

Vue源码学习 | 4个实用的javascript技巧

devpoint

Vue vuejs stringify

调整好心态

Nydia

RabbitMQ集群简介

Kylin

读书笔记 RabbitMQ 消息队列 3月日更 集群简介

RPA助力证券行业高质量发展

Jason Tien

RPA 金融科技 证券 云原生微服务 自动化平台

SICP 习题解答 1.11

十元

(28DW-S8-Day18) 可插拔式知识

mtfelix

28天写作

Elasticsearch 定制 Dynamic Mapping 策略

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

二十张图让你一分钟全面学习数仓建设之路

初学大数据

大数据 数据仓库

《精通比特币》学习笔记(第六章)

棉花糖

区块链 学习笔记 3月日更

阿里大牛亲码1222道Java岗面试真题!(2021全彩版)

程序员小毕

Java 程序员 架构 面试 分布式

Python 关键字

HoneyMoose

翻译:《实用的Python编程》04_03_Special_methods

codists

Python

容器 & 服务:Kubernetes构件及Deployment操作

程序员架构进阶

Docker Kubernetes 容器技术 28天写作 3月日更

微服务想用好,得把分布式和微服务之间的关系搞清楚

读字节

分布式 微服务 微服务架构 SpringCloud 分布式架构

算法攻关 - 重建二叉树 (O(n))_0105

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 重建二叉树

常见 git 需求整理(持续更新中)

blueju

git 前端 工具 npm

一个PHPer的Golang之路

Kevin Wan

php golang 微服务

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

高网络抗性技术与低延迟连麦技术-InfoQ