H5 直播 SDK 怎么选:ZEGO、阿里云、腾讯云在浏览器里的真实差异

H5 直播选型,先回答两个问题:主播是不是也在浏览器里开播,你能接受”低延迟”变成一个单独计费的增值项吗。这两个答案基本决定了选谁,剩下的才是延迟和价格。

本文中的版本、浏览器兼容性和接口均为 2026-10-30 快照,取自各家官方文档、npm 元数据;所有延迟数字都是厂商宣称,口径不同,不能直接横比。

1. H5 直播的三条硬约束,来自浏览器而不是厂商

原生 App 的对比文可以直接比参数表。浏览器不行,因为你能用的东西是被平台限死的。

第一,能解码的只有三条路。 原生 <video>(HLS/MP4)、MSE(HTTP-FLV、fMP4)、WebRTC。iOS 上 MSE 不可用,微信的 WKWebView 也没有——这意味着 iOS 微信里 FLV 方案直接出局,flv.js 也不行。这一条会淘汰掉一半”方案对比”里的推荐。

第二,WebRTC 强制 HTTPS。 getUserMedia 只在安全上下文里可用,RTS 拉流域名同样要求 HTTPS,否则起播失败或静默黑屏。本地调试可以用 localhost / 127.0.0.1,线上没有例外。

第三,自动播放受策略限制。 浏览器要求 muted 或用户手势。首帧黑屏、有画面没声音,八成不是 SDK 的问题,是没处理自动播放回调。

所以任何”我们支持 H5 直播”的说法,都要追问三个限定:哪个浏览器、哪个协议、什么编码。下面三节都按这个口径写。

2. 对比三家的产品结构

这是本文和多数横评最大的分歧点。三家在 H5 端不是同一类产品在比参数,而是三种结构。

2.1 ZEGO:RTC 原生,低延迟是默认值

ZEGO 的 Web SDK(npm 包 zego-express-engine-webrtc)本身就是 WebRTC 推拉流 SDK。createStream 采集、startPublishingStream 推流、startPlayingStream 拉流,一套接口同时覆盖”主播开播”和”观众观看”。

超低延迟(官方叫 L3)不需要换产品:拉流时把 resourceMode 设为 2 就走 L3,厂商宣称端到端 600–1000ms,需要联系技术支持开通。走 CDN 拉流则把 resourceMode 设为 1。

代价在 CDN 播放这一侧。ZEGO 的 CDN 播放靠一个独立的播放器插件 ZegoExpressPlayer,只能 <script> 引入,没有 npm 包,且只支持 HTTP-FLV,不支持 HLS。想在 Safari 上播 CDN 流,只能退回原生 <video> + m3u8。另外 CDN 转推地址只支持 rtmp,Web 端也拿不到转推状态回调。

一句话:ZEGO 的强项在推,弱项在 CDN 播。

2.2 阿里云:CDN 原生,低延迟是增值服务 RTS

阿里云视频直播的默认形态是 CDN:推流交给 OBS、移动端 SDK 或服务端,观众用 Aliplayer(npm aliyun-aliplayer,已内置 RTS 插件)播 HLS / FLV 地址。

要低延迟,得单独开通 RTS(超低延时直播):推流和拉流是两个 SDK 包(aliyun-rts-sdk),推流包和拉流包的版本号甚至不对应,发版节奏也不同,地址协议头是 artc://。浏览器推流只有这一条路——阿里云没有”标准直播的网页推流”。

RTS 的编码限制要提前看清楚:视频 H.264、音频 Opus,不支持 B 帧、不支持 AAC。源流不满足就开 H5 自动转码(去 B 帧、AAC 转 Opus),转码另计费。延迟分两档:亚秒档厂商宣称 400–800ms,半秒档 200–400ms,半秒档需要 WHIP 推流 + 阿里云播放器,浏览器兼容范围更窄。

一句话:阿里云的强项在播,推流是 RTS 的附赠能力。

2.3 腾讯云:CDN 原生 + 快直播,一个播放器吃三种地址

