📹 第十一章 GB/T 28181国标平台案例应用
📄 一句话概括

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 秒实验

  1. 算一下:30000~30500 一共几个端口?(501 个)
  2. 想一下:serial 和 realm 对不上会有什么表现?
  3. 想一下:配置文件存成 GBK 会怎样?(中文路径读不到)

常见误区

  1. 以为「配置错了会报错」。 ini 没有类型校验,大多数错法是静默的。
  2. 以为「改了配置立刻生效」。 必须重启进程,重启会断流。
  3. 以为「编号可以随便编」。 要和 realm 对得上,否则目录同步不下来。
自测三问(点开对答案) 1. CMS 配置里哪四个键最要命? —— **`serial`、`realm`、`sip_port`、媒体端口段**。 2. 为什么「编号和域对不上」很难查? —— **两边都显示成功**,没有错误信息,**只能抓包对比 `o=` 和 `From` 里的域**。 3. 改完配置第一件事是看什么? —— **端口有没有起来**,不是打开网页。

下一节看 SMS 的配置:为什么它的键比 CMS 多一倍。

相关笔记