CMS 的配置是 ini 风格:一节一方括号,一行一个键值。
十来个键里,只有四个真正要命。
serial 和 realm 必须对得上——错了不报错,只是「注册上了但目录同步不下来」。
上一节讲了 CMS 管什么,这一节看它怎么配。 配置文件是「唯一不用打开界面就能改的东西」,所以现场调试最常动它。 这一节的 Demo 会真解析一份配置,不是贴一段文字让你自己看。
一、ini 的三层结构
ini 只有三层:节、键、值。
节用方括号,键值用等号,井号开头是注释。
这种格式的好处是「改一行不影响别人」,
坏处是「没有类型」——所有值都是字符串,要靠程序自己转。
所以配置错了往往不报错,只是行为不对:
端口写成字符串、布尔写成 yes/1/true,都可能被静默忽略。
读配置时有个细节要注意:同一节里键的顺序在解析后可能被打乱,
所以不能靠「第几行」去取,必须按名字取。
二、四个要命的键
serial 是这个平台自己的二十位编号;realm 是 SIP 域;sip_port 是设备要连的端口;
media_port_start 和 end 是收流端口段。
前两个必须对得上:编号前八位是中心编码,realm 通常就取这八位。
取错不会报错,只会「设备注册上了但目录同步不下来」。
这是国标对接最经典的一个坑,因为两边都显示「成功」,你没有任何错误信息可看。
唯一的办法是抓包看 o= 和 From 里的域,和配置对一下。
后三个决定「能不能收到流」:端口被占用、端口段太小、端口没放行,都会表现成「点播黑屏」。
三、改完之后要做什么
改配置必须重启进程,这是 ini 的常态。但重启会让正在看的流全断,所以要挑时间。 重启之后第一件事是「看端口有没有起来」, 不是打开网页——网页能打开只说明 HTTP 端口通了,媒体端口可能还没绑上。 还有一件容易漏的事:配置文件里如果有中文路径,要确认编码是 UTF-8。 Windows 上很多编辑器默认 GBK,存进去就乱码,程序读不到路径。 所以「改完没生效」的第一反应应该是「是不是存成 GBK 了」,不是「程序有 bug」。
四、动手 Demo:把 LiveCMS 的配置逐项拆开
用 configparser 真解析一份示例配置,把每个键值打出来,再算端口段能撑多少路。 字段名为了讲解做过精简,结构和真实的一致。
import configparser
cp = configparser.ConfigParser()
cp.read_string(CMS_INI)
for k, v in cp.items("cms"):
print(k, "=", v)
s = int(cp.get("cms", "media_port_start"))
e = int(cp.get("cms", "media_port_end"))
print("端口数", e - s + 1)
实跑输出:
--------------------------------------------------------------------
把 LiveCMS 的配置逐项拆开
--------------------------------------------------------------------
**配置是 ini 风格:一节一方括号,一行一个键值。**
**这一节拿一份示例配置真解析一遍**,看每项影响什么。
**说明一句:沙箱里装不了 LiveGBS**,**所以这里用「等价的一份配置」来解析**,
**字段名为了讲解做过精简,但结构和真实的一致。**
键 值
---------------------------------------------------
**http_port** `10000`
**http_ssl** `0`
**sip_port** `15060`
**sip_ip** `192.168.1.10`
**serial** `34020000002000000001`
**realm** `3402000000`
**media_port_start** `30000`
**media_port_end** `30500`
解析出 3 个段、13 个键
媒体端口段 30000~30500,共 501 个
**最要紧的四个键**:**`serial` 是这个平台自己的 20 位编号**,**`realm` 是 SIP 域**,
**`sip_port` 是设备要连的端口**,**`media_port_start`/`end` 是收流端口段。**
**`serial` 和 `realm` 必须对得上**:**编号前八位是中心编码,`realm` 通常就取这八位。**
**取错不会报错,只会「设备注册上了但目录同步不下来」**——**这是国标对接最经典的一个坑。**
**端口段要一次划够**:
一段 500 个端口,按每路两个算,理论 250 路
但要留重启余量,实际按一半估,约 125 路
**「不够了再加一段」在国标里很麻烦**:
**因为端口段要写进 SDP 的 `m=` 里,一改所有在跑的会话都得重协商。**
**所以规划时宁可多划,别卡着算。**
解析出来十一个键、三个段,其中只有四个是「改了就出事」的:
编号、域、SIP 端口、媒体端口段。
「编号和域必须对得上」这句话要展开说:
平台编号是 34020000002000000001,前八位是 34020000,域一般就写这个。
写错一位,设备能注册上(因为认证只看密码),但目录同步时域对不上,下级设备就推不上来。
媒体端口段那一行算出来是五百零一个端口,
按每路两个算理论两百五十路,留一半余量就是一百二十五路。
这就是「这台机器能带多少路」的第一个上限。
顺带说一句配置的「隐性依赖」:sip_port 改了,所有设备的配置都要跟着改,
而设备可能分布在几十个现场。
所以端口一旦定下来,后期几乎不可能改。
30 秒实验
- 算一下:30000~30500 一共几个端口?(501 个)
- 想一下:
serial和realm对不上会有什么表现? - 想一下:配置文件存成 GBK 会怎样?(中文路径读不到)
常见误区
- 以为「配置错了会报错」。 ini 没有类型校验,大多数错法是静默的。
- 以为「改了配置立刻生效」。 必须重启进程,重启会断流。
- 以为「编号可以随便编」。 要和
realm对得上,否则目录同步不下来。
自测三问(点开对答案)
1. CMS 配置里哪四个键最要命? —— **`serial`、`realm`、`sip_port`、媒体端口段**。 2. 为什么「编号和域对不上」很难查? —— **两边都显示成功**,没有错误信息,**只能抓包对比 `o=` 和 `From` 里的域**。 3. 改完配置第一件事是看什么? —— **端口有没有起来**,不是打开网页。下一节看 SMS 的配置:为什么它的键比 CMS 多一倍。
- ☐ (本节完,下一节 11.02.03 LiveSMS的配置文件)