📄 一句话概括
流媒体服务器最基本的作用:一次读取,多次分发,按需转码——本地只读一份源,网络却发出几份不同码率。
📝 本节和前面几节的关系
3.1.3 讲怎么收流,这一节反过来:怎么把本机内容推成流给别的设备。
一、VLC 也能当服务器
流媒体服务器听起来是个庞然大物,其实最小的版本只需要【一次读取、多次分发】。 VLC 就能做这件事:从本地或网络读一份源,转成流,推给多个客户端。 它不适合生产环境,但非常适合调试与教学——看得见每一步在做什么。
二、一发多收是怎么做到的
源文件在磁盘上只读一次,网络的出口却可以有多个。 更关键的是:每个客户端可以收不同码率的流——电脑收原画、手机收标清。 Demo 28 里三个接收端总共 28 Mbps,但本地磁盘只被读了一次。 这就是流媒体服务器的核心价值:把【读取】和【分发】解耦。
三、VLC 怎么做
操作路径:媒体 → 串流 → 添加源 → 选择目标(如 RTMP/HTTP)→ 设置转码参数。 关键在于【转码设置】这一步——它决定了推出去的流是什么规格。 不转码就直接推,叫【转发】;转码再推,才叫【转码分发】——两者 CPU 开销差很多。
四、和 FFmpeg 的分工
VLC 适合验证概念:一眼看清【读取-转码-分发】这三个动作。 FFmpeg 适合写进流程:没有界面,全靠参数,但可以被脚本调用、批量执行。 所以常见用法是:用 VLC 摸清怎么做,再用 FFmpeg 把它自动化。
五、动手 Demo:一台电脑怎么同时喂给三个屏幕
VLC 可以当简易流媒体服务器:本地读一次,网络发多份。
source = 20.0 # 源文件码率 Mbps
clients = [("电脑(原画)", 20.0), ("手机(标清)", 2.0), ("平板(高清)", 6.0)]
total = 0.0
for name, rate in clients:
total += rate
print("%-12s %5.1f Mbps 上行合计 %5.1f Mbps" % (name, rate, total))
print("本地磁盘只读一份源:%.1f Mbps" % source)
实跑输出:
--------------------------------------------------------------------
一台电脑怎么同时喂给三个屏幕
--------------------------------------------------------------------
VLC 可以当简易流媒体服务器:本地读一次,网络发多份。
源文件码率:20 Mbps(本地磁盘读一次)
接收端 目标码率 合计上行 说明
----------------------------------------------------------
电脑(原画) 20.0 Mbps 20.0 Mbps 各收各的码率
手机(标清) 2.0 Mbps 22.0 Mbps 各收各的码率
平板(高清) 6.0 Mbps 28.0 Mbps 各收各的码率
本地只读一份源,网络却发了三份不同的码率——
**这就是流媒体服务器最基本的作用:一次读取,多次分发,按需转码。**
本地只读一份源,网络却发了三份不同的码率。 这就是流媒体服务器最基本的作用:一次读取,多次分发,按需转码。
30 秒实验
- 用 VLC 把一段本地视频推成 RTMP 流,再用 VLC 的另一个窗口把这条流放出来。
- 观察:本地播放和串流播放,哪一端的延迟更大?
常见误区
- 把【转发】和【转码分发】混为一谈。前者几乎不耗 CPU,后者很耗。
- 用 VLC 做生产环境的服务器。它的定位是调试与教学。
自测三问(点开对答案)
1. 流媒体服务器的核心价值是什么? —— 把【读取】和【分发】解耦——一次读取,多次分发。 2. 转发和转码分发有什么区别? —— 转发直接推原流,几乎不耗 CPU;转码分发要先转码,开销大得多。 3. VLC 和 FFmpeg 在串流上怎么分工? —— VLC 摸清概念,FFmpeg 写进流程、批量自动化。- ☐ 下一节(3.2.1 MediaInfo)
相关笔记
- VLC播放网络串流 — 反过来:怎么收流
- FFmpeg — 把串流写进流程
- 🖥️ 服务器工作原理 · 索引 — 服务端是怎么扛住并发的
- 🎬 FFmpeg入门详解 · 索引