我用ChatGPT做WebRTC音视频性能优化,主打一个高效

ChatGPT取代程序员还是给程序员加Buff?

这两周,AI新闻一个接着一个,3月23日,Google开放了内测已久的AI对话服务Bard,Google强调,这是一款定位为用户提供创意之源的产品,可生成写作草稿或生活中的聊天机器人。早在一周前3月15日凌晨,OpenAi距发布GPT-3.5后四个月发布了升级版模型GPT-4,据发布会说,GPT-4可支持图片输入,角色扮演,写作能力更强了。紧接着3月16日百度发布了文心一言,一共有五大功能:文学创作、商业文案创作、数理逻辑推算、中文理解、多模态生成。

随着近日各大厂商AI产品的接连发布,AI取代人工这个话题持续在发酵。AI大幅解放人的生产力或是将冲击一大批职业?

博主近期在输出WebRTC相关的技术博客,不如向AI提问看他有什么见解。

和大部分人一样,博主都还没拿到Bard跟文心一言的内测资格。得知NewBing用的是GPT-4的模型,下面就着WebRTC通过哪些QOS技术提升音视频通话质量,向GPT-3.5和Newbing(GPT-4)分别提问,看看他们的答案有何差异。

如下图,技术科普类问题都难不倒GPT-3.5和GPT-4,我就该问题继续深挖让它们举实例说明:

NewBing(GPT-4)

GPT-3.5给出的结果

NewBing(GPT-4)直接给出了具体操作实例

GPT-3.5给出的结果(有些空泛)

GPT-4和GPT-3.5对比结论

通过实验,我们比较了同一问题两个版本的回答。在普通的文本处理当中,GPT-4和GPT-3.5的区别可能比较小,但是当问题足够具体和复杂时,GPT-4就会比GPT-3.5更精准、更有创意,而且能够处理用户更细微的指令。

当然,本篇内容不是要讨论GPT-3.5跟GPT-4的具体差别,而是程序员如何利用ChatGPT提升工作效率,加上最强Buff。以下我将以个人开发经验为音视频开发者分享《WebRTC的QOS如何提升音视频质量》。

WebRTC技术概述

WebRTC 通过一系列的QOS 技术来提升音视频通话质量: 抗丢包策略(NACK、 FEC), 拥塞控制策略(TWCC/REMB), SVC或多视轨, 视频质量自适应策略, Pacer、JitterBuffer等.

总体QOS架构如下图所示:

图 1

1 丢包恢复策略

1.1 NACK

NACK(Negative Acknowledgment)相较于ACK是通过"非到达确认"进行选择性重传的机制。基本原理是发送端对数据进行缓存,接收端通过到达包连续性检测丢包,结合rtt 和乱序情况在合适的时机向发送端发起重传请求。

图 2

如图所示,Receiver在收到报文4之后发现报文2、3未到达,暂时将报文2、3放入丢失nack列表。在超过一定乱序阈值(通过乱序直方图计算得到,假设这里是2,那么收到包4可认为包2丢失),或者超过一定抖动时间(根据rtt计算),向Sender请求重传丢失的报文2、3。 Receiver的请求通过RTP FB 发送给Sender, 具体NACK 请求格式参考RFC4585。Sender 在收到NACK请求后重新发送报文2、3。

值得注意的是,NACK 策略丢包恢复效果取决于重传请求时机。一是rtt的计算(webrtc 默认rtt是100ms),一是乱序阈值计算。重传请求节奏控制不好容易造成重传风暴,加重拥塞导致拉流出现卡顿。

参考:https://www.rfc-editor.org/rfc/rfc4585.html#page-34

1.2 FEC

FEC(Forward Error Correction),前向纠错, 在数据传输和存储中普遍用于数据纠错。WebRTC中也使用了该技术进行丢包恢复。

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

1.2.1、RED

将前面的报文直接打入到新包里面,在接收端解析主包和冗余包。

图 3

