部署前要查三件事:配置、端口、容量。 三件事都不难,但漏一件就会上线后再返工。
9.1 讲的是它的内部结构,这一节讲怎么把它装起来跑通。 后面的 Nginx、SRS、ZLMediaKit 部署思路完全一样。
一、先查配置
EasyDarwin 的配置是一份 ini,改完重启就生效。 部署前第一件事是把它通读一遍,重点是键名与路径。
三个最容易出错的地方:
① 键名拼错:不会报错,只会用一个默认值悄悄跑起来。
表现是「明明配了却不生效」,最费时间。
② 路径是相对路径:比如 ./record。
它相对于「启动时的工作目录」,不是相对于配置文件。
用 systemd 起服务时工作目录常常不是你以为的那个。
③ 端口写成了字符串以外的东西:有的配置项只认数字。
带了空格或注释,解析就悄悄失败了。
所以规矩是:改完配置,先启动一次, 把启动日志里「实际用的端口与路径」逐条对一遍。 对不上就是没生效,别急着往下走。
二、查端口
流媒体服务的端口就那几个,但冲突概率不低: 554 是 RTSP,1935 是 RTMP,80/8080/10008 是 HTTP 类。
同一台机器上再装一个流媒体服务,立刻就撞。 所以部署前先跑一遍占用检查,比启动之后看日志快得多。
Linux 上两条命令就够:
ss -lntp 看监听中的 TCP 端口,
netstat -lntp 是老写法,要装 net-tools。
两个都行,记住一个。
还有一个坑:小于 1024 的端口在 Linux 上要 root 才能绑。 554 正好在这个范围里。 所以要么用 root 起,要么改成一个大于 1024 的端口。 Windows 上没这个限制,这也是「本地能跑服务器上跑不了」的一个来源。
三、查容量
容量分两块:出口带宽与录像磁盘。两块都要按峰值算。
出口带宽的算法很简单: 码率乘观众数,再换成 Mbps。 2048 kbps 的流,100 个观众就是 200 Mbps。 千兆网看着还剩八成,但那是理想值。 真实环境跑到七成就该考虑分流了。
录像磁盘更好算: 2048 kbps 一小时约 900 MB,一天约 21 GB。 存 30 天就是 650 GB 上下。 这个数是硬盘预算的起点,不是终点—— 因为还要留出「同时回放」的读带宽。
最容易被忽略的是「上行」: 如果这台机器还要往上级平台推流, 那上行带宽也要单独算一份,不能和下行共用同一个估算。
四、最后加一条验证
部署清单里一定要有「怎么验证它真的在跑」这一项。 只写「启动服务」是不够的。
验证要写成可执行的三段:
用什么地址、用什么工具、看到什么算成功。
比如:用 ffplay 打开 rtsp://IP:554/live/test,
三秒内出画面就算通。
这一条的价值在于「可交接」: 换个人来部署,照着这三段能自己判断成败, 不用回来问「这样算好了吗」。 部署文档的好坏,八成看这一条写得够不够具体。
五、动手 Demo:安装部署——配置、端口、容量,三件事先查
真解析一份 ini,真绑一遍端口,再按峰值算一遍容量。 这三件事加起来不到一分钟,能省掉上线后的返工。
import socket
INI = """\
[default]
rtsp_port=554
rtmp_port=1935
http_port=10008
hls_port=10080
record_path=./record
"""
def parse_ini(text):
out, sec = {}, "default"
for line in text.strip().splitlines():
s = line.strip()
if not s or s[0] in ";#":
continue
if s.startswith("[") and s.endswith("]"):
sec = s[1:-1]
continue
if "=" in s:
k, v = s.split("=", 1)
out[(sec, k.strip())] = v.strip()
return out
def port_free(p):
s = socket.socket()
try:
s.bind(("127.0.0.1", p))
return True
except OSError:
return False
finally:
s.close()
cfg = parse_ini(INI)
for name in ("rtsp_port", "rtmp_port", "http_port", "hls_port"):
p = int(cfg[("default", name)])
print("%-10s %5d %s" % (name, p, "能用" if port_free(p) else "被占"))
kbps, users = 2048, 100
print("单路 %.0f KB/s" % (kbps / 8.0))
print("100 人 %.1f MB/s = %.1f Mbps" % (kbps / 8.0 * users / 1024,
kbps * users / 1024.0))
print("录像一天 %.0f GB" % (kbps * 3600 * 24 / 8 / 1024 / 1024))
实跑输出:
--------------------------------------------------------------------
安装部署——配置、端口、容量,三件事先查
--------------------------------------------------------------------
**① 先解析配置文件**
**EasyDarwin 的配置是一份 ini,改完重启就生效。**
**部署前第一件事是把这份文件读一遍,看键名对不对。**
段 键 值
----------------------------------------
default hls_port 10080
default http_port 10008
default log_level info
default max_conn 1024
default record_path ./record
default rtmp_port 1935
default rtsp_port 554
rtmp chunk_size 4096
rtmp enabled true
rtsp enabled true
rtsp timeout 65
**必填项检查:全都在。**
**缺键不会报错,只会用一个默认值悄悄跑起来——**
**这就是「明明配了却不生效」的最常见原因。**
**② 真检测端口占用**
**把配置里那几个端口真绑一遍,看谁被占了。**
服务 端口 能用吗
-----------------------------
rtsp 554 能
rtmp 1935 能
http 10008 能
hls 10080 能
**554 与 1935 都是常用端口,但不等于随时能用:**
**同一台机器上再装一个流媒体服务,它们立刻就冲突。**
**所以部署前先跑一遍这个检查,比启动之后看日志快得多。**
**【📋 实操路径】Linux 上查端口占用**
ss -lntp | grep -E ':554|:1935|:10008'
netstat -lntp | grep 1935
**`ss` 是新系统自带的,`netstat` 要装 net-tools。**
**两个都行,记住一个就够。**
**③ 容量要按峰值算,不能按平均算**
**部署方案里最容易写错的一栏就是带宽。**
**写平均值的方案,上线第一天就会被打回。**
项 算法 2048 kbps 时
--------------------------------------------------
单路出口 码率除以 8 256 KB/s
100 路观众 单路乘 100 25.6 MB/s
换成 Mbps 乘 8 再除 1024 204.8 Mbps
千兆网占用 除 1000 20.5%
**看第三行:100 个观众就要 200 Mbps。**
**千兆网看着还剩八成,但那只是「单向、无突发、无重传」的理想值。**
**真实环境里千兆网跑到七成就该考虑分流了。**
**录像的容量更好算:**
**2048 kbps 一小时就是 900 MB 上下,一天 21 GB。**
**存 30 天就是 650 GB——这个数才是硬盘预算的起点。**
**最后一条经验:**
**部署清单里一定要有「怎么验证它真的在跑」这一项。**
**只写「启动服务」是不够的,要写「用什么地址、什么工具、看到什么算成功」。**
端口全「能用」是因为沙箱里没装这些服务,真机上大概率会撞。 554 在 Linux 上要 root 才能绑,这是真机上最常见的一条坑。 2048 kbps 换算成 256 KB/s,这是所有容量估算的起点。 一天 21 GB、三十天 650 GB,硬盘预算按这个数往上加。
30 秒实验
- 把
rtsp_port改成 80,看沙箱里能不能绑——Windows 上能,Linux 上非 root 不能。 - 把
record_path换成相对路径./record,想想它相对谁——相对启动时的工作目录,不是配置文件所在目录。 - 把观众数改成 1000,看千兆网够不够——2048 Mbps,远超千兆,必须上分流。
常见误区
- 「配置改了就生效」——键名拼错会悄悄用默认值。
- 「554 随便绑」——Linux 上小于 1024 要 root。
- 「容量按平均算就行」——必须按峰值,峰值才是打回方案的原因。
自测三问(点开对答案)
1. 相对路径的 `./record` 是相对哪里? —— **相对启动时的工作目录**,不是配置文件所在目录。 2. 为什么 554 端口在 Linux 上容易出问题? —— **小于 1024 是特权端口**,非 root 绑不上。 3. 2048 kbps 存一天要多少磁盘? —— **约 21 GB**,三十天约 650 GB。- ☐ (本章完,下一章 10.1 Nginx 项目简介)