Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WebRTC系列分享 | WebRTC视频QoS全局技术栈

WebRTC系列分享 | WebRTC视频QoS全局技术栈

作者头像
腾讯云音视频
发布于 2022-03-15 08:40:30
发布于 2022-03-15 08:40:30
2.8K0
举报
文章被收录于专栏:音视频咖音视频咖

导语 | WebRTC真是一套让人既爱又恨的开源代码。一方面,WebRTC里面有一套很完善很系统的QoS策略。但另一方面,WebRTC代码庞大且版本更新迭代特别快,代码的阅读和学习难度很大。为了方便大家学习了解,我们在这里对WebRTC的QoS思想及算法实现做了一些梳理总结,以系列分享的方式呈现给大家,供大家参考。

概述

目前总结出WebRTC用于提升QoS的方法有:NACK、FEC、SVC、JitterBuffer、IDR Request、Pacer、Sender Side BWE、Probe、VFR(动态帧率调整策略)、AVSync(音视频同步)、动态分辨率调整。这几种方法在WebRTC架构分布如下:

具体实现原理

1. NACK

与NACK对应的是ACK,ACK是到达通知技术。以TCP为例,他可靠因为接收方在收到数据后会给发送方返回一个“已收到数据”的消息(ACK),告诉发送方“我已经收到了”,确保消息的可靠。

NACK也是一种通知技术,只是触发通知的条件刚好的ACK相反,在未收到消息时,通知发送方“我未收到消息”,即通知未达。

NACK是在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端发送缓冲区的支持,RFC5104定义NACK数据包的格式。若在JB缓冲时间内接收端收到发送端重传的报文,就可以解决丢包问题。对应上图发送端的RTCP RTPFB。

2. FEC

FEC是发送端在发送报文的时候,将之前的旧包也打包到新包里面,若接收端有丢包,就用新包里面冗余的旧包恢复数据。

webrtc实现该冗余功能,有三种方式:

RED就是RFC2198冗余。将前面的报文直接打入到新包里面,在接收端解析主包和冗余包。目前WebRTC的ULPFEC仅借用RFC2198冗余报文的封装格式,冗余报文的载荷用的是ULPFEC编码出来的载荷。

ULPFEC,目前webrtc仅将VPX编码器SVC时域的Level 0视频帧打包成FEC。其余层有丢包,就逐步将帧率,保证视频相对流畅。

  • 发送端打包示意图:
  • 网络丢包示意图:
  • 丢包恢复示意图:

FLEXFEC较ULPFEC,增加纵向OXR运算。增加网络抗丢包能力。

  • 1D行异或:
  • 1D列异或:
  • 2D行列异或:

3. SVC

SVC(可适性视频编码或可分级视频编码)是传统H.264/MPEG-4 AVC编码的延伸,可提升更大的编码弹性,并具有时间可适性(Temporal Scalability)、空间可适性(Spatial Scalability)及质量可适性(SNR/Quality/Fidelity scalability)三大特性,使视频传输更能适应在异质的网络带宽。

实际上Spatial Scalability和quality scalability这种方案会增加传输码率,降低编解码器性能、提高编解码器的复杂度、在一些场景下还需要服务器支持SVC层级过滤。使得SVC的Spatial Scalability和quality scalability到目前为止还没有大规模应用。但是Temporal Scalability可以在不稳定网络视频传输上被使用。

WebRTC的vpx编码器使用了Temporal Scalability时间可适性编码,仅需通过FEC+NACK方式保护T0层的数据完整性,其余层的视频帧有丢失,可通过逐级降帧率方案(丢弃Tn-T1之间的数据),保证视频通话整体的流畅性。并且Temporal Scalability可以做到后向兼容,不需要解码器做特殊处理。

4. JitterBuffer

JitterBuffer实现原理是,在收到网络上的RTP报文后,不直接进行解码,需要缓存一定个数的RTP报文,按照时间戳或者seq的顺序进行重排,消除报文的乱序和抖动问题。JitterBuffer分动态JitterBuffer和静态JitterBuffer两种模式。静态JitterBuffer缓存报文个数固定。动态JitterBuffer是根据网络环路延时的情况,动态调整缓存报文个数。

5. IDR Request