腾讯云云直播同样是 CDN 原生,但播放器 TCPlayer 做得更”全能”:同一个实例可以喂 flv://、m3u8、webrtc:// 三种地址,快直播(LEB)就是其中的 WebRTC 通道,厂商宣称 300–1000ms(官方 FAQ 口径 <800ms)。

它最实用的一点是降级是内置的:浏览器不支持 WebRTC 时,传进去的 webrtc:// 地址会自动转成 HLS 播放;连接重试超限(状态码 -2004)、播放中解码失败(-2005)也会触发同样的降级。这一段逻辑腾讯替你写了,阿里云和 ZEGO 都要自己实现。

代价有三处:Web 推流基于 WebRTC 封装,音频是 Opus,要喂给标准直播播放就得转 AAC,产生转码费;WebRTC 只支持 H.264,源流含 B 帧会被自动转码去 B 帧(额外延迟 + 费用);单个推流域名默认限制 1000 路并发推流,可工单提额,主播特别多的业务要提前确认。

一句话:腾讯的强项在省事。

2.4 结构对照

维度ZEGO阿里云腾讯云
默认链路RTC / WebRTCCDNCDN
低延迟怎么来产品自带 L3(resourceMode=2)开通 RTS 增值服务开通快直播
低延迟是否独立计费否,按拉流分钟分档是,RTS 独立按流量/带宽是,快直播独立按流量/带宽
浏览器推流支持(WebRTC)仅 RTS(artc://)支持(WebRTC 封装)
CDN 播放组件独立插件,仅 FLV,需 script 引入Aliplayer,HLS/FLV/RTSTCPlayer,FLV/HLS/WebRTC
自动降级无,需自己按 resourceMode 判断无,官方给最佳实践,自己写有,webrtc:// 自动转 HLS
连麦互动同 SDK 内需另开 ARTC需另开 TRTC

3. Web 端能力事实表

项目ZEGO阿里云腾讯云
Web SDKzego-express-engine-webrtc(检索时 3.13.0)aliyun-aliplayer + aliyun-rts-sdktcplayer.js(检索时 5.3.3,v5 起需 License)
CDN 播放组件ZegoExpressPlayer 插件,仅 script 引入,无 npm 包Aliplayer 内置 RTS 插件TCPlayer 单实例多协议
推流协议WebRTC仅 RTS(H.264 + Opus)WebRTC(音频 Opus)
拉流协议WebRTC;CDN 插件仅 FLV;HLS 需原生 videoHLS / FLV / RTSFLV / HLS / WebRTC
超低延迟(厂商宣称)走 RTC<300ms,
L3 600–1000ms
RTS 亚秒档 400–800ms,半秒档 200–400ms快直播 300–1000ms,FAQ 口径 <800ms
标准直播延迟(厂商宣称)3–10sFLV 3–6s,HLS 10s+FLV 3–5s,HLS 更高
桌面浏览器Chrome 56+、Firefox 56+、Safari 11+、Edge 80+Chrome 63+、Firefox 62+、Safari 11+、Edge 79+基础播放 IE10+/主流浏览器;WebRTC 需 Win10 Chrome 86+、Safari 13.1+
iOS 推流14.3+ 支持推拉流,以下仅拉流Safari 11+;实际能否推流取决于 checkPublishSupport 返回WebRTC 需 iOS 13.1.1+
微信内置浏览器Android 可推可拉;Windows 微信仅拉流;企业微信不支持推流微信 7.0.9+支持
编码限制播放器插件 H.265 有兼容风险;Safari 不支持推第三方流不支持 B 帧、不支持 AAC,需 H5 自动转码WebRTC 仅 H.264,B 帧自动去除转码
特有约束CDN 转推仅 rtmp;Web 拿不到转推状态回调RTS 域名必须 HTTPS;通用流量包不抵扣 RTS单推流域名默认 1000 路并发推流

这张表能读出四件事。

推流能力是第一个分水岭。 三家都能在浏览器里推流,但入口完全不同:ZEGO 是主 SDK 的一个接口,阿里云是 RTS 的一部分,腾讯是 WebRTC 封装。如果”网页开播”是核心场景,阿里云的方案天然绑定了 RTS 的延迟档和编码限制——你不开 RTS,就没有浏览器推流。

拉流是第二个分水岭,方向反过来。 阿里云和腾讯的播放器覆盖 FLV/HLS/低延迟三档;ZEGO 的低延迟拉流很强,但 CDN 播放是短板——插件只支持 FLV,HLS 得自己用 <video> 播。只在 PC 上播没问题,一旦要覆盖 Safari 和 iOS 微信,就得写两套播放逻辑。

延迟数字不可横比。 “600–1000ms”和”<800ms”和”300ms–1s”不是同一套量法:有的算端到端,有的算播放器起播后稳定态,有的取的是网络 RTT 加缓冲。同一家厂商不同页面的数值也不一致。要比,只能在同一个测试环境里自己量。

并发限制是硬约束,不是宣传语。 腾讯单推流域名 1000 路,是能查到的明确数字;ZEGO 宣称的是千万级并发观看,那是 CDN 分发侧的能力,不是推流侧。这两者不要混为一谈,看的人多和开播的人多,是两种压力。

四、同一个”网页开播”,三家怎么写

环节ZEGO阿里云腾讯云
初始化new ZegoExpressEngine(appID, server)AliRTS.createClient()new TCPlayer(id, options)(播放侧)
能力检测无需单独检测,失败看错误码checkPublishSupport() 逐项返回编码/设备/WebRTC 支持无需检测,降级内置
开播createStream → startPublishingStreamcreateStream → publish('artc://…')WebRTC 封装推流(官方文档给的是引入片段)
观看(低延迟)startPlayingStream(id, {resourceMode: 2})subscribe('artc://…')sources: [{src: 'webrtc://…'}]
观看(CDN 兜底)resourceMode: 1 + 播放器插件,或原生 video 播 m3u8换 FLV/HLS 地址,Aliplayer 直接播同一实例换 flv:// 或 m3u8 地址

ZEGO 的最小链路:

import { ZegoExpressEngine } from 'zego-express-engine-webrtc';

const zg = new ZegoExpressEngine(appID, server);
await zg.loginRoom(roomID, token, { userID, userName }, { userUpdate: true });

// 主播端
const localStream = await zg.createStream({ camera: { audio: true, video: true } });
await zg.startPublishingStream(streamID, localStream);

// 观众端:resourceMode = 2 走 L3,= 1 走 CDN
await zg.startPlayingStream(streamID, { resourceMode: 2 });

阿里云的最小链路(注意推流地址协议头是 artc://):

const pusher = AliRTS.createClient();
const support = await pusher.checkPublishSupport(); // isH264EncodeSupported / isWebRTCSupported …

const localStream = await pusher.createStream({ audio: true, video: true, screen: false });
localStream.play(document.querySelector('#local'));
await pusher.publish('artc://push.example.com/live/stream1', localStream);

// 观众端
const player = AliRTS.createClient();
const remoteStream = await player.subscribe('artc://play.example.com/live/stream1');
remoteStream.play(document.querySelector('#remote'));

腾讯云播放侧最短:

const player = new TCPlayer('player', {
  sources: [{ src: 'webrtc://play.example.com/live/stream1' }],
  autoplay: true,
  live: true,
});
// 浏览器不支持 WebRTC 时,webrtc:// 会自动转为 HLS 播放,无需额外代码

三段的差异不在代码量,而在你依赖了几个产品:ZEGO 一套 SDK,阿里云要同时理解 RTS 推流包和拉流包,腾讯云要区分 TCPlayer(播放)和 Web 推流封装(开播)。

五、计费口径

三家的计费口径根本不同,直接比单价是错的。

项目ZEGO阿里云腾讯云
主计费项按拉流时长(分钟),推流端不单独计费标准直播与 RTS 分别按流量或峰值带宽标准直播与快直播分别按流量或峰值带宽
分档依据分辨率(音频/SD/HD/HD+…)流量或日峰值带宽流量或日峰值带宽
增值项转码、录制、连麦转码、录制、截图、ARTC 通话转码、录制、时移、连麦
资源包抵扣通用套餐包按分辨率折算,比例以官方套餐包文档为准RTS 资源包与通用流量包互不抵扣直播流量资源包可抵扣快直播流量
上行推流不单独计费默认不收默认不收,特定条件下收费

比价时容易漏掉三项:

第一,转码。 低延迟链路和 CDN 兜底链路并存时,转码是必然项。阿里云 RTS 的 H5 自动转码、腾讯云 WebRTC 转 AAC,都不在流量费里。

第二,录制和截图。 直播业务几乎都会要回放,这项按输出时长另算,和观看量无关。

第三,资源包的抵扣边界。 阿里云的通用流量包不能抵扣 RTS 费用,得单独买 RTS 资源包;腾讯云的流量包可以抵扣快直播流量。同样的”买了 1TB 包”,实际覆盖范围完全不同。

一个可执行的折算方法:把观看时长 × 码率折成流量,和 ZEGO 的分钟计价放在同一量纲上比,再把转码、录制按实际用量加回去。不要拿两家的单价直接对除。

六、一天验证清单

功能和延迟都能在一天内测出来,前提是方法对。

浏览器矩阵(必测六项):Windows Chrome、macOS Safari、Android Chrome、iOS Safari、微信浏览器。企业微信单独加一项,如果业务要覆盖。

延迟测量:用同一个时钟源。直播画面里放一个毫秒级时间码,手机拍屏对比本地时钟,或两端同时打开同一网页时钟。不要用”感觉”,也不要信控制台的统计字段。

弱网:DevTools 的 Network 限速只能模拟带宽和 RTT,模拟不了丢包和抖动。要测卡顿,用系统级弱网工具或代理。

必须记录的六个指标:首帧时间、稳定态延迟、卡顿率、重连次数、降级触发次数、实际产生的转码时长(对账单)。

并发验证:腾讯云要专门测单域名 1000 路推流上限是否够用;另外两家要测的是同一房间内的推流路数上限。

降级验证:手动禁用 WebRTC(或用不支持的环境),看是自动切协议、报错、还是黑屏。这一项最能看出厂商的实现质量。

七、看场景推荐

你的业务形态建议原因
主播在浏览器开播,观众也在网页,要 1 秒内延迟ZEGO推、拉流都是 WebRTC,一套 SDK 打通;L3 是主产品能力,不是外挂
只做观看,观众量大,3 秒延迟可接受阿里云或腾讯云CDN 架构按流量/带宽计费,成本随并发走,不按人头走
观众主要在微信里打开链接,iOS 占比高腾讯云webrtc:// 地址在浏览器不支持时自动降级为 HLS,降级逻辑不用自己写
要连麦、礼物、主播和观众同房间ZEGORTC 原生,连麦不需要再开一个产品
已有阿里云或腾讯云的云资源,账单要合并对应厂商生态一致性、对账成本,通常比几百毫秒的延迟差更值钱
浏览器只负责”看”,推流在 OBS 或 App三家都行,比播放器和流量价这时比的不是 SDK 能力,是播放器兼容性和 CDN 单价

参考资料:
ZEGO《Web JS 超低延迟直播概述》
阿里云《Web RTS SDK 简介》
腾讯云《快直播和标准直播区别》

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/yinshipin/72912.html

赞 (0)

相关推荐

  • 将淘宝直播间融入H5页面的技术探索

    在数字化转型的浪潮中,如何将直播间无缝融入H5页面,成为提升用户体验和业务转化率的关键挑战之一。本文探讨了这一创新实践,通过技术解析和实际案例,展示了如何在H5页面上实现直播间的高…

    2024年11月5日
  • H5直播技术起航

    音视频基本概念 视频格式就是通常所说的.mp4,.flv,.ogv,.webm等。简单来说,它其实就是一个盒子,用来将实际的视频流以一定的顺序放入,确保播放的有序和完整性。 视频压…

    2023年1月11日