流媒体弱网优化之路(FEC)——FEC原理简介

流媒体弱网优化之路(FEC)——FEC原理简介流媒体学习之路 NACK 纯 NACK 方案的优化探索文章目录流媒体学习之路 NACK 纯 NACK 方案的优化探索一 信道保护措施背景介绍 1 1 ARQ 丢包重传 1 2 ABC 码率自适应 1 3 FEC 前向纠错二 FEC 基本原理介绍 2 1 静态 FEC 基本原理 2 1 1 一阶冗余 2 1 2 二阶冗余 2 2 动态 FEC 介绍 2 2 1 动态 FEC 的发展 2 2 2 WebRTC 中的 FEC 三 业务相关的 FEC 上行弱网时推流使用 FEC 四 结语一 信道保护措施背景介绍 我们都知道 随着半导体集成技术的发展 fec

流媒体弱网优化之路(FEC)——FEC原理简介

—— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw/Bifrost 目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置,提供全面的可视化算法观察能力。 欢迎大家使用 —— 


一、信道保护措施背景介绍

在这里插入图片描述

1.1、ARQ丢包重传

1.2、ABC码率自适应

  ABC 全称 Adaptive Bit-rate Control,中文意译为码率自适应,是服务端和推流端协作控制码率来自动适应网络环境变化的技术。码率自适应的目的是为了对抗弱网环境。在网络好的情况下,适当提高码率,提高语音视频的质量和降低延迟;在网络差的情况下,适当降低码率,保障语音视频通话的可用性和流畅性,适当牺牲音画质量。

1.3、FEC前向纠错

  FEC 全称是 Forward Error Correction,中文翻译为前向纠错,是一种通过增加冗余数据对丢失的数据包进行恢复的信道编码算法。具体地说,由发送端对原始数据进行 FEC 编码,生成冗余奇偶校验数据包,原始数据和冗余数据包合并称作 FEC 数据块,原始数据包和冗余数据包的数量比例是固定的。发送端发送 FEC 数据块。接收端接收到 FEC 数据块后,通过冗余数据包和原始数据包来恢复出丢失或者出错的数据包。
  FEC 编解码算法目前比较成熟的为: RS(Reeds-Solomon) 算法、Raptor 算法和 Tornado 算法。
  但罗马非一日建成,我们下面将从最基本的前向纠错算法来进行介绍。

二、FEC基本原理介绍

  静态的FEC指的是冗余度、保护程度都不随着网络变化而变化的前向纠错算法,而动态的FEC指的是保护算法会随着网络的波动而不断调整保护策略的前向纠错算法,下面将从静态FEC开始介绍,逐步深入。

2.1、静态FEC基本原理

  首先,假设我们有数据包D1、D2、D3、D4,以最简单的对角01矩阵为掩码表可得:
在这里插入图片描述

  可知,换算的结果还是他们本身。

2.1.1、一阶冗余

  那么什么是一阶冗余呢?其实很简单,所谓一阶冗余算法,就是每n个数据插入一个冗余数据(也即FEC编码组长度为n+1);这n个数据和其对应的冗余数据构成一组数据,这组数据中丢掉任何一个数据都可以通过另外n个数据恢复出来。如下图,我们加入了一行冗余数据R11、R12、R13、R14来进行换算。
在这里插入图片描述
  结果多出了一个C1冗余数据包。
  当我们数据D2在传输中丢失时将出现以下情况:
在这里插入图片描述

  这时候机智的我们将可以用C1进行计算反推出D2。具体的推算过程如下:
在这里插入图片描述
在这里插入图片描述

2.1.2、二阶冗余

  相信有了以上的基础,不难看出二阶冗余就是再多加入一行冗余数据来进行计算的。
在这里插入图片描述

  当在传输中丢失了D3、D4时也就有了以下的矩阵等式。
在这里插入图片描述

  可推算出C1、C2为:
在这里插入图片描述

  由于D3、D4丢失,因此我们对矩阵进行消,并令剩下的素进行矩阵运算后的结果为 α1、α2。
在这里插入图片描述

  那么我们的矩阵就变成了这样:
在这里插入图片描述

  事实上就是解以下方程:
在这里插入图片描述

  最终得到了D3、D4为以下结果:
在这里插入图片描述

  其实根据以上的方法,我们还可以推出更高阶冗余的算法,在此就不赘述了。

2.2、动态FEC介绍

虽然静态FEC前向纠错可以有效的提高数据可靠性,但由于其冗余模式固定,无论网络状态如何,都会消耗一定的网络带宽,导致在正常网络状态下减少了音视频传输的有效带宽。因此,自适应向前纠错应运而生。

2.2.1、动态FEC的发展

2.2.2、WebRTC中的FEC

  Webrtc中的fec分为两部分UlpFEC和FlexFEC;
  UlpFEC为Uneven Level Protection FEC的缩写,非均衡级别保护向前纠错。它可以针对不同数据包提供不同级别的保护,从而对重要数据包进行更多保护。
  FlexFEC为灵活性向前纠错,使用的是交织编码,交织编码复杂性高,但保护性更好,而且能有效解决(RFC 2733、RFC 5109和SMPTE 2022-1)中遇到的伸缩性问题。

三、业务相关的FEC(上行弱网时推流使用FEC)

应用流程保密省略…

  总之效果比较明显:
在这里插入图片描述

四、结语

  弱网优化是一个长期的、系统性的问题,单一的信道保护措施并不能达到最好的效果,就类似于自研弱网优化中使用的NACK+FEC的方案。我们通过多种信道保护措施相结合,达到了整体传输质量的提升。但系统中任何一个部分都尤为重要,因为任何一块短板都会对性能造成极大的影响,因此每一个细节、每一个技术我们都应该做到了如指掌。对FEC的分析使我们了解了基本的前向纠错原理,该类业务的拓展离不开基础的构筑。像FEC这样的技术之砖我们会一块一块堆砌,直到成为一面坚固的墙来阻挡任何弱网环境的侵蚀。

参考文献与网络博客:
•[1]Priority encoding transmission. Proceedings of the 35th Annual Symposium on Foundations of Computer Science
•[2]Modeling and Optimization of PET-Redundancy Assignment for MPEG Sequences
•[3]Hybrid error control mechanism for video transmission in the wireless IP networks
•[4]An MPEG performance model and its application to adaptive forward error correction
•[5]A model for MPEG with forward error correction and TCP-friendly bandwidth.
•[6]Adaptive FEC-Based Error Control for Internet Telephony
•[7]QoS-sensitive transport of real-time MPEG video using adaptive forward error correction

https://blog.csdn.net/u0/article/details/?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-8.nonecase
https://tools.ietf.org/html/rfc5109
https://tools.ietf.org/html/rfc2733
https://ieeexplore.ieee.org/document/
https://tools.ietf.org/html/draft-ietf-payload-flexible-fec-scheme-03​

若有收获,就点个赞吧

今天的文章 流媒体弱网优化之路(FEC)——FEC原理简介分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-26 17:27
下一篇 2024-12-26 17:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/96638.html