视点!我用ChatGPT做WebRTC音视频性能优化,主打一个高效
摘要
随着GPT-4的发布,AI的风越吹越旺。GPT-4可以回答问题,可以写作,甚至可以基于一张草图生成html代码搭建一个网站。即构社区的一位开发者@倪同学就基于目前在研究的WebRTC QOS技术点对GPT-3.5跟GPT-4进行一场实验,ChatGPT会取代程序员还是成为最强辅助?
(资料图)
以下为@倪同学的博文。
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 NACKNACK(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.2FECFEC(Forward Error Correction),前向纠错, 在数据传输和存储中普遍用于数据纠错。WebRTC中也使用了该技术进行丢包恢复。
webrtc实现该冗余功能,有三种方式:
1.2.1、RED将前面的报文直接打入到新包里面,在接收端解析主包和冗余包。
图 3
如图,后面的报文直接包含前面报文,所以当其中某个报文丢失了,可以通过其相邻报文直接恢复。这种方式缺点是抗连续丢包效果差,但是实现简单。
Opus In-band FEC 正是使用这种方式进行纠错: 将重要信息以较低的比特率再次编码之后添加到后续数据包中,opsu 解码器根据收包情况决定是否利用当前包携带的冗余包进行丢包恢复。
Opus In-band FEC 详细参考:https://datatracker.ietf.org/doc/html/rfc6716#section-2.1.7
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
3SVC、多视轨3.1SVCSVC (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 PacerWebRTC 的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最佳实践内容。
标签:
-
2022-02-07 14:57:45
奇迹!绝杀!女足亚洲杯逆转夺冠!<
刚刚,中国女足上演逆转绝杀奇迹!她们在亚洲杯决赛中3:2力克韩国队,时隔16年再夺亚洲杯冠军!
-
2022-02-07 14:57:45
中国政府与阿根廷共和国政府签署共建“一带一路”谅解备忘录<
新华社北京2月6日电(记者安蓓)国家发展改革委6日称,国家发展改革委主任何立峰与阿根廷外交、国际贸易和宗教事
-
2022-02-07 14:57:43
中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明(全文)<
新华社北京2月6日电中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明一、应中方邀请,阿根廷
-
2022-02-07 14:57:40
春节假期国内旅游出游2.51亿人次<
春节遇冬奥,旅游年味浓。根据文化和旅游部数据中心测算,2022年春节假期7天,全国国内旅游出游2 51亿人次,同比
-
2022-02-07 14:57:40
中吉签署关于经典著作互译出版的备忘录 开启两国人文交流互鉴新阶段<
新华社北京2月6日电(记者史竞男)国家主席习近平6日会见来华出席北京2022年冬奥会开幕式的吉尔吉斯斯坦总统扎帕
-
2023-03-24 17:42:37
视点!我用ChatGPT做WebRTC音视频性能优化,主打一个高效
随着GPT-4的发布,AI的风越吹越旺。GPT-4可以回答问题,可以写作,甚至可以基于一张草图生成html代码搭建一个网站。即构社区的一位开发者@倪同
-
2023-03-24 15:58:25
天天热文:献身祈祷 - 修女插画特辑 2023.03.15
过着虔诚生活的「修女」,为了信仰奉献了自己一生,并给人留下了圣洁的印象。就连看似朴素的修女服,都会在宗教的熏陶下,散发出神圣不可侵犯
-
2023-03-24 15:11:19
消息!微信视频号如何快速涨粉?技巧是什么?
现在对于一个运营视频号的人员来说,在运营过程中最难的就是快速涨粉,要知道粉丝就是变现的快速渠道,只有粉丝多了,才能实现快速变现。那
-
2023-03-24 13:24:04
世界时讯:最后一波!乐山市体育消费券今日开抢
最后一波!乐山市体育消费券今日开抢
-
2023-03-24 12:13:39
天天最资讯丨港股早盘宽幅震荡 科网股多数上涨
【港股早盘宽幅震荡科网股多数上涨】港股早盘宽幅震荡,恒生科技指数一度直线拉涨2%,截至午盘,恒指跌0 21%,恒生科技指数涨1 29%。科网股多
-
2023-03-24 10:52:34
每日速看!每日快播:美国延迟回补战略石油储备计划 国际油价回落
(资料图片仅供参考)周四,由于市场信心拖累了大盘,油价停止了近期的涨势。同时美国政府暗示,补充战略石油储备所需的时间将比此前预期的要长
-
2023-03-24 10:16:46
每日关注!天然气灶打不着火原因和处理方法一
1、燃气灶没有气,这是比较常见的问题。解决方法:燃气灶没有气,就要加气(或者更换煤气罐)。2、电池有没有电,发现点不着火时,便要检查电
-
2023-03-24 10:02:15
全球新动态:魔法养成攻略开局_魔法养成攻略
1、打开手机上的【橙光阅读器】软件。2、进入软件,搜索打开【狗粮专员】。3、进入游戏界面,刚开始玩,可以点击【文字频道】
-
2023-03-24 08:56:32
世界微头条丨3个月,60万变成30万:锂价“跳楼”,什么理?
背后博弈的是主导权之变
-
2023-03-24 06:11:30
焦点资讯:穿越直播小说排行榜(穿越直播小说)
1、推荐3本第一本:《荒野幸运神》作者:罗秦书评:主角重生,飞机失事,和两个美女明星流落同一个荒岛,绑定了一个系统,要求必须进行荒野直
-
2023-03-24 01:57:25
环球最新:曹文轩的草房子的主人公是谁_曹文轩草房子人物介绍
1、《草房子》中的好句好段:白雀还是那个样子,只是好像清瘦了一些。2、她一出现在桑桑的视野里,桑桑就觉得天地间忽然地亮
-
2023-03-23 22:26:20
环球要闻:清风头条丨临武县:激活基层监督神经末梢 让监督更有广度精度温度
-
2023-03-23 21:10:48
快看点丨气球怎么布置好看
气球怎么布置好看?如果你不知道的话就来看看我的分享吧!以下是详细步骤,希望对你有所帮助!首先我们把气球打成巴掌大小的样子。接着把两个
-
2023-03-23 20:57:04
焦点快看:男子花400万买光金条店员果断报警事件简单介绍
1、近日,北京市朝阳区两家金店来了一位“神秘豪客”,花四百万买光两家金店的所有金条。2、这让店员感到不对劲,赶紧将情况反
-
2023-03-23 19:06:50
【全球快播报】深圳异地就医怎么用医保报销
省内异地住院:深圳医保参保人在市内定点联网医疗机构住院或省内异地定点联网医疗机构住院,可直接刷卡结算。省外住院:深圳医保参保人办理了
-
2023-03-23 17:43:31
观察:回环句是修辞手法吗(回环句是什么)
1、顶真是用上文结尾的词语作下文的开头,使语句递接紧凑而生动畅达的一种修辞方法。2、就好像我们经常玩儿的一种游戏“成语接龙“一样,下一...
-
2023-03-23 16:18:00
当前快报:Apollo实现cron语句的热配置
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且
-
2023-03-23 14:52:26
天天头条:032期池子大乐透预测奖号:前区重号分析
大乐透第2023031期奖号为:05、07、08、16、25+03、11。其中前区冷热比为3:2,没有出现重号,三区比为3:1:1,包含连码组合,后区为0路+2
-
2023-03-23 14:21:51
世界焦点!统计局:1-2月全国分省市粗钢产量出炉,河北增27.8%
统计局:1-2月全国分省市粗钢产量出炉,河北增27 8%,粗钢,钢产量,统计局,河北省,mysteel
-
2023-03-23 14:02:15
当前热议!女生洗头发正确的方法步骤
1、洗头前先将头发梳理顺洗头之前应当先将打结的头发全部梳理顺,这样更有利于在洗头的过程中将头皮和头发上的脏东西清洗干净,同时,梳头也是
-
2023-03-23 12:25:38
今日讯!ChatGPT冲击就业,谁是赢家谁是输家?
在这场ChatGPT换人的浪潮中,谁会是赢家?谁又会被淘汰?
-
2023-03-23 10:59:15
天天速讯:房地产市场有望逐步企稳超60家房企发布预亏公告 远洋集团抓住市场修复机遇加速推盘
房地产市场有望逐步企稳超60家房企发布预亏公告远洋集团抓住市场修复机遇加速推盘,推盘,土储,远洋集团,一线城市,预亏公告,房地产市场,中国能源
-
2023-03-23 09:45:15
世界新动态:铦之冢崇介绍_铦之冢崇
1、没有呐,到后面其实主要还是讲春绯和环的事,故事整体走向与漫画前面一样。2、还是一群人在一起遇到各种事然后解决,最后春
-
2023-03-23 07:57:19
全球速读:次要剪接体:不次要的生命“剪辑师”
如果把微观生命活动比作一部电影,那么这部精密而复杂的影片就是由无数蛋白质各司其职上演的,它们影响着生命体的健康。而指挥这些蛋白质、让
-
2023-03-23 06:23:05
【世界播资讯】床上用品批发市场哪里便宜
床上用品一直是非常火爆的行业,马上就要到过年了,一些新手商家想要进一些床上用品来卖,很多人会选择批发市场,那么床上用品批发市场哪里便
-
2023-03-23 05:10:53
全球讯息:工业自动化板块3月22日涨1.65%,工业富联领涨,主力资金净流出4128.1万元
3月22日工业自动化板块较上一交易日上涨1 65%,工业富联领涨。当日上证指数报收于3265 75,上涨0 31%。深证成指报收于11496 93,上涨0 61%。工
-
2023-03-23 00:41:41
全球资讯:幼儿园适合种什么植物 适合幼儿园种植的植物有哪些
1、适合幼儿园种植的植物有:常春藤、玉兰、榆叶梅、碧桃、多肉、豆瓣绿、迎春花、丁香、紫藤萝、白蜡。2、常春藤。常春藤叶形美丽,四季常青
-
2023-03-22 21:03:19
环球短讯!如何快速实现一个定时器
定时器(Timer)是一种在业务开发中常用的组件,主要用在执行延时通知任务上。本文以笔者在微信工作中的实践作为基础,介绍如何使用平时部门最
-
2023-03-22 18:58:47
天天观速讯丨酥皮月饼的做法视频(酥皮月饼的做法)
1、将火腿切片,浸泡一下。我觉得切片后更容易泡。泡的时间比较少。两个小时足够了。2、将水加入浸泡过的火腿中,煮熟 我没有
-
2023-03-22 18:35:33
天天要闻:唐人街在哪
现在世界各地有许多唐人街,其中在美国旧金山唐人街最著名。北京唐人街:北京市朝阳区民族园路。伦敦唐人街:坐落于英国伦敦威斯敏斯特市的苏