1. 流媒体基础概念

大家好,我是这门课的主讲。今天咱们聊聊流媒体最基础的东西。

什么是流媒体?说白了,就是「边下边播」。你不需要等整个视频文件下载完,就能直接看。我记得刚入行那会儿,还在用 RealPlayer 看在线视频,那时候网速慢,缓冲转圈是家常便饭。现在技术成熟多了,但核心逻辑没变——数据像水流一样,源源不断地从服务器推到你眼前。

1.1 什么是流媒体

流媒体(Streaming Media)是一种多媒体传输技术。它把音视频数据切成小块,按顺序发送。客户端收到一部分就开始播放,同时继续接收后面的数据。

这里有个关键点:实时性。传统下载是把文件整个拉到本地,你才能打开。流媒体不一样,它追求的是「低延迟启动」和「持续播放」。我做过一个直播项目,用户对延迟特别敏感,超过 3 秒就开始骂娘。嗯,这就是流媒体要解决的核心问题。

流媒体的三个核心特征:

  • 边下边播——无需完整下载
  • 实时传输——数据持续到达
  • 自适应码率——根据网络状况动态调整

你想想看,如果没有流媒体,你看个 2 小时的电影,得先等 10 分钟下载完。这体验谁受得了?流媒体把等待时间压缩到了几秒钟,甚至更低。

1.2 流媒体协议概览

协议是流媒体的「语言」。不同场景用不同协议,选错了,项目就得翻车。我见过不少团队,上来就用 RTMP 做点播,结果兼容性一塌糊涂。

目前主流的协议有三个:RTMP、HLS、DASH。咱们一个一个说。

RTMP(Real-Time Messaging Protocol)

RTMP 是 Adobe 搞出来的,基于 TCP 的实时消息协议。它最大的特点就是延迟低,能到 1-3 秒。早期直播几乎全是它。

但 RTMP 有个硬伤——它依赖 Flash。现在浏览器基本都抛弃 Flash 了,所以 RTMP 主要用于推流端(编码器到服务器),播放端很少直接用。

我的经验:如果你做直播推流,RTMP 仍然是最稳的选择。我曾经用 RTMP 推流到 CDN,跑了半年没出过问题。但播放端一定要转成 HLS 或 WebRTC,别指望浏览器直接播 RTMP。

HLS(HTTP Live Streaming)

HLS 是苹果推出的,基于 HTTP 的流媒体协议。它把视频切成一个个小片段(通常是 2-10 秒),客户端通过 m3u8 索引文件来拉取这些片段。

HLS 最大的优势是兼容性好。所有主流浏览器、移动端都支持。而且它基于 HTTP,能轻松穿透防火墙和代理。

但 HLS 的延迟比较高,通常在 6-30 秒。为什么?因为它要等整个片段下载完才能播。你想想看,一个 6 秒的片段,客户端得先缓冲完才能开始播,延迟自然就上去了。

注意:HLS 的延迟问题在直播场景下特别明显。我做过一个体育直播项目,用户抱怨比分都出来了,画面还没到。后来我们用了低延迟 HLS(LL-HLS),把片段切到 1-2 秒,延迟降到了 3-5 秒,才算勉强能接受。

DASH(Dynamic Adaptive Streaming over HTTP)

DASH 是 MPEG 推出的国际标准,也叫 MPEG-DASH。它和 HLS 思路类似,也是切片段、基于 HTTP。但 DASH 更灵活,支持多种编码格式、多种 DRM 方案。

DASH 的延迟和 HLS 差不多,也在 6-30 秒。但它的自适应码率算法更成熟,能根据网络状况平滑切换清晰度。

我个人习惯用 DASH 做点播,HLS 做直播。为什么?DASH 在点播场景下的码率自适应更细腻,用户体验更好。但直播场景下,HLS 的生态更成熟,CDN 支持也更广泛。

协议 传输层 延迟 适用场景 兼容性
RTMP TCP 1-3 秒 推流、低延迟直播 差(依赖 Flash)
HLS HTTP/TCP 6-30 秒 直播、点播 好(全平台)
DASH HTTP/TCP 6-30 秒 点播、自适应码率 较好(主流浏览器)

1.3 C/S 架构与 P2P 架构对比

架构选型决定了系统的成本和性能。C/S 架构和 P2P 架构是两种截然不同的思路。

C/S 架构(Client-Server)

C/S 架构就是传统的客户端-服务器模式。所有数据都从中心服务器分发。优点是简单、可控、稳定。缺点是服务器带宽成本高,单点故障风险大。

我做过一个在线教育平台,用的是 C/S 架构。一开始用户少,服务器扛得住。后来用户涨到 10 万并发,CDN 带宽费用直接爆表。老板看着账单直摇头。

C/S 架构的典型场景:

  • 小规模直播(< 1 万并发)
  • 对延迟要求高的场景(如互动直播)
  • 需要强管控的内容分发(如版权保护)

P2P 架构(Peer-to-Peer)

P2P 架构让客户端之间互相分享数据。每个客户端既是消费者,也是提供者。优点是带宽成本低,扩展性好。缺点是延迟高,稳定性差,NAT 穿透麻烦。

我曾经在一个视频点播项目里尝试过 P2P。用户越多,速度越快,服务器带宽成本降了 70%。但问题也来了——有些用户网络环境复杂,连不上其他节点,体验很差。后来我们做了混合架构,C/S 兜底,P2P 加速,才算平衡了成本和体验。

避坑指南:P2P 架构不适合直播场景。为什么?因为直播数据是实时的,P2P 的节点发现和数据同步需要时间,延迟会很高。我曾经试过用 WebRTC 做 P2P 直播,延迟到了 10 秒以上,用户全跑了。

维度 C/S 架构 P2P 架构
带宽成本 高(服务器承担全部流量) 低(客户端分担流量)
延迟 低(直接连接服务器) 高(节点间转发)
稳定性 高(中心化管控) 低(依赖节点质量)
扩展性 差(需要扩容服务器) 好(用户越多越强)
实现复杂度 低 高(NAT 穿透、节点管理)

1.4 知识体系总览

下面这张图把本章的核心知识点串起来了。你可以看到流媒体的基本流程:从采集编码,到协议传输,再到客户端播放。架构选型决定了整个系统的形态。

流媒体知识体系总览 音视频采集 编码压缩 流媒体协议 RTMP(推流) | HLS(直播/点播) | DASH(点播) C/S 架构 P2P 架构 客户端播放 核心要点 • 边下边播 • 低延迟启动 • 自适应码率 • 架构决定成本

从这张图你能看到,流媒体系统是一个完整的链路。采集、编码、协议、架构、播放,每个环节都有坑。我见过不少团队,只关注协议选型,忽略了编码和架构,结果系统上线就崩。