displaycameras displaydetect机制详解:自动检测分辨率并切换监控布局 displaycameras displaydetect机制详解自动检测分辨率并切换监控布局【免费下载链接】displaycamerasSystem for displaying RTSP feeds from IP cameras on the Raspberry Pi项目地址: https://gitcode.com/gh_mirrors/di/displaycamerasdisplaycameras 是一款运行在树莓派Raspberry Pi上的 RTSP 监控流布局显示系统其 displaydetect 机制能够自动检测外接显示器的真实分辨率并自动切换到与之匹配的监控布局配置文件。本文带你从零理解这套分辨率自适应的工作原理以及配套的画面置黑、摄像头轮播和故障自修复机制让你的监控墙在任何屏幕上都能自动摆正。一、displaycameras 解决了什么问题很多家庭或门店会用一块电视/显示器当监控墙把 Ubiquiti 等 IP 摄像头的 RTSP 流铺在屏幕的窗口网格里。手动写脚本很容易遇到几个头疼的问题换一块屏幕窗口坐标全乱了布局文件得重写摄像头流播放中断后没人管画面就黑在一个窗口里想看的摄像头比窗口还多需要轮播才能看全。displaycameras 用一组 Shell 脚本 systemd 服务解决了这些问题用omxplayer硬件加速播放每个窗口的 RTSP 流通过DBUSomxplayer_dbuscontrol监控每个播放实例的状态实现启动看护与自动修复通过displaydetect自动检测屏幕分辨率加载对应的布局文件支持把部分摄像头放在屏幕外窗口定时轮播上屏。二、displaydetect 的完整工作流程displaydetect 是 displaycameras.conf 中的一个全局开关默认关闭# Enable display detection (disabled by default) #displaydetecttrue主脚本 displaycameras 在启动时会按下面这条链路运行检测逻辑读开关只有displaydetecttrue时才进入检测流程否则直接使用默认布局 layout.conf.default校验 overscan 设置检查/boot/config.txt中是否有生效的disable_overscan1。Overscan过扫描会让电视对画面做裁剪放大导致 framebuffer 报告的分辨率与窗口坐标对不上——这是分辨率自动检测能否工作的前提读取真实分辨率执行fbset -s从 Linux framebuffer 取出当前显示模式名mode例如1920x1080、1440x900匹配布局文件按layout.conf.分辨率的命名规则去找配置文件如layout.conf.1440x900。找到就加载它并标记检测生效找不到则回退到layout.conf.default并提示未找到该分辨率的布局文件启动确认若检测成功服务启动时会打印Display detection is active for 分辨率 resolution.方便确认当前用的是哪套布局。⚠️ 官方特别提醒不要在任何 layout 布局文件里覆盖displaydetect的取值只应在全局配置 displaycameras.conf 中设置否则会造成混乱。三、最快启用 displaydetect 的 3 个步骤步骤 1安装时自动关闭 Overscan安装脚本 install.sh 会通过raspi-config自动写入disable_overscan1并提醒你把显示器/电视自身的过扫描功能也关掉。老电视默认开启过扫描这一步不做分辨率检测会测不准。步骤 2打开全局检测开关编辑/etc/displaycameras/displaycameras.conf模板见 displaycameras.conf取消注释displaydetecttrue步骤 3为每种目标分辨率准备布局文件布局文件放在/etc/displaycameras/下命名规则严格为layout.conf.分辨率。项目里自带了多份示例可以直接参照示例文件适用屏幕布局特点example_layouts/layout.conf.1920x1080.3x31080p 电视3x3 九宫格example_layouts/layout.conf.1440x9001440x900 显示器2x2 网格 3 个屏外窗口轮播example_layouts/layout.conf.1280x720720p 显示器720p 网格布局example_layouts/layout.conf.1024x600低分辨率屏小屏布局layout.conf.default检测未命中时的兜底2x2 网格 屏外窗口以 example_layouts/layout.conf.1440x900 为例一个布局文件里定义四样东西windows窗口名称数组如 upper_left、off_screen 等window_positions每个窗口的左上角 x、y 与右下角 x、y坐标其中屏外窗口的坐标故意写到屏幕右侧之外供轮播使用camera_names摄像头名字须符合 DBUS 命名规则字母、数字、下划线且不能以数字或点开头camera_feeds与摄像头一一对应的 RTSP 流地址。这样同一台树莓派接 1080p 电视就用九宫格布局插到 1440x900 便携屏上就自动换成 2x2 轮播——分辨率变了布局跟着变这正是 displaydetect 的价值所在。四、配套亮点屏幕置黑与摄像头轮播屏幕置黑blank启用检测后换屏时布局切换瞬间可能看到桌面或终端内容闪一下。开启blanktrue依赖fbi工具后服务启动前会先用一张纯黑图铺满全屏等所有摄像头窗口就绪前保持黑屏这张 960x540 的纯黑底图就是项目自带的 black.png由主脚本通过fbi全屏显示。摄像头轮播rotate当摄像头数量多于可见窗口时在布局文件里设置rotatetrue后台脚本 rotatedisplays 会按rotatedelay默认 5 秒周期性调用主脚本的rotate命令通过 DBUS 把各摄像头在可见窗口与屏外窗口之间挪动用seq_step还能一次挪多个窗口实现整屏翻牌式轮播。五、可靠性保障每分钟一次的自修复分辨率和布局对了还要保证流不断。displaycameras 用两道防线兜底cron 定期巡检repaircameras.cron 每分钟执行一次/usr/bin/displaycameras repair凡状态不是Playing或播放进度停留在 0s 的摄像头都会被自动重启如果 omxplayer 进程数异常偏多则直接重启整个服务启动时即时修复服务启动过程中若有窗口没起来会立即执行一轮repair startup。服务本体由 systemd 托管安装时注册的 displaycameras.service 保证系统开机后自动拉起监控墙配合systemctl status displaycameras即可随时查看健康状态。六、常见问题速查Q检测到了分辨率但布局没切换检查文件名是否严格等于layout.conf.分辨率大小写、点号都要对且该文件位于/etc/displaycameras/下。Q提示overscan enabled警告确认/boot/config.txt中有未被注释的disable_overscan1并重启电视端的过扫描设置也要关闭。Q画面在低配屏上很卡把摄像头流配置成与窗口同分辨率或更小的码流比如用低码流地址_2替代_1树莓派做降采样缩放很吃力。Q如何在别的发行版上手把手试先安装 Raspbian LiteBustergit clone https://gitcode.com/gh_mirrors/di/displaycameras后执行sudo ./install.sh再按上文 3 个步骤开启检测即可。七、总结displaycameras 的 displaydetect 机制本质是一条fbset 读分辨率 → 按命名规则匹配布局文件 → 未命中则回退默认的轻量自适应链路前提是在/boot/config.txt中关闭过扫描。配合屏外窗口轮播、屏幕置黑和 cron 自修复一套配置就能让同一台树莓派监控墙在不同分辨率的屏幕上自动各就各位非常适合移动办公和多屏复用的场景。【免费下载链接】displaycamerasSystem for displaying RTSP feeds from IP cameras on the Raspberry Pi项目地址: https://gitcode.com/gh_mirrors/di/displaycameras创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考