如图,后面的报文直接包含前面报文,所以当其中某个报文丢失了,可以通过其相邻报文直接恢复。这种方式缺点是抗连续丢包效果差,但是实现简单。

Opus In-band FEC 正是使用这种方式进行纠错: 将重要信息以较低的比特率再次编码之后添加到后续数据包中,opsu 解码器根据收包情况决定是否利用当前包携带的冗余包进行丢包恢复。

Opus In-band FEC 详细参考:RFC 6716 - Definition of the Opus Audio Codec

RED 详细介绍参考:https://www.rfc-editor.org/rfc/rfc2198.html

1.2.2、ULPFEC

在多个数据包之间使用 XOR 来生成此冗余信息,并能够在需要时在接收方恢复丢失的数据包。 ULPFEC 能够通过选择受保护的字节数并应用 XOR 的先前数据包的数量,为不同的数据包提供不同级别的保护。

图 4

如图,FEC packet 1 保护L0级报文A、B。 FEC packet 2 及保护L0级的A、B, 也保护L1级报文C、D。

参考:https://www.rfc-editor.org/rfc/rfc5109.html

1.2.3、FLEXFEC

较ULPFEC,FLEXFEC可以灵活选择1D行异或、列异或以及2D行列异或,增加网络抗丢包能力。

1-D 行异或纠错

图 5

1-D 列异或纠错

图 6

2-D 行列异或纠错

图 7

FLEXFEC 虽然相比前面两个有更强的恢复能力,行列交错丢包比如图7中(1、2、5、6)丢失就会出现无法纠错的情况。

WebRTC 用到FEC策略整体丢包恢复能力都偏弱,业界普遍应用Reed-Solomon FEC 进行丢包恢复,Reed-Solomon FEC(K + N : K个数据包 N个FEC包)可以真正恢复分组内任意 <=N 个丢包。

FLEXFEC 详细实现可以参考:https://www.rfc-editor.org/rfc/rfc8627.html

2 带宽评估及码率控制

2.1 REMB-GCC

图 8

图8是REMB-GCC 架构图,基本思想是通过接收端评估带宽, 然后通过RTCP REMB 将带宽反馈给发送端。 发送端结合丢包率计算一个带宽结果As,和RMEB的结果Ar, 取min(As, Ar)作为最终带宽结果。

2.2 SendSide BWE

图 9

REMB-GCC 相比,TFB-GCC 主要区别在于大部分带宽计算都转移到发端计算,滤波器的实现不再用Kalman 滤波 而是变成TrendLine 滤波器

发送端发送的包需在扩展头带: Transport-wide sequence number.

接收端定期发送Transport-wide feedback报文,通知发送端和接收端接收报文的相关信息,包括报文到达时间、报文到达时间、报文格式等信息。发送端收到Transport-wide feedback 报文之后,根据报文携带的信息进行延迟滤波计算(Trandline).

Transport-wide feedback 报文格式参考:https://datatracker.ietf.org/doc/html/draft-holmer-rmcat-transport-wide-cc-extensions-01

2.3 速率控制

图 10

图 11

根据过载检测器产生的信号 s,驱动如图10所示的有限状态机来调整码率。

GCC 算法原理详细参考:https://c3lab.poliba.it/images/6/65/Gcc-analysis.pdf

3 SVC 、多视轨

3.1 SVC

SVC (Scalable Video Coding,可适性视频编码或可分级视频编码) 是传统 H.264/MPEG-4 AVC 编码的延伸,可提升更大的编码弹性,并具有时间可适性 (Temporal Scalability)、空间可适性 (Spatial Scalability) 及质量可适性 (SNR/Quality/Fidelity Scalability) 三大特性。

WebRTC 中h264 不支持svc 编码,Vp8 仅支持Temporal Scalability, VP9 和AV1 支持时间可适性 (Temporal Scalability)、空间可适性 (Spatial Scalability)。

图12

