display 这一组和监控摄像机没关系,它管的是「解码器怎么把多路画面拼到一块屏上」。
它有三个层次:Display(一块屏)、Window(屏上一块区域)、VideoOutput(输出口参数)。
上一节讲后端分析,这一节讲「后端显示」——两者都属于「不是摄像机干的活」。 这一节很短,因为绝大多数监控项目根本用不到它。
一、三个层次
| 概念 | 是什么 | 例子 |
|---|---|---|
| Display | 一块物理输出 | HDMI-1 接的那块大屏 |
| Window | 屏上的一块区域 | 四宫格里左上那一格 |
| VideoOutput | 输出口的物理参数 | 分辨率、刷新率 |
第二行是核心:解码器之所以能「四宫格」,就是因为它能在一块 Display 上开四个 Window。 每个 Window 绑一路流,各占一块区域。 这和计算机窗口是同一个概念,只不过这里没有操作系统,是固件直接管硬件叠加层。 所以「四宫格」在解码器里是硬件能力,不是软件拼图—— 这也是为什么解码器能同时解 16 路而 PC 软件会卡:硬件有专门的叠加通道。
二、GetDisplayOptions:这块屏能显示什么
| 支持的分辨率 | 像素数 |
|---|---|
| 1920×1080 | 2073600 |
本例只报了一个 1920×1080,真实解码器通常报一长串(从 1080p 到 4K)。 这个列表的用途是「选一个不超载的输出」: 解码能力有限,4K 输出可能只能解 4 路,1080p 能解 16 路。 所以「四宫格卡顿」有时不是网络问题,是解码器超载——降输出分辨率或减少格数就好了。 这个排查方向很容易被忽略:大家第一反应都是「网络带宽不够」, 但 1080p 四路只有 16 Mbps,千兆口根本不会满——真正满的是解码芯片。
三、为什么这一组和监控项目关系不大
| 场景 | 用不用 display | 用什么代替 |
|---|---|---|
| 纯 IPC + NVR | 不用 | NVR 自己的 HDMI 输出 |
| 软件客户端(PC) | 不用 | 自己画界面 |
| 解码器 + 大屏 | 用 | — |
第二行是关键:绝大多数「监控客户端」是 PC 软件,画面是自己渲染的,
不走 ONVIF 的 display 接口。
所以做客户端的人可以跳过这一节,只有做「解码器上墙」项目的人才需要它。
这一条能省不少时间:ONVIF 那十几组接口里,真正必用的只有五六个(device、media,
可能加 ptz、events、imaging)。把剩下的都当成「按需才看」,学习成本立刻降下来。
四、动手 Demo:显示,管的是「怎么拼屏」
Demo 问一次 GetDisplayOptions,看这块「屏」支持什么分辨率。
然后算一下像素数,体会「4K 输出的解码压力是 1080p 的四倍」这件事。
_a, b, _n = S.call(port, "display", "GetDisplayOptions")
r = ET.fromstring(b)
for res in r.iter("{%s}ResolutionsAvailable" % S.NS_TT):
w = int(res.find("{%s}Width" % S.NS_TT).text)
h = int(res.find("{%s}Height" % S.NS_TT).text)
print("%dx%d" % (w, h), w * h)
# 4K 和 1080p 的像素比
print("4K/1080p = %.1f" % ((3840 * 2160) / float(1920 * 1080)))
实跑输出:
--------------------------------------------------------------------
显示,管的是「怎么拼屏」
--------------------------------------------------------------------
**`display` 这一组接口和监控摄像机没关系,它管的是「解码器怎么把多路画面拼到一块屏上」。**
这一节说清它和 `media` 的分工。
**三个层次:**
概念 是什么 例子
------------------------------------------------------------------------------------
**Display** **一块物理输出** HDMI-1 接的那块大屏
**Window** **屏上的一块区域** 四宫格里左上那一格
**VideoOutput** 输出口的物理参数 分辨率、刷新率
**第二行是核心**:
**解码器之所以能「四宫格」,就是因为它能在一块 Display 上开四个 Window。**
**每个 Window 绑一路流,各占一块区域。**
**这和计算机窗口是同一个概念**, **只不过这里没有操作系统,是固件直接管硬件叠加层。**
**`GetDisplayOptions`:这块屏能显示什么**
支持的分辨率 像素数
------------------------------------------------
1920×1080 2073600
**本例只报了一个 1920×1080**, **真实解码器通常报一长串(从 1080p 到 4K)。**
**这个列表的用途是「选一个不超载的输出」**:
**解码能力有限,4K 输出可能只能解 4 路,1080p 能解 16 路。**
**所以「四宫格卡顿」有时不是网络问题,是解码器超载**—— **降输出分辨率或减少格数就好了。**
**为什么这一组和监控项目关系不大:**
场景 用不用 display 用什么代替
------------------------------------------------------------------------------------
纯 IPC + NVR **不用** NVR 自己的 HDMI 输出
软件客户端(PC) **不用** **自己画界面**
解码器 + 大屏 **用** —
**第二行是关键**: **绝大多数「监控客户端」是 PC 软件,画面是自己渲染的**,
**不走 ONVIF 的 display 接口。**
**所以做客户端的人可以跳过这一节**, **只有做「解码器上墙」项目的人才需要它。**
**这一条能省不少时间**—— **ONVIF 的 17 个功能里,真正必用的只有五六个。**
这台设备只报了一个分辨率,所以这张表只有一行——真实解码器会报一列,从 720p 到 4K 都有。 只有一行不代表「它只能输出 1080p」,只代表「模拟器只写了这一项」。 最后那个 4.0 倍是算出来的(3840×2160 ÷ 1920×1080 = 4)—— 它解释了「为什么 4K 输出只能解四分之一的路数」。 解码压力大致和像素数成正比,所以分辨率翻倍(长宽各翻倍)就是四倍压力,不是两倍。 这个「平方关系」在很多地方都会咬人:渲染、编码、存储容量都是按像素算的, 所以「分辨率提一档」在工程上往往意味着「成本翻两番」。
30 秒实验
- 把 4K 的比例改成 2560×1440,算它相对 1080p 是几倍。
- 给模拟器加两个分辨率选项,看表格变成几行。
- 算一下「1080p 16 路」和「4K 4 路」的像素总量,看是否相等。
常见误区
- 以为 display 是摄像机的接口。 它属于解码器/上墙设备,摄像机没有这一组。
- 以为四宫格是软件拼的。 是硬件叠加层,所以解码器能解十几路而 PC 软件会卡。
- 以为分辨率提一档成本翻倍。 像素数是平方关系,1080p 到 4K 是四倍压力。
自测三问(点开对答案)
1. `display` 这一组的三个层次是什么? —— **Display(一块物理输出)、Window(屏上一块区域)、VideoOutput(输出口参数)。** 2. 「四宫格卡顿」最可能是什么原因? —— **解码器超载**,不是网络。**1080p 四路只有 16 Mbps,千兆口不会满,满的是解码芯片。** 3. 做 PC 监控客户端需要实现 `display` 吗? —— **不需要。** PC 客户端自己渲染画面,**`display` 只有「解码器上墙」类项目才用。**下一节讲接收器:一台设备怎么去拉另一台设备的流,以及那个「连上没有」的状态字段。
- ☐ (本节完,下一节 07.02.16 接收器)