实时监控页面
Frigate 能够智能地在实时监控页面仪表板上显示你的摄像头流。默认情况下,Frigate 采用的“智能视频流”技术,当没有检测到活动时,摄像头图像每分钟更新一次以节省带宽和资源。一旦检测到任何画面变动或有活动目标,摄像头会无缝切换到实时流。
警告
需要注意的是,在没配置go2rtc时,默认使用的jsmpeg方法是没有声音的。如果希望实时监控能够听到声音,请参考文档来配置go2rtc。
实时监控页面技术
Frigate 智能地使用三种不同的视频流技术在仪表板和单摄像头页面上显示你的摄像头流,根据网络带宽、播放器错误或双向通话等功能需求在不同可用模式间切换。要获得最高质量和流畅度的实时监控页面,需要配置内置的go2rtc。
使用jsmpeg会消耗更多浏览器和客户端 GPU 资源。强烈推荐使用 go2rtc,它能提供更流畅的体验。
| 来源 | 帧率 | 分辨率 | 音频 | 需要 go2rtc | 说明 |
|---|---|---|---|---|---|
| jsmpeg | 与detect -> fps相同,上限 10fps | 720p | 无 | 否 | 分辨率可配置,但如需更高分辨率和更好帧率推荐使用 go2rtc。未配置 go2rtc 时 Frigate 将默认采用这个方式。 |
| mse | 原生 | 原生 | 是(取决于音频编解码器) | 是 | iPhone 需要 iOS 17.1+,Firefox 仅支持 h.264。配置 go2rtc 后 Frigate 将默认采用这个方式。 |
| webrtc | 原生 | 原生 | 是(取决于音频编解码器) | 是 | 需要额外配置。当 MSE 失败或使用摄像头双向通话功能时,Frigate 会尝试使用 WebRTC。 |
摄像头设置建议
如果使用 go2rtc,应在摄像头固件中调整以下设置以获得最佳实时监控页面体验:
- 视频编解码器:H.264 - 提供与所有实时监控页面技术和浏览器最兼容的视频编解码器。避免使用任何"智能编解码器"或"+"编解码器,如 H.264+ 或 H.265+ 以及 Smart H.265 等,这些非标准编解码器会移除关键帧(见下文)。
- 音频编解码器:AAC - 提供与所有支持音频的实时监控页面技术和浏览器最兼容的音频编解码器。
- I 帧间隔(也叫关键帧间隔、帧间空间或 GOP 长度):匹配摄像头的帧率,或选择"1x"(对于 Reolink 摄像头的帧间空间)。例如,如果你的流输出 20fps,I 帧间隔应为 20(或 Reolink 上的 1x)。高于帧率的值会导致流开始播放时间更长。有关关键帧的更多信息,请参阅此页面。对于多数用户而言这可能不是什么问题,但需注意:若你同时将视频流用于
record(录制)功能,1 倍关键帧间隔(i-frame interval)会导致更高的存储空间占用
摄像头的默认视频和音频编解码器可能不总是与你的浏览器兼容,这就是为什么建议将它们设置为H.264和AAC。有关编解码器支持信息,请参阅 go2rtc 文档。
音频支持
MSE 需要PCMA/PCMU或AAC音频,WebRTC 需要PCMA/PCMU或opus音频。如果想同时支持 MSE 和 WebRTC,则需要在转流配置中确保两者都启用。
go2rtc:
streams:
rtsp_cam: # <- RTSP流
- rtsp://192.168.1.5:554/live0 # <- 支持视频和AAC音频的流
- 'ffmpeg:rtsp_cam#audio=opus' # <- 同时保留AAC音频的情况下同时增加一个额外转码的opus音频
http_cam: # <- HTTP流
- http://192.168.50.155/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=user&password=password # <- 支持视频和AAC音频的流
- 'ffmpeg:http_cam#audio=opus' # <- 同时保留AAC音频的情况下同时增加一个额外转码的opus音频如果摄像头不支持 AAC 音频或实时监控页面有问题,尝试直接转码为 AAC 音频:
go2rtc:
streams:
rtsp_cam: # <- RTSP流
- 'ffmpeg:rtsp://192.168.1.5:554/live0#video=copy#audio=aac' # <- 复制视频流并直接将音频转码为AAC
- 'ffmpeg:rtsp_cam#audio=opus' # <- 提供WebRTC支持,增加一个额外转码的opus音频如果摄像头没有音频且实时监控页面有问题,应让 go2rtc 仅发送视频:
go2rtc:
streams:
no_audio_camera:
- ffmpeg:rtsp://192.168.1.5:554/live0#video=copy为实时监控页面设置视频流
可以配置 Frigate 允许手动选择要在实时页面中查看的视频流。例如,你可能想在移动设备上查看摄像头的子流,而在桌面设备上查看全分辨率流。设置live -> streams列表将在页面的实时监控页面中填充一个下拉菜单,让你可以选择不同的流。此流设置是独立保存在设备的,保存在浏览器的本地存储中。
此外,在界面中创建和编辑摄像头组时,可以选择要用于摄像头组实时仪表板的视频流。
NOTE
Frigate 的默认仪表板(所有摄像头)在播放摄像头实时流时将始终使用你在streams:中定义的第一个条目。
使用“别名”以及 go2rtc 流名称来配置streams选项。
使用 Frigate 内置的 go2rtc 是使用此功能的必要条件。不能在live > streams配置中指定视频流地址,只能指定 go2rtc 流名称。
go2rtc:
streams:
test_cam:
- rtsp://192.168.1.5:554/live_main # <- 支持视频和AAC音频的流
- 'ffmpeg:test_cam#audio=opus' # <- 将音频转码为opus以支持webrtc的流副本
test_cam_sub:
- rtsp://192.168.1.5:554/live_sub # <- 支持视频和AAC音频的流
test_cam_another_sub:
- rtsp://192.168.1.5:554/live_alt # <- 支持视频和AAC音频的流
cameras:
test_cam:
ffmpeg:
output_args:
record: preset-record-generic-audio-copy
inputs:
- path: rtsp://127.0.0.1:8554/test_cam # <--- 这里的名称必须与转流中的摄像头名称匹配
input_args: preset-rtsp-restream
roles:
- record
- path: rtsp://127.0.0.1:8554/test_cam_sub # <--- 这里的名称必须与转流中的camera_sub名称匹配
input_args: preset-rtsp-restream
roles:
- detect
live:
streams: # <--- Frigate 0.16及更高版本支持多流
主流: test_cam # <--- 指定"别名"后跟 go2rtc 流名称
子流: test_cam_sub
特殊流: test_cam_another_subWebRTC 额外配置
WebRTC 通过在端口8555上创建 TCP 或 UDP 连接工作。但是,它需要额外配置:
对于外部访问(通过互联网),设置路由器将端口
8555(TCP 和 UDP)转发到 Frigate 设备的端口8555。对于局域网/本地访问,除非通过 HA App 运行,否则还需要在 go2rtc 配置中设置 WebRTC 候选列表。例如,如果
192.168.1.10是运行 Frigate 设备的本地 IP:yamlgo2rtc: streams: test_cam: ... webrtc: candidates: - 192.168.1.10:8555 - stun:8555对于通过 Tailscale 的访问,必须将 Frigate 系统的 Tailscale IP 添加为 WebRTC 候选。Tailscale IP 都以
100.开头,并保留在100.64.0.0/10CIDR 块中。请注意,某些浏览器可能不支持 H.265(HEVC)编码。你可以通过此链接查看当前浏览器版本是否兼容 H.265。
提示
如果 Frigate 已作为 Home Assistant App 安装,可能不需要此额外配置,因为 Frigate 使用 Supervisor 的 API 生成 WebRTC 候选。
但是,如果出现问题,建议手动定义候选。如果 Frigate App 未能生成有效候选,你应该这样做。如果发生错误,你将在初始化期间的 App 日志页面中看到类似以下的警告:
[WARN] Failed to get IP address from supervisor
[WARN] Failed to get WebRTC port from supervisorNOTE
如果 WebRTC 正常运行遇到困难,并且你正在使用 docker 运行 Frigate,可以尝试更改容器网络模式:
network: host,在此模式下不需要转发任何端口。Frigate 容器内的服务将完全访问主机机器的网络接口,就像它们原生运行而不是在容器中一样。这个模式必须解决任何端口冲突。虽然 go2rtc 推荐此网络模式,但我们建议仅在必要时使用。network: bridge是默认网络驱动程序,桥接网络是转发网络段间流量的链路层设备。需要转发任何希望从主机 IP 访问的端口。
如果不在主机模式下运行,需要为容器映射端口8555:
docker-compose.yml
services:
frigate:
...
ports:
- "8555:8555/tcp" # WebRTC tcp 模式
- "8555:8555/udp" # WebRTC udp 模式有关更多信息,请参阅go2rtc WebRTC 文档。
双向通话
对于支持双向通话的设备,可以配置 Frigate 从 Web 页面的摄像头实时监控页面中使用该功能。你应该:
要使用 Reolink 门铃的双向通话,应使用推荐的 Reolink 配置
请查看 go2rtc 代码库 中支持双向通话的摄像头列表,来确定你摄像头兼容性。对于属于 ONVIF Profile T 类别的摄像头,你可以使用 ONVIF 合规产品数据库 的功能列表来检查是否存在 AudioOutput(音频输出)功能。支持 ONVIF Profile T 的摄像头通常也支持该功能,但由于支持情况不一致,即使明确列出此功能的摄像头也可能无法正常工作。如果数据库中没有你的摄像头,建议不要购买该摄像头,或咨询制造商的客服以了解该功能是否可用。
为防止 go2rtc 阻止其他应用程序访问你摄像头的双向音频,你必须将流配置为 #backchannel=0。请参阅重流文档中的 防止 go2rtc 阻止双向音频。
摄像头组仪表板上的视频流选项
Frigate 在摄像头组编辑面板中提供了一个对话框,其中包含几个用于摄像头组仪表板上视频流的选项。这些设置是每设备的,并保存在你设备的本地存储中。
- 使用
live -> streams配置选项选择流(详见上文为实时监控页面设置视频流) - 视频流类型:
- 无视频流:摄像头图像每分钟仅更新一次,不会进行实时视频流。
- 智能视频流(默认,推荐设置):当没有检测到活动时,智能视频流每分钟更新一次摄像头图像以节省带宽和资源,因为画面没有什么变化。当检测到画面变动或目标时,图像无缝切换到实时流。
- 持续视频流:当在仪表板上可见时,摄像头图像始终是实时流,即使没有检测到活动。连续视频流可能导致高带宽使用和性能问题,请谨慎使用。
- 兼容模式:仅当摄像头的实时流显示颜色伪影且图像右侧有对角线时才启用此选项。在启用之前,尝试将摄像头的
detect宽度和高度设置为标准宽高比(例如:640x352 变为 640x360,800x443 变为 800x450,2688x1520 变为 2688x1512 等)。根据你的浏览器和设备,可能不支持同时使用兼容模式的多个摄像头,因此只有在更改配置无法解决颜色伪影和对角线时才使用此选项。
NOTE
默认情况下仪表板下的“所有摄像头”将始终使用智能视频流(除非你已在系统设置中全局禁用了自动实时监控功能),或在streams配置了的情况下使用设置的第一个条目。如果想更改这些默认设置中的任何一个,请创建一个摄像头组然后单独进行设置。“所有摄像头”组下无法调整视频流是预期行为。
摄像头状态
每个摄像头有三种可能的状态,在设置 → 全局配置 → 摄像头管理中显示为状态选择器:
- 开启——流正常处理。目标检测、录制和实时监控均处于活动状态。
- 关闭——Frigate 的 ffmpeg 进程暂停。录制停止,目标检测暂停,实时仪表板显示带有“摄像头已关闭”消息的空白图像。摄像头仍然在实时仪表板中可见,其过去的核查项、追踪目标和历史录像仍可通过页面访问。关闭状态通过
config.yml旁边的.runtime_state.json文件在 Frigate 重启后保持(参见运行时开关持久化)。 - 禁用——更改将保存到你的配置文件(
enabled: False)。摄像头立即停止,Frigate 停止 ffmpeg 进程,该摄像头的所有实时和历史页面元素不再可见但数据仍保留在磁盘上。摄像头仍列在设置 → 全局配置 → 摄像头管理中,以便重新启用。将禁用的摄像头恢复为开启需要重启 Frigate。
开启或关闭摄像头
关闭摄像头是临时操作,不需要重启。可用的控制方式有:
- 单摄像头实时监控页眉中的电源按钮
- 实时仪表板上摄像头图块的右键上下文菜单
- 摄像头管理设置面板(状态设置为关闭)
- 单摄像头实时监控的移动端设置抽屉(仅限管理员用户)
- MQTT 主题
frigate/<camera_name>/enabled/set,负载为ON或OFF - Home Assistant 集成通过
camera.turn_on/camera.turn_off操作
禁用摄像头
禁用摄像头会将更改保存到配置文件。导航到设置 → 全局配置 → 摄像头管理,将摄像头的状态设置为禁用。运行时处理立即停止;更改在重启后保持。
重新启用已禁用的摄像头需要重启 Frigate,以便 ffmpeg 进程和其他摄像头范围资源可以初始化。当你在界面中将已禁用的摄像头切换回开启时,界面会提示你重启。
转流行为
对于关闭和禁用的摄像头,go2rtc 保持活动状态,但除非有外部客户端使用(如 Home Assistant 中的高级摄像头卡片使用 go2rtc 源),否则不会使用系统资源进行解码或处理。
选择关闭还是禁用
如果你希望摄像头的历史数据(核查项、追踪目标、录像)在页面中保持可访问,同时停止处理,请将摄像头设为关闭。如果你希望摄像头从实时仪表板、核查筛选器和其他页面中完全移除,请将其设为禁用。禁用状态仍将摄像头保留在摄像头管理中以便日后重新启用;如果你想删除摄像头的所有痕迹包括其配置,请通过摄像头管理删除它。
运行时开关持久化
实时监控中摄像头开/关、检测、录制、快照和音频检测的开关——以及对应的 MQTT /set 主题——会将新状态写入 config.yml 旁边的 .runtime_state.json 文件。该文件在 Frigate 启动时回放,使你上次已知的开关状态在重启后保持。有两个值得了解的交互:
- 设置界面保存优先。 当你通过设置 → 全局配置保存某个字段时,匹配的条目会从
.runtime_state.json中清除,因此配置文件中的新值是持久来源。 - 切换配置模板会清除所有运行时覆盖。 激活或停用配置模板被视为有意状态更改,因此文件会被清除,以避免过时的覆盖在新模板之上回放。
如果你在运行时覆盖存在时手动编辑 config.yml,覆盖仍会在重启时回放。删除 .runtime_state.json 可重置为 YAML 定义的默认值。
实时播放器错误消息
当你的浏览器在播放摄像头流时遇到问题,它会向浏览器控制台记录简短的错误消息。这些消息指示客户端/浏览器端的播放、编解码器或网络问题,而不是 Frigate 服务器端的问题。以下是可能看到的常见消息以及可以尝试解决的简单操作。
startup
含义:播放器初始化或连接到实时流失败(网络或启动错误)。
解决方法:重新加载实时视图或点击重置。验证
go2rtc正在运行且摄像头流可达。尝试从实时监控页面 下拉菜单切换到不同的流(如果可用)或使用不同的浏览器。播放器代码可能显示的控制台消息:
Error opening MediaSource.Browser reported a network error.Max error count ${errorCount} exceeded.(数值会有所不同)
mse-decode
含义:浏览器在尝试播放流时报告了解码错误,这通常是编解码器不兼容或帧损坏的结果。
解决方法:检查浏览器控制台以了解支持和协商的编解码器。确保你的摄像头/转流正在使用 H.264 视频和 AAC 音频(这些是最兼容的)。如果你的摄像头使用非标准音频编解码器,配置
go2rtc将流转码为 AAC。尝试另一个浏览器(某些浏览器对 MSE/编解码器支持更严格),对于 iPhone,确保你使用的是 iOS 17.1 或更新版本。播放器代码可能显示的控制台消息:
Safari cannot open MediaSource.Safari reported InvalidStateError.Safari reported decoding errors.
stalled
含义:播放已停滞,因为播放器落后实时太多(扩展缓冲或没有数据到达)。
解决方法:这通常表明浏览器难以同时解码太多高分辨率流。尝试选择较低带宽的流(子流),减少打开的实时流数量,改善网络连接,或降低摄像头分辨率。同时检查摄像头的关键帧(I 帧)间隔 — 较短的间隔使播放启动和恢复更快。你也可以尝试在 Frigate 设置的 UI 面板中增加超时值。
播放器代码可能显示的控制台消息:
Buffer time (10 seconds) exceeded, browser may not be playing media correctly.Media playback has stalled after <n> seconds due to insufficient buffering or a network interruption.(秒数会有所不同)
实时监控页面常见问题
为什么我的实时监控页面中没有声音?
你必须要给摄像头配置go2rtc后的视频流才能在实时监控中听到声音。如果已配置 go2rtc,需要确保摄像头发送 PCMA/PCMU 或 AAC 音频。如果无法更改摄像头的音频编解码器,需要使用 go2rtc转码音频。
如果页面上根本没有出现音频控件,请确认实时监控页面确实在使用你的 go2rtc 流。如果你的 go2rtc 流名称与 Frigate 摄像头名称不匹配,必须通过
live -> streams配置进行映射(参见上文的为实时监控页面设置视频流);否则页面会回退到仅视频的 jsmpeg 播放器。请注意,低带宽模式下播放器仅播放画面。即使已设置 go2rtc,也不能够在低带宽模式下听到声音。
我的实时监控页面显示黑屏或无法加载,但调试视图可以正常显示。为什么?
调试视图播放的是由 Frigate 自身处理的
detect流,而实时监控页面是在浏览器中直接播放你的 go2rtc 流。如果调试视图正常但实时监控页面不正常,通常是浏览器无法解码摄像头发送的内容,最常见的是 H.265 视频或不兼容的音频轨道。请按照 go2rtc 故障排查指南逐步排查。以下两种修复方法能解决大多数情况:
- 通过在源前加
ffmpeg:前缀,使用 go2rtc 的 FFmpeg 模块转流,例如- ffmpeg:rtsp://user:password@192.168.1.5:554/stream。 - 如果仍无效,转码为兼容的编解码器:
- ffmpeg:rtsp://user:password@192.168.1.5:554/stream#video=h264#audio=aac#hardware。
- 通过在源前加
如何在 Home Assistant 中获得最佳的实时监控体验?
要在 Home Assistant 仪表板中获得全分辨率、低延迟的实时监控画面,请使用 Advanced Camera Card 并配合 go2rtc live provider,它会直接从 Frigate 内置的 go2rtc 拉流。这也支持具备该能力的摄像头的音频和双向通话。设置方法请参阅 Home Assistant 集成文档。
Frigate 显示我处于"低带宽模式"。这是什么意思?
Frigate 根据多种因素(例如用户选择的模式(如双向通话)、摄像头的设置、浏览器功能和可用带宽等)智能选择实时视频流技术,并优先尽可能快地显示摄像头流的最新实时监控页面。
配置 go2rtc 后,实时监控页面最初尝试使用更清晰、流畅的视频流技术 (MSE) 加载和播放流。而 加载超时、达到流缓冲的低带宽条件 或 视频流解码错误 将导致 Frigate 切换到分配
detect功能的视频流,并使用 jsmpeg 格式进行传输。这就是页面标记为“低带宽模式”的原因。在实时仪表板上,当配置智能视频流且活动停止时,模式会自动重置。详情页面没有自动重置机制,但可以使用右上角设置中的重置选项强制重新加载流。导致回退到低带宽模式(jsmpeg)的流播放错误(例如,连接失败、编解码器问题或缓冲超时)会记录到浏览器控制台以便于调试。这些错误可能包括:
- 网络问题(例如,MSE 或 WebRTC 网络连接问题)。
- 不支持的编解码器或流格式(例如,WebRTC 中的 H.265,在某些浏览器中不受支持)。
- 缓冲超时或低带宽条件导致回退到 jsmpeg。
- 浏览器兼容性问题(例如,iOS Safari 对 MSE 的限制)。
查看浏览器控制台日志:
- 在浏览器中打开 Frigate 实时视图。
- 打开浏览器的开发工具(F12 或右键 > 检查 > 控制台选项卡)。
- 重现错误(例如,加载有问题的流或模拟网络问题)。
- 查找以摄像头名称为前缀的消息。
这些日志有助于识别问题是特定于播放器(MSE vs WebRTC)还是与摄像头配置相关(例如,go2rtc 流、编解码器)。如果你看到频繁错误:
- 验证你的摄像头 H.264/AAC 设置(参见Frigate 的摄像头设置建议)。
- 检查 go2rtc 配置的转码(例如,音频转码为 AAC/OPUS)。
- 通过页面的下拉菜单测试不同的流(如果配置了
live -> streams)。 - 对于 WebRTC 特定问题,确保端口 8555 已转发且候选项已设置(参见WebRTC 额外配置)。
- 如果你的摄像头以高分辨率流式传输,你的浏览器可能难以在缓冲超时发生前加载所有流。Frigate 优先尽快显示真正的实时视图。如果经常发生回退,请更改你的实时视图设置以使用较低带宽的子流。
为什么我的实时监控画面有延迟或滞后于实时画面?
流刚开始时的延迟通常由摄像头的 I 帧(关键帧)间隔造成。播放必须等到关键帧到来才能开始,因此如果间隔设置高于摄像头的帧率,流启动就会更慢。请按照摄像头设置建议将 I 帧间隔设置为与帧率匹配(或在 Reolink 上设为 "1x")。
如果流能按时启动但越来越滞后于实时画面,说明发生了缓冲,通常是浏览器难以同时解码过多高分辨率流。请为仪表板选择较低带宽的子流(参见为实时监控页面设置视频流)、减少同时打开的流数量,或改善浏览器与 Frigate 之间的网络连接。Frigate 的播放器会在缓冲后自动加速追上实时画面,如果停滞过久则回退到低带宽模式。重置选项会强制在实时边缘重新建立连接。
我的摄像头似乎没有在实时仪表板上实时播放。为什么?
在默认实时仪表板("所有摄像头")上,当没有检测到活动时,摄像头图像每分钟更新一次以节省带宽和资源。一旦检测到任何活动,摄像头无缝切换到全分辨率实时流。如果想自定义此行为,请使用摄像头组。
我在实时监控页面上看到一条奇怪的对角线,但我的录像看起来没问题。如何修复?
这是由于
detect宽度或高度设置不正确(或自动检测不正确)导致的,导致 jsmpeg 播放器的渲染引擎显示略微失真的图像。应将detect分辨率放大到标准宽高比(例如:640x352 变为 640x360,800x443 变为 800x450,2688x1520 变为 2688x1512 等)。如果将分辨率更改为匹配标准(4:3、16:9 或 32:9 等)宽高比无法解决问题,可以在摄像头组仪表板的流设置中启用"兼容模式"。根据你的浏览器和设备,可能不支持同时使用兼容模式的多个摄像头,因此只有在更改detect宽度和高度无法解决颜色伪影和对角线时才使用此选项。“智能视频流”如何工作?
因为场景的静态图像看起来与没有画面变动或活动的实时流完全相同,智能视频流在没有检测到活动时每分钟更新一次摄像头图像以节省带宽和资源。一旦发生任何活动(画面变动或检测到目标/音频检测),摄像头无缝切换到实时流。
此静态图像从配置中
detect角色定义的流中提取。当检测到活动时,detect流的图像立即开始以约 5 帧/秒的速度更新,以便你可以看到活动,直到实时播放器加载并开始播放。这通常只需要一两秒钟。如果实时播放器超时、缓冲或有视频流错误,则加载 jsmpeg 播放器并从detect角色播放仅视频流。当活动结束时,销毁播放器并显示静态图像,直到再次检测到活动,然后重复此过程。智能视频流依赖于正确调整摄像头的画面变动
threshold和contour_area配置值。使用页面设置中的画面变动调谐器实时调整这些值。Frigate 默认并推荐使用此设置,因为它能显著节省网络带宽,特别是使用高分辨率摄像头的情况下。
我已取消静音某些面板上的摄像头,但还是听不到声音。为什么?
如果你的摄像头正在播放视频流(如右上角的红点所示,或设置为连续视频流模式),你的浏览器可能会在你与页面交互前阻止音频播放。这是浏览器有意设计的限制。详见这篇文章。许多浏览器都有白名单功能可以更改此行为。
我的摄像头画面出现大量花屏以及失真
部分摄像头硬件不支持高分辨率视频流的多路连接,可能导致这种画面问题。这种情况建议使用go2rtc对高分辨率视频流做转流处理,专门用于实时监控画面和录像存储。
- 为什么我的摄像头流在实时仪表板上会切换宽高比?
你的摄像头可能在仪表板上改变宽高比,是因为 Frigate 不同功能将使用不同的视频流。使用 go2rtc 和智能视频流时,当没有活动时,Frigate 显示来自detect视频流的静态图像,在检测到画面变动时再切换到实时视频流。如果你的检测流和实时监控视频流使用不同的宽高比,摄像头画面大小则会发生变化。
为防止这种情况,使detect流与 go2rtc 实时流的宽高比匹配(分辨率不需要匹配,只需宽高比匹配)。你可以调整摄像头的输出分辨率,或在配置的detect部分将width和height值设置为匹配的宽高比分辨率。
示例:两个流的分辨率
不匹配(可能导致仪表板上的宽高比切换):
- 实时/go2rtc 流:1920x1080 (16:9)
- 检测流:640x352 (~1.82:1, 不是 16:9)
匹配(防止切换):
- 实时/go2rtc 流:1920x1080 (16:9)
- 检测流:640x360 (16:9)
你可以在摄像头配置中更新检测设置以匹配 go2rtc 实时流的宽高比。例如:
cameras:
front_door:
detect:
width: 640
height: 360
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/front_door # 用于录制和实时监控的主视频流 1920x1080
roles:
- record
- path: rtsp://127.0.0.1:8554/front_door_sub # 用于检测的子视频流 640x352
roles:
- detect- 为什么我在配置 go2rtc 后摄像头的实时监控详情页面不能正常显示画面,为白屏
一些家用级或者冷门的摄像头品牌可能会在视频配置文件中部分参数比较激进(如I帧和B帧),导致实时监控无法正确获取到关键帧从而显示画面。
如果无法通过调整摄像头参数解决该问题,可以尝试对视频流进行重新编码。
提示
注意,这会增加额外的编码工作,导致额外的性能消耗;如果实在无法避免,建议不要给摄像头配置转流服务(也就是不要给 Frigate 的 cameras 使用 go2rtc 转流出来的视频流),这样 go2rtc 只会在使用实时监控时才进行转码工作。
go2rtc:
streams:
front_door:
- ffmpeg:rtsp://192.168.1.10:554/stream1#video=h264#hardware#audio=copy # 视频流地址后面加上#video=h264#hardware,强制进行转码
cameras:
front_door:
detect:
width: 640
height: 360
ffmpeg:
inputs:
- path: rtsp://192.168.1.10:554/stream1 # 尽可能不要使用转流,仅使用摄像头原本的视频流地址
roles:
- record
- path: rtsp://192.168.1.10:554/stream2 # 尽可能不要使用转流,仅使用摄像头原本的视频流地址
roles:
- detectrecord 流同理:如果其宽高比与 detect 流不同,录制画面将与实时监控页面的画面比例不一致。为确保实时监控和录制画面的比例一致,请为摄像头的所有流使用相同的宽高比(分辨率仍可以不同)。