帮助中心 帮助中心

什么是HLS协议,和RTMP比哪个好用

搞流媒体的人基本都绕不开这两个协议:HLS和RTMP。它们都是用来传视频的,但思路完全不一样。很多新手搞不清楚该学哪个、该用哪个,我今天尽量用大白话讲清楚。

HLS是苹果推的,基于HTTP

HLS全称HTTP Live Streaming,顾名思义,它是跑在HTTP协议上的。视频被切成一小段一小段的TS文件,用一个M3U8文件做索引,播放器按顺序下载这些TS片段然后播放。

因为它基于HTTP,所以天然就兼容现有的CDN和缓存系统。你不需要部署专门的流媒体服务器,普通的Nginx、Apache就能分发HLS内容。这也是为啥HLS现在这么流行,成本低啊。

缺点也很明显:延迟高。因为视频要先切片,一般一个切片是2到10秒,播放器为了流畅还要缓冲几个切片,所以HLS直播的延迟通常在10秒到30秒之间。你看那种网页直播,主播说句话,观众端要过十几秒才能看到,基本都是HLS的锅。

RTMP是老Adobe的东西

RTMP全称Real-Time Messaging Protocol,是Adobe当年为了配合Flash搞的。它基于TCP,走的是长连接,数据流是连续传输的,不需要切片。

RTMP最大的优势就是延迟低。如果配置得当,延迟可以控制在1到3秒,甚至更低。这也是为什么这么多年过去了,很多直播推流还在用RTMP。主播端推流到服务器,基本都用RTMP协议。

但RTMP的缺点是浏览器支持越来越差。Flash已经死了,现在浏览器原生不支持RTMP播放,必须借助插件或者服务端转码成HLS/WebRTC才能给网页观众看。

协议对比

实际工作中怎么选

如果你做的是网页端直播、点播,面向普通用户,那选HLS准没错。兼容性好,移动端支持完美,部署简单。

如果你做的是监控、视频会议、游戏直播这种对延迟极度敏感的场景,那HLS的延迟肯定满足不了。这时候推流用RTMP,播放端用WebRTC或者低延迟HLS(LL-HLS),是比较常见的组合。

还有一种折中方案:推流端用RTMP保证低延迟上屏,服务端同时转一份HLS出来给网页观众看。这样既能照顾到主播端的体验,又能覆盖普通观众。当然,服务器成本会高一些。

我的个人观点

如果是2024年新开项目,我建议优先考虑HLS和WebRTC,RTMP作为推流协议还能用几年,但播放端真的在慢慢被淘汰。大厂们都在推自己的低延迟方案,像阿里云的RTS、腾讯云的快直播,底层都是WebRTC或者改良版HLS。

技术迭代很快,但HLS因为简单、兼容、成本低,估计还会活很久。学技术的时候把HLS搞透彻,基本够应付大部分场景了。