🎬 第三章 音视频开发常用工具
📄 一句话概括

串流地址前缀只说明协议,真正决定延迟的是它怎么切片、怎么缓冲——HLS 延迟高不是因为协议慢,是因为它把流切成了几秒一片。

📝 本节和前面几节的关系

3.1.2 讲了 VLC 能做的六件事,这一节挑出【播放网络串流】细讲。

一、什么算网络串流

网络串流指的是内容不在本机、而在网络上,播放器边下边播。 和下载的区别是:下载要等完,串流要边看边来。 这就是【缓冲】存在的理由——先攒一小段,边放边补。

二、看前缀能知道什么

rtmp://——直播推流常用,基于 TCP,延迟 1~3 秒。 rtsp://——监控与点播常用,可走 TCP 或 UDP,延迟 1~2 秒。 http://...m3u8——HLS,跨平台点播首选,延迟 5~30 秒。 http://(HTTP-FLV)——网页直播常用,延迟 2~5 秒。 udp://——UDP 裸流,局域网试验用,延迟最低但不抗丢包。

三、延迟为什么差这么多

决定延迟的不是协议本身的速度,而是它怎么切片、怎么缓冲。 HLS 把所有流派切成了 2~10 秒一片的小文件,播放器至少要攒一到两片才能开始。 所以 HLS 延迟高是设计取舍的结果——它用延迟换来了兼容性与抗丢包能力。 反过来,WebRTC 延迟能做到 100 毫秒以内,代价是复杂度陡增。

四、用 VLC 验证一条流

VLC 打开串流很简单:媒体 → 打开网络串流 → 粘贴地址。 如果放不出来,按这个顺序查:地址对不对 → 网络通不通 → 服务端有没有推流。 这是最省时间的排查顺序——先排最简单的原因。

五、动手 Demo:串流地址里藏着什么信息

一个 URL 的前缀就说明了协议、传输方式和大致用途。

schemes = [
    ("rtmp://", "RTMP",      "TCP",     "1~3 秒",  "直播推流"),
    ("rtsp://", "RTSP",      "TCP/UDP", "1~2 秒",  "监控、点播"),
    ("http://", "HTTP-FLV",  "TCP",     "2~5 秒",  "网页直播"),
    ("http://", "HLS(.m3u8)", "TCP",    "5~30 秒", "跨平台点播"),
    ("udp://",  "UDP 裸流",   "UDP",     "< 1 秒",   "局域网试验"),
]
for s, proto, trans, delay, use in schemes:
    print("%-9s %-11s %-8s %-9s %s" % (s, proto, trans, delay, use))

实跑输出:

--------------------------------------------------------------------
串流地址里藏着什么信息
--------------------------------------------------------------------

一个 URL 的前缀就说明了协议、传输方式和大致用途。

  前缀        协议           传输层      典型延迟     典型用途
  ---------------------------------------------------------------
  rtmp://     RTMP           TCP         1~3 秒       直播推流
  rtsp://     RTSP           TCP/UDP     1~2 秒       监控、点播
  http://     HTTP-FLV       TCP         2~5 秒       网页直播
  http://     HLS(.m3u8)     TCP         5~30 秒      跨平台点播
  udp://      UDP 裸流       UDP         < 1 秒       局域网试验

  看前缀能判断的只有【协议】;**真正决定延迟的是这个协议怎么切、怎么缓冲。**
  HLS 延迟高不是因为协议慢,是因为它**把流切成了几秒一片**。

看前缀只能判断协议;真正决定延迟的是这个协议怎么切、怎么缓冲。 HLS 延迟高不是因为协议慢,是因为它把流切成了几秒一片。

30 秒实验

  1. 找一个公开的测试流地址(搜索【测试 rtmp 地址】),用 VLC 打开它。
  2. 观察它多久开始出画面——这个时间就是它的实际延迟量级。

常见误区

  1. 以为延迟高是网速不够。多半是协议切片的取舍。
  2. 把 HLS 当成【更高级】的协议。它只是更兼容,延迟反而更大。
  3. 放不出来就先怀疑 VLC。按【地址→网络→服务端】的顺序查。
自测三问(点开对答案) 1. 串流和下载的本质区别是什么? —— 下载要等完,串流边看边下。 2. HLS 延迟为什么比 RTMP 高? —— 它把流派切成几秒一片的小文件,播放器要攒够几片才能开始。 3. VLC 放不出串流时按什么顺序排查? —— 地址对不对 → 网络通不通 → 服务端有没有推流。

相关笔记