关键帧也叫做即时刷新帧,简称IDR帧。对视频来说,IDR帧的解码无需参考之前的帧,因此在丢包严重时可以通过发送关键帧请求进行画面的恢复。关键帧的请求方式分为三种:RTCP FIR反馈(Full intra frame request)、RTCP PLI 反馈(Picture Loss Indictor)或SIP Info消息,具体使用哪种可通过协商确定。

6. Pacer

PACER,是网络报文平滑策略。一个视频帧有可能分别封装在几个RTP报文,若这个视频帧的RTP报文一起发送到网络上,必然会导致网络瞬间拥塞。以25fps为例,若这帧视频的RTP报文,能够在40ms之内发送给接收端,接收端既可以正常工作,也缓冲了网络拥塞的压力。PACER就是实现把RTP同一时刻生产的若干包,周期性的发送,防止上行流量激增导致拥塞。

7. Sender Side BWE或REMB(Receiver Estimated Maximum Bitrate)

这个算法的思路是根据接收端的丢包率或延时情况维护一个状态机。以根据丢包率为例,在判断为overuse时,就根据一定的系数减少当前发送端的码率值,当判断为underuse时又根据增加系数来增加发送端的码率值;然后将这个值通过rtcp包发送给发送端,发送端根据该值来动态的调整码率。

8. Probe

WebRTC在决定以多大码率发送报文时,会遇到如下难处:

  • 发送端通过GCC算法,根据网络状态动态调节发送的码率。但是系统启动阶段初始码率应该设置成多大比较合适?
  • GCC估计带宽,这个算法的特点是:快降慢升,网络质量差时能迅速响应衰减带宽;但是网络持续向好时,不能迅速增加对应带宽。

所以需要一种快速探测算法,探测当前网络合适的带宽,保证音视频按照最佳码率值发送数据。

9. 动态帧率调整策略

视频发送端根据Sender Side BWE或REMB等参数调整出一组比较合适的码率值,当网络条件好的时候,码率值会比较大,当网络条件比较差的时候,码率值会比较低。但是若是发送端仅调整码率,不调整帧率,当网络条件比较好的时候,仅仅提升了视频质量,没有充分利用网络条件,提升实时性。当网络条件比较差的时候,码率降的比较低,若不降低帧率,视频质量会大幅度下降。所以需要增加一种机制,根据发送端的码率值,动态调整发送端的帧率值。

10. AVSync音视频同步

由于音视频处理的系统路径不同,并且音视频媒体流是分开以RTP over UDP报文形式传输,UDP报文对网络丢包延时敏感,若不进行特殊平滑处理,会导致实际播放时音视频的渲染相对延时与采集延时有偏差,这样就容易产生音视频不同步现象。音视频同步的基本思想是,以RTCP报文的NTP时间为参考,在接收端渲染前,对音视频分别进行不同长度的适当缓冲,尽量保证音视频渲染different time = 音视频采集different time。保证音视频同步。

11. 动态分辨率调整策略

动态分辨率调整策略设计思想是,在网络传输质量变差、CPU占有率过高,编码器编码质量QP值过大等情况下,动态降低视频传输分辨率,缓解当前异常。反之则动态增加分辨率,提供高质量的视频传输。目前webrtc这块还处于调测阶段。

12. HARQ

WebRTC还会根据当前网络状态的质量,动态调整QOS策略,在低延时低丢包网络下,仅使用NACK的QOS手段,在高延时高丢包场景下,动态选择NACK、FEC、SVC三种QOS策略。

关于云架构平台部

云架构平台部是腾讯规模最大的技术部门之一,长期深耕音视频、存储、接入和计算服务等技术领域,通过海量的存储和数据库平台,世界级的CDN&音视频服务,先进的操作系统和视频编解码技术,助力腾讯云以技术的力量持续赋能客户,帮他们提升效率,降低成本。

