梦亦同趋

数据如何穿过网络:从带宽、码率到视频流畅播放

如果我把一个 2GB 的视频文件上传到服务器,能不能随时随地流畅播放?

最近在折腾云服务器和 MinIO 的时候,遇到了一个很自然的问题:

如果我把一个 2GB 的视频文件上传到服务器,能不能随时随地流畅播放?

最开始看起来,这是一个存储问题:

  • 文件放在哪里?
  • MinIO 能不能存?
  • 服务端性能够不够?

但继续深入后会发现,真正决定播放体验的,往往不是存储,而是网络。

于是引出了几个关键概念:

  • 带宽(Bandwidth)
  • 码率(Bitrate)
  • 吞吐量(Throughput)
  • 瞬时码率(Instantaneous Bitrate)

这些概念看似相近,但分别描述了不同层面的东西。

#一、带宽:网络这条“水管”有多粗

首先理解带宽。
带宽描述的是:
单位时间内,网络链路最多可以传输多少数据。
例如,一个云服务器标注:

txt
公网带宽:3Mbps

意味着理论上:

txt
3 Megabit / second

注意:

网络中的 Mbps 使用的是 bit(比特),而文件大小通常使用 Byte(字节)。

两者关系:

txt
1 Byte = 8 bit

所以:

txt
3Mbps ÷ 8 ≈ 0.375MB/s

也就是说,一个 3Mbps 的服务器公网出口,理论最大传输速度大约只有:

txt
375KB/s

这时候可以建立一个简单模型:

txt
服务器 | | 网络出口 | 用户

带宽就是中间这条线路的最大运输能力。

类似:

  • 文件 = 货物

  • 网络 = 道路

  • 带宽 = 道路宽度

道路越宽,单位时间能通过的车辆越多。


#二、为什么视频特别依赖带宽?

如果只是访问网页:

txt
请求接口 返回 JSON 加载图片

数据量通常很小。

一次请求可能只有:

txt
几十 KB 几 MB

即使带宽不高,也不会明显影响体验。

但是视频不同。

视频播放本质是:

持续不断地获取数据。

例如:

一个视频码率:

txt
5Mbps

意味着:

播放器平均每秒需要获取:

txt
5 Megabit

的数据。

如果服务器只能提供:

txt
3Mbps

那么:

txt
视频消耗速度 > 网络供应速度

播放器缓存最终会耗尽。

表现就是:

txt
播放 缓存减少 暂停加载 继续播放

#三、码率:视频每秒需要多少数据

那么什么是码率?

简单来说:

码率表示视频单位时间内包含的数据量。

例如:

txt
视频码率:5Mbps

表示:

平均每秒需要:

txt
5Mb 数据

换算:

txt
5 ÷ 8 ≈ 0.625MB/s

也就是:

每秒大约消耗:

txt
625KB

网络需要持续提供这个速度,视频才能实时播放。


#四、视频大小和码率之间的关系

这里有一个容易混淆的地方:

很多人会认为:

视频越大,码率一定越高。

实际上不完全正确。

准确关系是:

txt
平均码率 = 文件大小 × 8 ÷ 视频时长

例如:

一个视频:

txt
大小:2GB 时长:2小时

计算:

txt
2GB × 8 ÷ 7200秒 ≈ 2.2Mbps

所以:

这个视频平均码率约为:

txt
2.2Mbps

如果另一个视频:

txt
大小:2GB 时长:30分钟

那么:

txt
2GB × 8 ÷ 1800秒 ≈ 8.9Mbps

虽然文件大小一样,但播放需求完全不同。

所以:

文件大小决定存储成本,码率决定播放时的网络需求。


#五、那么码率到底由什么决定?

如果已经知道最终文件大小,那么可以计算平均码率。

但是问题来了:

为什么两个视频最终大小不同?

这就涉及视频编码。

影响因素包括:

#1. 分辨率

例如:

txt
720p 1080p 4K

分辨率越高:

需要描述的像素越多。

通常需要更高码率。


#2. 帧率

例如:

txt
24 FPS 60 FPS

60 FPS 意味着:

每秒需要处理更多画面。

因此通常需要更多数据。


#3. 画面复杂程度

两个同样 1080p 的视频:

视频 A:

txt
固定镜头 人物讲话 背景变化少

视频 B:

txt
战争场景 大量运动 快速切换

视频 B 通常需要更高码率。

原因是视频压缩依赖:

预测变化。

如果连续画面变化很小,编码器可以复用大量信息。

例如:

上一帧:

txt
一个人站在那里

下一帧:

txt
这个人移动了一点

编码器只需要记录变化。

但是:

上一帧:

txt
一栋建筑

下一帧:

txt
建筑被爆炸覆盖

变化巨大,需要更多数据。


#4. 编码格式

不同编码格式效率不同。

例如:

txt
H.264 H.265 AV1

更先进的编码格式通常可以在相同画质下使用更低码率。


所以视频最终大小:

不是由时长单独决定。

而是:

txt
原始视频 | 编码器 | 码率设置 | 最终文件大小