阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

WebTransport 开播的应用实践之路

火山引擎

  • 2023-05-24
    北京
  • 本文字数:2287 字

    阅读完需:约 8 分钟

WebTransport 开播的应用实践之路

Web 开播的业务挑战


不管是本地软件推流还是 Web 推流,需要解决的技术问题都是一样的,如何稳定地把高质量的音视频流呈现给更多用户,只不过 Web 开播的话,需要一个限定,就是在现有的 Web 技术范围内。从技术角度来解读一下这里的几个关键词:


  • 稳定性: 传输协议本身的稳定性是需要保障的,优先会选择使用可靠传输,防止网损带来的花屏、杂音等问题,更重要的是,在服务链路不可用的情况下能够迅速切换服务线路。因此在推流场景下需要提供多线路备份的能力。


  • 高质量:在一些场景下,比如医疗医美营销的场景、带货的场景,要对商品细节做展示,这就要求技术方案在带宽允许的前提下,尽可能选用对画面细节损失更少的编码方案


  • 大规模用户:要分发给更多用户,那技术方案设计肯定会引入直播 CDN 服务,但是推流协议是不是能够被直播 CDN 支持,这就是一个考量的点,也是做私有协议无法满足的点。


WebTransport 的技术原理


首先我们简单来了解一下 WebTransport 这个传输协议基本的技术原理。WebTransport 是基于 HTTP3 的应用层传输协议,HTTP3 的底层又基于 quic 协议,quic 协议是基于 UDP 协议实现的一套传输协议,支持可靠与非可靠传输两种形式。



WebTransport 的技术优势


WebTransport 对于 Web 应用的意义并不止于一个更好的传输协议,它更多的还是带来了一个更加丰富的技术栈,能够根据实际场景,结合 WebCodecs、WebAssembly 和 WebNN 等能力实现更好的应用体验。相较于 WebRTC 相对中心化的技术栈,这种方式显然是更加灵活的,易于做出更多灵活的技术组合。



另一个明显的优势在于 WebTransport 可以发挥页面多线程的优势,使用 WebRTC 协议,大量的逻辑只能放在主线程执行,而使用 WebTransport 就可以将整个音视频的处理流程放在 WebWorker 中,降低对主线程的占用,提升页面流畅度。同时使用多线程能够提升应用的扩展性,在面对更多的音视频任务时可以用线程来进行抽象和隔离。


充分利用多线程机制降低主线程负担


利用多线程机制提升应用的可拓展性


从传输协议的特性上来说,它的建联速度更快,首次建联只需要 1 个 RTT,相比之下,TCP 则需要 2~3 个 RTT。针对已经建立过的连接,超时时间内再次建联可以实现 0RTT。在网络拥塞的情况下,减 少 RTT 次数对速度的优化是非常明显的。可以到几十 ms。最后一个特性是连接迁移,在直播过程中如果 WIFI 网络不好。切到手机热点也可以实现 0RTT,相比之下,TCP、RTC 都需要重新建立连接,恢复的速度会慢很多。


首次连接比 TCP 快 1~2RTT


对有缓存的连接支持 0RTT


基于这些优势,火山引擎直播团队选择使用 WebTransport 优化直播推流。设计的方案是基于单向流的稳定传输,从传输格式上对标 RTMP,这样直播 CDN 的支持成本会相对较小,比较好复用目前的 RTMP 收流逻辑。由于这个技术栈较新也需要解决过程中的一些问题:虽然 W3C 定义了 AAC 的编码能力,但是 Chrome 没有提供 AAC 编码的实现,可以将 libFaaC 编译成 wasm 库来实现,另外浏览器没有针对 flv 容器的封装,需要额外支持该部分能力。那么相比于 WebRTC 推流,WebTransport 推流的实际应用效果如何呢?



WebTransport 推流与 WebRTC 推流效果对比


为什么 WebTransport 能够比 WebRTC 推流获得更好的效果:


  • 网络传输(画质与稳定性):

WebRTC 是面向实时通信的传输协议,对网络延时的变化敏感。使用 WebRTC 协议推流时,它受到网络抖动的影响较大,当网络延时的抖动发生时,RTC 的带宽估计模块会认为当前网络处于拥塞状态,需要降低发送码率以避免拥塞,码率的降低对视频画质的影响是非常大的,直观感受就会出现局部的马赛克。当使用 WebTransport 基于 Quic 可靠传输时,其拥塞控制算法对网络抖动的敏感度相对较低,可以通过牺牲一定的延迟保证发送可靠性,因此不容易出现大幅降低发送带宽的行为,画质相对有保障。


  • 编码优化(画质):

WebTransport 在 Web 规范中提供了网络传输的能力,并且可以与现有的 Web 端多媒体能力进行深度集成,例如 WebCodecs、WebGPU 等。给应用的优化提供了更多编码格式、参数选择方面的空间。


  • 易于集成到直播 CDN(大规模分发):

WebTransport 基于已经定稿的 HTTP3 规范,易于被直播 CDN 集成支持,应用复杂度相较于 WebRTC 更低,同时省去了 RTC 推流建连过程中的信令环节,可以加快首帧推送的速度,方便部署到更多的直播 CDN。