上面是时间可适应示意图。假设图例中显示的图层以30 fps的帧速率显示。如果我们移除所有L2层的图片,剩下层(L0和L1)仍然可以成功解码,并且产生一个15fps的视频。如果我们进一步删除所有的L1图像,那么剩下的L0层依然可以被解码并产生一个7.5fps的视频, 所以即便是出现丢包,相比不可分级编码可明显提升弱网视频流畅度。

图 13

如图12,L0基层为分辨率最小编码数据,级别越高,分辨率越高。当实际应用中需要较低分辨率时,只需丢弃高Level层级数据进行解码。

针对不同的带宽条件用户和以及不同设备性能的用户可以灵活调整分辨。

SVC 扩展参考: http://ip.hhi.de/imagecom_G1/assets/pdfs/Overview_SVC_IEEE07.pdf

SVC 与 H264 结合参考: https://www.itu.int/rec/T-REC-H.264-201704-I

3.2 多视轨

目前主流浏览器都支持unified-plan sdp, 我们可以在sdp协商的时候添加多个视轨,业务上比较常见的就是添加两条视轨(类似于SVC的Spatial Scalability),复用相同DTLS 传输通道。

图 14

图12 典型利用WebRTC 支持多视轨特性编码一大一小两条流的出帧示意图。

支持多视轨(大小流) 可以让接收端在下行带宽受限的情况下动态切换到可以支持的分辨率,提升弱网体验。

多视轨(大小流)在对网络丢包及带宽受限情况的适应不如SVC 灵活,但是多视轨实现简单,编码、解码性能消耗较低,在实际的业务场景中得到广泛应用。

多视轨需要支持Unified Plan SDP 协商, 参考WebRTC 相关说明:https://webrtc.github.io/webrtc-org/web-apis/chrome/unified-plan/

4 视频质量调整策略

在网络传输质量变差(上行带宽不足)、CPU占有率过高,编码器编码质量QP值过大等情况下,WebRTC会通过降质量来保障视频通话。降质量策略主要分降帧率(即清晰优先模式)和降分辨率(即流畅优先模式),通过MediaStreamTrack Content Hints 来设置。

清晰优先模式 WebRTC 在编码的时候更注重视频细节,在出现上述情况需要降质量时,会通过降低帧率、保持分辨率不变来保障拉流用户的主观感受。对于推流端做屏幕分享内容是PPT或者拉流用户大屏显示的业务场景尤为重要。

流畅优先模式 推流端在需要降质量的时候优先降低分辨率、保持一定的帧率来保障拉流用户的流畅体验。

在带宽或CPU资源等不再受限时,WebRTC会根据降质量偏好设置逆向提升视频质量。

使用者应该根据自己的业务场景进行适当设置,才能在极端情况下保证主观体验不至于太差。

5 Pacer

WebRTC 的Pacer 模块主要是让需要发送的包根据评估的网络带宽尽量均匀的分布在每个发送时间窗口发出,起到平滑发包、避免网络拥塞的作用。

假设有一条 5Mbps 和 30fps 的视频流。 在理想情况下,每个帧大小约为 21kB,打包成 18 个 RTP 数据包。 按照一秒时间窗口统计的平均比特率是 5Mbps,但在更短的时间范围内,它可以被视为每 33 毫秒突发 167Mbps。 此外,视频编码器在突然移动的情况下会超过目标帧率,尤其是在处理屏幕共享时,帧比目标尺寸大 10 倍甚至 100 倍很常见。 这些数据包如果编码完成马上发出去会导致几个问题: 网络拥塞、缓冲区膨胀、甚至数据包丢失。 大多数会话都有不止一条媒体流,可能同时包含音频流、视频流、数据流。 如果你一次性将一个帧放在一条传输通道发送,这些数据包需要 100 毫秒才能发出,这可能阻止了任何音频数据包及时发送出去。 Pacer通过有一个缓冲区来解决这个问题。 媒体包在其中排队,然后使用漏桶算法将它们调整到网络上。 缓冲区包含所有媒体轨道的独立 fifo 流,例如 音频可以优先于视频 - 可以以循环方式发送相同优先级的流,以避免任何一个流阻塞其他流。