腾讯云音视频在音视频领域已有超过21年的技术积累,持续支持国内90%的音视频客户实现云上创新,独家具备 RT-ONE™ 全球网络,在此基础上,构建了业界最完整的 PaaS 产品家族,并通过腾讯云视立方 RT-Cube™ 提供All in One 的终端SDK,助力客户一键获取众多腾讯云音视频能力。腾讯云音视频为全真互联时代,提供坚实的数字化助力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云音视频 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WebRTC系列分享 第五期 | WebRTC QoS方法之Sender Side BWE实现
导语 | 本文为大家详细解读一下WebRTC中Sender Side BWE的实现。文章中引用的WebRTC代码基于master,commit:f412945f05ce1ac372a7dad77d85498d23deaae源码分析。 背景介绍 BWE(Bandwidth Estimation)可能是WebRTC视频引擎中最关键的模块了。BWE模块决定视频通讯中可以发送多大码率视频不会使网络拥塞,防止视频通讯质量下降。 早期的带宽评估算法比较简单,大多是基于丢包来估计,基本的策略是逐步增加发送的数据量,直到
腾讯云音视频
2022/05/12
1.7K0
WebRTC系列分享 第五期 | WebRTC QoS方法之Sender Side BWE实现
webRTC-NACK、Pacer和拥塞控制和FEC
2)NACK重新发送媒体数据有两种方式:单独RTX通道发送、与媒体数据混在一起发送
_咯噔_
2022/04/28
1.8K0
WebRTC系列分享 第三期 | WebRTC QoS方法之视频发送端NACK实现
导语 | 本文为大家详细解读一下WebRTC中视频发送端NACK的实现。文章中引用的WebRTC代码基于master,commit:f412945f05ce1ac372a7dad77d85498d23deaae源码分析。
腾讯云音视频
2022/04/11
1.1K0
WebRTC系列分享 第三期 | WebRTC QoS方法之视频发送端NACK实现
WebRTC的拥塞控制和带宽策略
在视频通信的技术领域WebRTC已成为主流的技术标准,WebRTC包涵了诸多优秀的技术,譬如:音频数字信号处理技术(AEC, NS, AGC)、编解码技术、实时传输技术、P2P技术等,这些技术目的都是为了实现更好实时音视频方案。但是在高分辨率视频通信过程中,通信时延、图像质量下降和丢包卡顿是经常发生的事,甚至在WiFi环境下,一次视频重发的网络风暴可以引起WiFi网络间歇性中断,通信延迟和图像质量之间存在的排斥关系是实时视频过程中的主要矛盾。
LiveVideoStack
2021/09/01
1.5K0
WebRTC系列分享 第二期 | WebRTC QoS方法之Pacer实现
导语 | 本文将解读WebRTC中Pacer算法的实现。WebRTC有两套Pacer算法:TaskQueuePacedSender、PacedSender。本文仅介绍PacedSender的实现。(文章中引用的WebRTC代码基于master,commit:3f412945f05ce1ac372a7dad77d85498d23deaae源码分析) 背景介绍 若仅仅发送音频数据,不需要Pacer模块。 一帧音频数据本身不大,不会超过以太网的最大报文长度。一个RTP报文可以搞定,按照打包时长的节奏发送就可以。
腾讯云音视频
2022/03/21
1.7K0
腾讯云音视频传输协议技术分析
导语 | 随着音视频应用的不断更新,对传输能力和体验的需求也日益增加,促进了传输技术的发展,也带了如何选择的难题。本文详解了音视频领域的几种主要传输协议,希望能够帮助大家解决实际需求和业务场景中的技术选型问题。 随着互联网的发展,Web及移动智能手机端的兴起,音视频应用也得到了蓬勃发展。同时伴随着4G/5G的商业化,人们在娱乐直播、购物、教育、医疗等领域,对于实时音视频通信的需求不断增长。直播、实时音视频等技术也开始崭露头角。 众多的音视频应用都避免不了一个问题就是,如何在现有的网络条件下,提
腾讯云音视频
2021/08/09
2.6K0
视频技术快览 0x2 - 视频传输和网络对抗
RTP(Real-time Transport Protocol)协议,全称是实时传输协议。它主要用于音视频数据的传输。
Cellinlab
2023/05/17
1.2K0
视频技术快览 0x2 - 视频传输和网络对抗
实时远程医学影像服务质量保障与网络优化
华大影像团队成立的意义:通过集成机器人技术、实时远程控制技术及超声影像技术,解决偏远地区、基层医疗机构缺少超声医生、以及现有医生超负荷工作的现状;打破传统超声诊疗方式的局限,克服时空的障碍,改善医疗资源分布不均衡的现状;使全民平等的享受优质的医疗服务。
LiveVideoStack
2020/02/20
1.3K0
实时远程医学影像服务质量保障与网络优化
网络QoS的平衡之道——音视频弱网对抗策略介绍
随着AI和5G的到来,音视频应用将变得越来越广泛,人们对音视频的品质需求也越来越高,视频分辨率已经从高清发展为超高清、VR,视频帧率也已出现60fps、120fps等应用,交互式的应用对端到端延时也提出了更高的要求。与此同时,设备的硬件性能也突飞猛进。可以预见,随着5G的到来网络中传输的数据将会呈现爆发式增长,大量数据将会给网络传输带来巨大的挑战。因此,如何保证用户高品质的音视频体验?传输将会是一个重要环节。
huofo
2022/03/18
1.1K0
网络QoS的平衡之道——音视频弱网对抗策略介绍
网易工业级WebRTC应用实践深度解析
网易在音视频领域有10多年丰富经验的积累,在公司内部我们把自己的这一套工业级的功能完整的音视频技术方案称为NRTC,NRTC的意思就是NetEase RTC。近几年,WebRTC非常火热,尤其是2017年,苹果宣布在Safari 11里面支持WebRTC,所以说Web本身也变成了一个非常重要的入口,是音视频很重要的一个终端,对于我们来说,要在我们的NRTC里面实现对WebRTC的支持,也就是要能够支持Web这样一个终端和入口。
LiveVideoStack
2021/09/01
9680
技术解码丨Webtrc中RTCP使用及相关指标计算
在RFC3550中,除了定义了⽤来进⾏实时数据传输的 RTP 协议外,还定义了 RTCP 协议,⽤来反馈会话传输质量、⽤户源识别、控制 RTCP 传输间隔。在 Webrtc 中,通过 RTCP 我们可以实现发送数据/接收数据的反馈,传输控制如丢包重传、关键帧请求,⽹络指标 RTT、丢包率、抖动的计算及反馈,拥塞控制相关的带宽 反馈,以及⽤户体验相关的⾳视频同步等等。为了让开发者获取以上数据指标,Webrtc 提供了统⼀的接⼝调用,如在GoogleChrome中,可以通过 RTCPeerConnection
腾讯即时通信IM
2021/04/19
2.5K0
WebRTC系列分享 第四期 | WebRTC QoS方法之视频接收端NACK实现
导语 | 上一篇文章我们详解了WebRTC中视频接收端NACK的实现,本文将为大家进一步详细解读WebRTC中视频接收端NACK的实现。文章中引用的WebRTC代码基于master,commit:f412945f05ce1ac372a7dad77d85498d23deaae源码分析。 概述 WebRTC接收端触发发送NACK报文有两处: 接收RTP报文,对序列号进行检测,发现有丢包,立即触发发送NACK报文; 定时检查nack_list_队列,发现丢包满足申请重传条件,立即触发发送NACK报文。 函数
腾讯云音视频
2022/05/09
9260
WebRTC系列分享 第四期 | WebRTC QoS方法之视频接收端NACK实现
展望2018音视频技术:AV1,AI,区块链,WebRTC
实时音视频技术是源于早期的VoIP通信,随着后来互联网的发展进程,这项技术2003年被Skype引入到PC桌面系统,开启了整个实时音视频技术新纪元。经过15年的进化,基于PC上的实时音视频技术日渐成熟,也涌现了像WebRTC这样的开源项目。但随着近几年移动互联网和4G的兴起,实时音视频领域有了更广泛的应用,引来了新的技术难题和挑战。经过2016年直播大战后,音视频应用得到了用户的认可,直接促成了2017年实时音视频应用的大爆发,在娱乐方面出现了像狼人杀、陌生人视频社交、在线抓娃娃等风口;在协作应用领域出现了Slack和Zoom等多人远程协作应用;在行业应用上也有很大的突破,例如像VIPKID、学霸君1V1等强劲的在线教育产品。在苹果8月份宣布新一代iOS浏览器Safari支持WebRTC后,实时音视频技术成为了时下热门技术体系。
LiveVideoStack
2021/09/02
7910
展望2018音视频技术:AV1,AI,区块链,WebRTC
技术解码 | WebRTC音视频延时、同步分析以及超低延时优化
导语 | 在实时音视频中,我们关注的最主要的指标是低延时、高质量和高流畅,那么这篇文章就从延时和流畅方面来介绍一下WebRTC框架中的低延时、流畅以及对于它们的优化。 - 延时 - 由于音频和视频包大小的不同,在WebRTC中,音频和视频的jitterbuffer也就有各自的实现。其中音频延时为playout_delay_ms和jitter_delay(NetEq接收缓存延时)。视频延时则包含jitter_delay(jitterbuffer接收缓存延时),decode_delay和rend
腾讯云音视频
2021/10/12
5.2K1
视频直播技术干货(十三):B站实时视频直播技术实践和音视频知识入门
直播行业从传统的娱乐直播发展到教育直播、电商直播等形式,产生了很多新的玩法。传统的直播是一位主播展示才艺,观众通过弹幕、送礼物等方式进行互动。随着网络质量不断地提高,用户也对直播平台产生的新的要求,实时互动直播的场景就出现了,观众可以同时观看多位主播之间互动的画面,让直播间的气氛更好。B站直播的连麦PK、视频连线业务就提供了这个能力。主播看到的是对方主播实时的流(延迟400ms以内),而观众看到的是“准实时”的流(延迟2~5s左右)。
JackJiang
2025/03/06
2080
视频直播技术干货(十三):B站实时视频直播技术实践和音视频知识入门
音视频FEC前向纠错的原理和实现
TCP协议的重传机制对实时音视频传输而言,如果网络质量很差,丢包率很高,重传机制导致传输延迟急剧增加,传输质量严重下滑。实时音视频传输协议一般采用UDP(应用层基于UDP的RTP协议,为视频传输提供序号和音视频同步服务),UDP具有高吞吐和低延时的特点。然而,基于UDP的RTP传输在复杂的公网环境下,特别是3G、4G、WIFI网络时面临丢包、乱序、重复、抖动等问题,严重影响实时音视频的传输效果。应用层的 FEC (Forward Error Correction,前向纠错)是一项有效防止丢包的技术,是一种实时视频传输的有效可靠的解决方案。
用户6280468
2023/09/21
2.2K0
音视频FEC前向纠错的原理和实现
网易云信流媒体服务端架构设计与实现
大家好,我叫鲁林俊,很高兴参加LiveVideoStackCon 2020线上峰会,本次我分享的主题是网易云信流媒体服务端架构设计与实现。
LiveVideoStack
2020/07/13
1.9K0
网易云信流媒体服务端架构设计与实现
直播弱网优化方法
直播平台纷繁杂多,流量入口逐渐从传统PC端过渡至移动端。直播规 模爆发式增长,2016年更是被誉为“直播元年”。以游戏为代表的泛娱乐直播是这一时期直播生态的重要组成部分。2015-2017年,4G技术普及,手机直播由于不受设备、场景等限制开始迅速普及,推动全民直播的出现;同时,由于直播功能的创新、直播平台以及资本的纷纷入局、政策支持,直播行业一度出现“千播大战”局面。期间,政府出台《电子竞技赛事管理暂行规定》等游戏行业相关政策,进一步推动了游戏直播的发展。
视频云直播helper
2022/02/03
6K1
基于WebRTC的互动直播实践
大家好,我是叶峰峰,来自映客直播,从事实时音视频的开发工作大概有七八年时间了,在加入映客后,也参与了映客实时互动直播的开发过程。本次分享主要介绍映客互动直播开发过程中遇到的一些问题,以及对直播场景下互动直播的一些优化。
LiveVideoStack
2021/09/01
2.7K0
音视频面试题集锦 2022.10
我们在知识星球上创建的音视频技术社群关键帧的音视频开发圈已经运营了一段时间了,在这里群友们会一起做一些打卡任务。比如:周期性地整理音视频相关的面试题,汇集一份音视频面试题集锦,你可以看看这个合集:音视频面试题集锦。再比如:循序渐进地归纳总结音视频技术知识,绘制一幅音视频知识图谱,你可以看看这个合集:音视频知识图谱。
关键帧
2022/11/29
1.5K0
推荐阅读
相关推荐
WebRTC系列分享 第五期 | WebRTC QoS方法之Sender Side BWE实现
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档