首先在网络抖动的场景下,同样加入 100ms 延迟抖动,WebTransport 推流的画面会明显比 RTC 推流要清晰。在网络抢占的场景下,固定一个较低的带宽,使用 GCC 拥塞控制算法的数据流,面对使用 TCP 协议的数据传输,它能够分到的带宽资源是非常小的。


WebTransport 推流+100ms 延迟抖动


WebRTC 推流+100ms 延迟抖动


另外,在固定 3Mbps 上行带宽的网络下,同时使用 WebTransport 和 RTC 推流,设定的目标码率都是 1.5M,过程中 RTC 推流的码率会受到严重的影响,码率大幅下降,不能保证画质。WebTransport 推流在不同网络状态下的流畅度表现,除了大量丢包的情况下,其余的场景都能够达到与 RTC 推流基本持平。


WebTransport 推流


WebRTC 推流


总结与展望


不同的推流协议之间各有优缺点,目前没有一个完美的解决方案,需要根据实际的场景来做选择,比如连麦场景一般需要用 WebRTC 转推,更适合低延迟互动的场景,WebTransport 方案则更适合高画质需求的场景。总的来说,WebTransport 推流的方案在解决“如何稳定地将高质量的音视频传递给大量的用户”的问题上,即实现了可靠的传输,连接稳定性有保障,并且在遭遇网损的场景,可以通过牺牲部分延迟保障音视频质量,给出了一份令人较为满意的答卷。如果想要体验 WebTransport 的开播效果,可进入火山引擎控制台进行在线 demo 体验。



公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2023-05-24 12:369196
用户头像
鲁冬雪 InfoQ 策划主编

发布了 337 篇内容, 共 196.0 次阅读, 收获喜欢 270 次。

关注

评论

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

Xshell 7 安装激活与换机转移许可证教程详解

淋雨

Linux xshell #运维

一文带你了解接口测试价值与体系

霍格沃兹测试开发学社

软件测试 自动化测试 测试开发

隐私计算,让企业大数据走进数据网络时代

Jessica@数牍

由循环开始的前端学习杂谈话事录-sam9029

Sam9029

前端 个人博客 成长笔记 9月月更

MobLink后台基本配置

MobTech袤博科技

android 开发者 iOS SDK

数字藏品系统软件开发

开源直播系统源码

NFT 数字藏品 数字藏品系统软件开发 数字藏品app

五分钟了解 Databend 全新 SQL 类型系统

Databend

开源项目 sql 开源社区 SQL分析

验证一个小小的问题

艾小仙

Java MySQL 编程 程序员 compact

与紧张为友,享受紧张

宇宙之一粟

读书笔记 个人成长 演讲 9月月更 享受紧张

面向对象分析与设计的底层逻辑

阿里巴巴中间件

阿里云 云原生

设计模式的艺术 第七章原型设计模式练习(在某销售管理系统中设计并实现了一个客户类Customer,其中包含一个名为客户地址的成员变量,客户地址的类型为Address。用浅克隆和深克隆分别实现Customer对象的复制)

代廉洁

设计模式的艺术

发挥CODING 敏捷开发能力,腾讯云加速提升国产芯片研发效率

科技热闻

mysql查询 limit 1000,10 和limit 10 速度一样快吗?如果我要分页,我该怎么办?

Java快了!

MySQL

蓝凌OA

科技云未来

leetcode 114. Flatten Binary Tree to Linked List 二叉树展开为链表(简单)

okokabcd

LeetCode 算法与数据结构

【xShell 7】强悍的Linux远程链接工具、终端模拟器

淋雨

Linux 运维 xshell

「工作小记」关于业务组件的思考

叶一一

前端 React 组件开发 9月月更

Java 并发编程解析 | 如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

Java快了!

Java并发 java;

用过这个API接口工具后,确实感觉postman有点鸡肋......

Liam

Java Postman swagger API开发 API调式

阿里云丁宇:以领先的云原生技术,激活应用构建新范式

阿里巴巴中间件

阿里云 云原生 应用构建

隐私计算中的算子是个啥?可视化组合配置的算子解决方案了解下

Jessica@数牍

隐私计算 算子 隐私计算性能

java基础学习:java中的反射

Java快了!

java;

WAIC 2022 | 洞见科技王湾湾出席BPAA第二届应用算法实践典范,共话前沿算法产业发展

洞见科技

WAIC 2022 | 洞见科技在可信AI论坛联合发布《可信人工智能产业生态发展报告》

洞见科技

Dubbo Mesh:从服务框架到统一服务控制平台

阿里巴巴中间件

阿里云 微服务 云原生 dubbo

「工作小记」小程序开发的喜怒哀乐

叶一一

小程序 前端 9月月更

lodash 在vue3+vite中按需加载

木叶🐱

vite Vue3 lodash

Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架

阿里巴巴中间件

阿里云 云原生 Koordinator

ShareSDK iOS端微信如何获取authcode值

MobTech袤博科技

微信 iOS SDK

一文彻底理解 Cookie、Session、Token

霍格沃兹测试开发学社

软件测试 自动化测试 测试开发

无代码开发平台怎么选?选择合适无代码平台的13个关键步骤

优秀

无代码平台

WebTransport 开播的应用实践之路_语言 & 开发_InfoQ精选文章