图 15

6 JitterBuffer

图 16

WebRTC 接收端收到RTP包后,放到PacketBuffer 进行缓存和排序。如上图,在收到Mark(帧结束)标志之后,从后往前开始组帧。组完一帧会放到该帧所在GOP的缓存里面,根据帧间参考顺序进行调整,当帧间参考关系建立好之后就会放到解码器进行解码。可以认为Jitter 主要先后做包排序、帧排序、GOP排序。之所以要进行着一系工作是因为网络本身存在一定的抖动、甚至有丢包,如果有丢包还得等丢包恢复才能完整组帧,所以导致帧到达时间跟发送时间存在一定抖动。Jitter buffer 的存在就很好的解决这个问题,能够在拉流端对待解码数据进行平滑处理,保证我们渲染出来视频是平滑、流畅的。

7 关键帧请求

视频流通常是以1个关键帧+ N个增量帧的方式发送,这些增量帧依赖于先前的帧进行解码和显示。如果因为一些原因导致sps/pps 丢失、 组包错误等,如果不采取任何补救措施,就很难继续解码视频流,视频就会卡主, 直到下个关键帧。很多时候为了编码稳定GOP设置很大,这个时候意味着长时间卡顿或者黑屏。

图 17

如图接收端因为丢包不能恢复导致Frame 9 组帧失败,后面即使能组帧成功也无法解码,此时需要从发送端请求一个I帧解码刷新当前视频流。

WebRTC通过RTCP报文向发送端请求发送关键帧,关键帧请求RTCP报文格式比较简单,在RFC4585(RTP/AVPF)以及RFC5104(AVPF)规定了两种不同的关键帧请求报文格式:Picture Loss Indication (PLI)、Full Intra Request (FIR)。从目前的实现看WebRTC 在收到PLI或者FIR之后,都是让编码器编码输出关键帧,然后发送给接收端。

PLI 报文格式参考: https://www.rfc-editor.org/rfc/rfc4585.html#page-36

FIR参考: https://www.rfc-editor.org/rfc/rfc5104.html

QOS技术总结:

本文简单介绍了WebRTC中所使用到的Qos技术,这些技术从不同的角度去提升Qos质量。包括通过NACK、FEC技术对丢包进行恢复,解决丢包导致的音、视频卡顿。通过带宽评估和拥塞控制技术调整编码和发送码率来自动适应网络带宽的变化情况。通过SVC、多视轨技术保障不同网络质量的拉流的用户差异的视频质量。 而Pacer、JitterBuffer分别在发送端和接收端提升音视频的平滑、流畅度。关键帧请求对极端网络抖动之后的快速视频恢复起了重要作用。WebRTC 利用这些技术协同作用,提升整体的Qos 质量,需要了解技术细节最好的方式还是去阅读WebRTC源码。

WebRTC 的Qos技术对提升整体音视频质量效果显著、但WebRTC的这些技术还是存在有很多可以优化的地方。音视频厂商ZEGO即构自研的WebRTC网关对这些策略都做了一定的优化:包括自研带宽评估算法、NACK算法、大小流等。

所以,如果你的业务需要一款稳定可靠的音视频服务,可以试试即构实时音视频RTC服务。

点击跳转ZEGO即构实时音视频服务了解更多WebRTC最佳实践内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30441.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能Python-python_beam_search

Python中的Beam Search算法 Beam Search是一种搜索算法&#xff0c;可用于解决许多问题&#xff0c;包括自然语言处理中的语言模型生成和翻译。在这篇文章中&#xff0c;我们将介绍Python中Beam Search算法的实现&#xff0c;重点讨论算法的优劣和在NLP中的应用。 什么是Beam…

VSCode插件整理

一、安装插件 前端统一开发工具&#xff1a;VSCode插件整理。 首先&#xff0c;如果你不知道怎么安装编辑器插件&#xff0c;那么请记住这个图标&#xff1a; 二、插件推荐 特别推荐&#xff1a;SummerCopilot&#xff08;最近更新&#xff09; https://marketplace.visual…

科研论文小技巧分享

关于湖大蔺博士分享的一些科研小技巧~ 欢迎补充指正~ 科研论文 一、入门看文献二、创造idea三、撰写论文3.1 论文结构题目(Title)摘要&#xff08;Abstract&#xff09;关键词(Keywords)引言 (Introduction)综述发展史理论、方法、结果描述参考文献 (References) 3.2 写作总结之…

Angular框架学习踩坑记录

文章目录 1. 项目build后部署到tomcat显示空白页2. vscode远程连接linux进行angular开发实时调试 1. 项目build后部署到tomcat显示空白页 按照Angular文档完成了入门demo&#xff0c;部署时遇到问题&#xff1a;将build好的dist文件夹放在tomcat的/webapps文件夹下并修改文件夹…

QT开发光纤解调仪软件中各种问题总结

最近因为被派了开发光纤解调仪软件开发的活&#xff0c;花了大概两个月的时间从零开始学QT写软件&#xff0c;总体完成的差不多之后在这里把遇到的困难总结一下。 一、动态链接库的调用 我手上的资料有公司之前很老的用MFC写的软件的源码&#xff0c;根据那个软件的源码来进行…

chatgpt赋能python:Python循环卡住-如何规避这个问题

Python循环卡住- 如何规避这个问题 Python是一种简单&#xff0c;易学且功能强大的编程语言&#xff0c;它被广泛应用于各种应用程序开发领域&#xff0c;从数据科学到Web开发。 然而&#xff0c;在循环中有时会遇到Python卡死的情况。 在这篇文章中&#xff0c;我们将详细介绍…

联网GPT-3.5上线!网友实测给差评

【导读】ChatGPT默默升级了&#xff0c;联网插件Default (GPT-3.5) with browsing上线&#xff0c;网友纷纷上手实测。 OpenAI的ChatGPT在默默进化...... 一觉醒来&#xff0c;网友爆料称ChatGPT里的联网插件变了。 ChatGPT中的Browsing ALPHA模型不再显示。更改为&#xff1…

ChatGPT: 如何利用OpenAI的GPT-3.5构建智能对话助手

ChatGPT: 如何利用OpenAI的GPT-3.5构建智能对话助手 GPT-3.5&#xff1a;OpenAI的语言模型在自然语言处理领域的重要地位和应用潜力 GPT-3.5是OpenAI开发的一种强大的语言模型&#xff0c;具有广泛的应用潜力和在自然语言处理领域的重要地位。作为OpenAI最新一代的语言模型&…

ChatGPT: 从GPT-3.5到GPT-4,探索语言模型的演进之路

ChatGPT: 从GPT-3.5到GPT-4&#xff0c;探索语言模型的演进之路 引言 人工智能语言模型的演进 随着人工智能的快速发展&#xff0c;语言模型作为自然语言处理领域的一项重要技术也在不断演进。从最初的基于规则的系统&#xff0c;到基于统计的模型&#xff0c;再到近年来的深度…

PCM音频文件的制作

一、PCM编码简介 PCM是英文Pulse-code modulation的缩写&#xff0c;中文译名是脉冲编码调制。它是70年代末发展起来的&#xff0c;记录媒体之一的CD&#xff0c;在80年代初由飞利浦和索尼公司共同推出。脉码调制的音频格式也被DVD-A所采用&#xff0c;它支持立体声和5…

案例分享:基于预训练大模型的AI自动标注

从自动化时代到智能化时代&#xff0c;人工智能潜在的价值规模迅速扩张。如何将潜在的应用价值落到现实场景是摆在一众AI企业面前亟待破解的难题。 数据资源场景单一且有限、算力资源存在上限且成本高企、高端人才稀缺等问题无一不在阻碍AI产业的规模化商业落地。 而伴随着以…

AI文本生成软件选哪个?看看这些软件推荐吧

最近几个月的时间内AI智能技术逐渐向大众开放&#xff0c;许多人都在使用AI智能进行一些创作 但是许多小伙伴依然不知道该如何使用AI来智能生成文本。那么大家想知道有哪些AI文本生成软件吗&#xff1f;看看下面几款大家常用的AI文本生成软件的介绍吧。 1.“AI写作宝” 软件介…

LLMs的自动化工具系统(HuggingGPT、AutoGPT、WebGPT、WebCPM)

在前面两篇博文中已经粗略介绍了增强语言模型和Tool Learning&#xff0c;本篇文章看四篇代表性的自动化框架&#xff0c;HuggingGPT、AutoGPT、WebGPT、WebCPM。 Augmented Language Models&#xff08;增强语言模型&#xff09;Toolformer and Tool Learning&#xff08;LLM…

代码恐怖故事:隐藏在复杂代码库中的恐怖秘密

本文讲述了开发者们在复杂代码库中工作的经历和教训&#xff0c;包括代码复杂性带来的问题、架构决策、第三方库引发的意外问题以及令人恐慌的编程错误&#xff0c;以及如何处理这些挑战。 原文链接&#xff1a;https://digma.ai/blog/coding-horrors-tales-of-codebase-comple…

【ChatGPT助我开发】利用ChatGPT编写基于Matlab的SVM的蔬菜分类项目

序言 从去年12月份开始用ChatGPT&#xff0c;一直被惊艳到&#xff0c;然后问一些奇怪的问题&#xff0c;到现在助力开发&#xff0c;我发现合适的提示词&#xff08;Prompt&#xff09;会很大程度影响到生成的质量&#xff0c;我在开发的过程中也会逐渐完善修改&#xff0c;最…

matlab绘图常用函数及代码

1、绘图&#xff1a;plot /semilogy /loglog /scatter figure(1); subplot(1,2,1);%子图 axis([0 10 10^-5 10^-1]);%限制作图范围&#xff0c;x轴0~10&#xff0c;y轴10^-5到10^-1 plot(X,Y,Color,[R G B],LineStyle,-,Marker,o,LineWidth,1); hold on; grid on;%显示网格 &…

HR怀疑程序员简历造假,随后的做法引起网友热议:过分了

简历可以说是求职过程中最重要的一份材料&#xff0c;因此不少人对简历都精心准备&#xff0c;以便全面地展示自己。对企业来说&#xff0c;简历最重要的一点便是真实。可以说所有公司对简历造假都是保持零容忍的态度。最近&#xff0c;一位HR网友在职场社区分享了他怀疑程序员…

程序员简历优化之道

作者&#xff1a;安晓辉 声明&#xff1a;原创文章&#xff0c;禁止各种形式的转载。 为什么你投十份简历&#xff0c;只有一两家公司约你&#xff1f;又或者为什么你每投一份简历都能获得面试机会&#xff1f; 最根本的原因&#xff0c;就是一方在汲汲渴求&#xff0c;而恰恰…

别再胡乱写简历了,一份适合普通大众的简历模版,送给大家

今天我们就来聊一聊在校招时&#xff0c;简历该如何写的问题。说实话&#xff0c;对于简历的书写方式&#xff0c;可能不同的人会有不同的见解&#xff0c;并且不同的面试官/HR在筛选的时候也会有所差异&#xff0c;所以在我看来&#xff0c;不存在一种绝对稳的简历模版。 我在…

聊求职:写简历的大原则与小技巧

简历&#xff0c;是求职者向未来雇主展示专业技能和职业素养的自我推销工具&#xff0c;是赢得面试机会的敲门砖。如果没有面试邀约&#xff0c;大多只有两种可能&#xff1a;要么是简历写的太屎了&#xff0c;要么是简历投的太屎了。所以&#xff0c;当没有面试机会的时候&…