Skip to content

实时监控页面

Frigate 能够智能地在实时监控页面仪表板上显示你的摄像头流。默认情况下,Frigate 采用的“智能视频流”技术,当没有检测到活动时,摄像头图像每分钟更新一次以节省带宽和资源。一旦检测到任何画面变动或有活动目标,摄像头会无缝切换到实时流。

警告

需要注意的是,在没配置go2rtc时,默认使用的jsmpeg方法是没有声音的。如果希望实时监控能够听到声音,请参考文档来配置go2rtc

实时监控页面技术

Frigate 智能地使用三种不同的视频流技术在仪表板和单摄像头页面上显示你的摄像头流,根据网络带宽、播放器错误或双向通话等功能需求在不同可用模式间切换。要获得最高质量和流畅度的实时监控页面,需要按照逐步指南配置内置的go2rtc

使用jsmpeg会消耗更多浏览器和客户端 GPU 资源。强烈推荐使用 go2rtc,它能提供更流畅的体验。

来源帧率分辨率音频需要 go2rtc说明
jsmpegdetect -> fps相同,上限 10fps720p分辨率可配置,但如需更高分辨率和更好帧率推荐使用 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.264AAC。有关编解码器支持信息,请参阅go2rtc 文档

音频支持

MSE 需要PCMA/PCMUAAC音频,WebRTC 需要PCMA/PCMUopus音频。如果想同时支持 MSE 和 WebRTC,则需要在转流配置中确保两者都启用。

yaml
go2rtc:
  streams:
    rtsp_cam: # <- RTSP流
      - rtsp://192.168.1.5:554/live0 # <- 支持视频和AAC音频的流
      - "ffmpeg:rtsp_cam#audio=opus" # <- 将音频转码为缺失编解码器(通常是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" # <- 将音频转码为缺失编解码器(通常是opus)的视频流副本

如果摄像头不支持 AAC 音频或实时监控页面有问题,尝试直接转码为 AAC 音频:

yaml
go2rtc:
  streams:
    rtsp_cam: # <- RTSP流
      - "ffmpeg:rtsp://192.168.1.5:554/live0#video=copy#audio=aac" # <- 复制视频流并将音频转码为AAC
      - "ffmpeg:rtsp_cam#audio=opus" # <- 提供WebRTC支持

如果摄像头没有音频且实时监控页面有问题,应让 go2rtc 仅发送视频:

yaml
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 流名称。

yaml
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_sub

WebRTC 额外配置

WebRTC 通过在端口8555上创建 TCP 或 UDP 连接工作。但是,它需要额外配置:

  • 对于外部访问(通过互联网),设置路由器将端口8555(TCP 和 UDP)转发到 Frigate 设备的端口8555

  • 对于局域网/本地访问,除非通过 HA 插件运行,否则还需要在 go2rtc 配置中设置 WebRTC 候选列表。例如,如果192.168.1.10是运行 Frigate 设备的本地 IP:

    yaml
    go2rtc:
      streams:
        test_cam: ...
      webrtc: 
        candidates: 
          - 192.168.1.10:8555
          - stun:8555
  • 对于通过 Tailscale 的访问,必须将 Frigate 系统的 Tailscale IP 添加为 WebRTC 候选。Tailscale IP 都以100.开头,并保留在100.64.0.0/10 CIDR 块中。

  • 请注意,某些浏览器可能不支持 H.265(HEVC)编码。你可以通过此链接查看当前浏览器版本是否兼容 H.265。

提示

如果 Frigate 已作为 Home Assistant 插件安装,可能不需要此额外配置,因为 Frigate 使用 Supervisor 的 API 生成 WebRTC 候选。

但是,如果出现问题,建议手动定义候选。如果 Frigate 插件未能生成有效候选,你应该这样做。如果发生错误,你将在初始化期间的插件日志页面中看到类似以下的警告:

log
[WARN] Failed to get IP address from supervisor
[WARN] Failed to get WebRTC port from supervisor

NOTE

如果 WebRTC 正常运行遇到困难,并且你正在使用 docker 运行 Frigate,可以尝试更改容器网络模式:

  • network: host,在此模式下不需要转发任何端口。Frigate 容器内的服务将完全访问主机机器的网络接口,就像它们原生运行而不是在容器中一样。这个模式必须解决任何端口冲突。虽然 go2rtc 推荐此网络模式,但我们建议仅在必要时使用。
  • network: bridge是默认网络驱动程序,桥接网络是转发网络段间流量的链路层设备。需要转发任何希望从主机 IP 访问的端口。

如果不在主机模式下运行,需要为容器映射端口8555

docker-compose.yml

yaml
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 页面和MQTT临时禁用摄像头以节省系统资源。禁用时,Frigate 的 ffmpeg 进程将终止并停止录制,同时暂停目标检测,实时仪表板显示禁用消息的空白图像。仍可通过页面访问禁用摄像头的回放条目、追踪目标和历史录像。

NOTE

通过 Frigate 页面或 MQTT 禁用摄像头是临时操作,重启 Frigate 后就会恢复。

对于转流摄像头,go2rtc 保持活动状态,但除非有外部客户端使用(如 Home Assistant 中的高级摄像头卡片使用 go2rtc 源),否则不会使用系统资源进行解码或处理。

注意,通过配置文件禁用的摄像头(enabled: False)会移除页面上该摄像头所有相关内容,包括历史录像访问。要保留访问权限同时禁用摄像头,请在配置中保持启用状态,并在页面上或使用 MQTT 临时禁用它。

实时播放器错误消息

当你的浏览器在播放摄像头流时遇到问题,它会向浏览器控制台记录简短的错误消息。这些消息指示客户端/浏览器端的播放、编解码器或网络问题,而不是 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.(秒数会有所不同)

实时监控页面常见问题

  1. 为什么我的实时监控页面中没有声音?

    你必须要给摄像头配置go2rtc后的视频流才能在实时监控中听到声音。如果已配置 go2rtc,需要确保摄像头发送 PCMA/PCMU 或 AAC 音频。如果无法更改摄像头的音频编解码器,需要使用 go2rtc转码音频

    请注意,低带宽模式下播放器仅播放画面。即使已设置 go2rtc,也不能够在低带宽模式下听到声音

  2. Frigate 显示我处于"低带宽模式"。这是什么意思?

    Frigate 根据多种因素(例如用户选择的模式(如双向通话)、摄像头的设置、浏览器功能和可用带宽等)智能选择实时视频流技术,并优先尽可能快地显示摄像头流的最新实时监控页面。

    配置 go2rtc 后,实时监控页面最初尝试使用更清晰、流畅的视频流技术 (MSE) 加载和播放流。而 加载超时、达到流缓冲的低带宽条件 或 视频流解码错误 将导致 Frigate 切换到分配detect功能的视频流,并使用 jsmpeg 格式进行传输。这就是页面标记为“低带宽模式”的原因。在实时仪表板上,当配置智能视频流且活动停止时,模式会自动重置。详情页面没有自动重置机制,但可以使用右上角设置中的重置选项强制重新加载流。

    导致回退到低带宽模式(jsmpeg)的流播放错误(例如,连接失败、编解码器问题或缓冲超时)会记录到浏览器控制台以便于调试。这些错误可能包括:

    • 网络问题(例如,MSE 或 WebRTC 网络连接问题)。
    • 不支持的编解码器或流格式(例如,WebRTC 中的 H.265,在某些浏览器中不受支持)。
    • 缓冲超时或低带宽条件导致回退到 jsmpeg。
    • 浏览器兼容性问题(例如,iOS Safari 对 MSE 的限制)。

    查看浏览器控制台日志:

    1. 在浏览器中打开 Frigate 实时视图。
    2. 打开浏览器的开发工具(F12 或右键 > 检查 > 控制台选项卡)。
    3. 重现错误(例如,加载有问题的流或模拟网络问题)。
    4. 查找以摄像头名称为前缀的消息。

    这些日志有助于识别问题是特定于播放器(MSE vs WebRTC)还是与摄像头配置相关(例如,go2rtc 流、编解码器)。如果你看到频繁错误:

    • 验证你的摄像头 H.264/AAC 设置(参见Frigate 的摄像头设置建议)。
    • 检查 go2rtc 配置的转码(例如,音频转码为 AAC/OPUS)。
    • 通过页面的下拉菜单测试不同的流(如果配置了live -> streams)。
    • 对于 WebRTC 特定问题,确保端口 8555 已转发且候选项已设置(参见(WebRTC 额外配置)(#webrtc-extra-configuration))。
    • 如果你的摄像头以高分辨率流式传输,你的浏览器可能难以在缓冲超时发生前加载所有流。Frigate 优先尽快显示真正的实时视图。如果经常发生回退,请更改你的实时视图设置以使用较低带宽的子流。
  3. 我的摄像头似乎没有在实时仪表板上实时播放。为什么?

    在默认实时仪表板("所有摄像头")上,当没有检测到活动时,摄像头图像每分钟更新一次以节省带宽和资源。一旦检测到任何活动,摄像头无缝切换到全分辨率实时流。如果想自定义此行为,请使用摄像头组

  4. 我在实时监控页面上看到一条奇怪的对角线,但我的录像看起来没问题。如何修复?

    这是由于detect宽度或高度设置不正确(或自动检测不正确)导致的,导致 jsmpeg 播放器的渲染引擎显示略微失真的图像。应将detect分辨率放大到标准宽高比(例如:640x352 变为 640x360,800x443 变为 800x450,2688x1520 变为 2688x1512 等)。如果将分辨率更改为匹配标准(4:3、16:9 或 32:9 等)宽高比无法解决问题,可以在摄像头组仪表板的流设置中启用"兼容模式"。根据你的浏览器和设备,可能不支持同时使用兼容模式的多个摄像头,因此只有在更改detect宽度和高度无法解决颜色伪影和对角线时才使用此选项。

  5. “智能视频流”如何工作?

    因为场景的静态图像看起来与没有画面变动或活动的实时流完全相同,智能视频流在没有检测到活动时每分钟更新一次摄像头图像以节省带宽和资源。一旦发生任何活动(画面变动或检测到目标/音频检测),摄像头无缝切换到实时流。

    此静态图像从配置中detect角色定义的流中提取。当检测到活动时,detect流的图像立即开始以约 5 帧/秒的速度更新,以便你可以看到活动,直到实时播放器加载并开始播放。这通常只需要一两秒钟。如果实时播放器超时、缓冲或有视频流错误,则加载 jsmpeg 播放器并从detect角色播放仅视频流。当活动结束时,销毁播放器并显示静态图像,直到再次检测到活动,然后重复此过程。

    智能视频流依赖于正确调整摄像头的画面变动thresholdcontour_area配置值。使用页面设置中的画面变动调谐器实时调整这些值。

    Frigate 默认并推荐使用此设置,因为它能显著节省网络带宽,特别是使用高分辨率摄像头的情况下。

  6. 我已取消静音某些面板上的摄像头,但还是听不到声音。为什么?

    如果你的摄像头正在播放视频流(如右上角的红点所示,或设置为连续视频流模式),你的浏览器可能会在你与页面交互前阻止音频播放。这是浏览器有意设计的限制。详见这篇文章。许多浏览器都有白名单功能可以更改此行为。

  7. 我的摄像头画面出现大量花屏以及失真 ​​

部分摄像头硬件不支持高分辨率视频流的多路连接,可能导致这种画面问题。这种情况建议使用go2rtc对高分辨率视频流做转流处理,专门用于实时监控画面和录像存储。

  1. 为什么我的摄像头流在实时仪表板上会切换宽高比?

    你的摄像头可能在仪表板上改变宽高比,是因为 Frigate 不同功能将使用不同的视频流。使用 go2rtc 和智能视频流时,当没有活动时,Frigate 显示来自detect视频流的静态图像,在检测到画面变动时再切换到实时视频流。如果你的检测流和实时监控视频流使用不同的宽高比,摄像头画面大小则会发生变化。

    为防止这种情况,使detect流与 go2rtc 实时流的宽高比匹配(分辨率不需要匹配,只需宽高比匹配)。你可以调整摄像头的输出分辨率,或在配置的detect部分将widthheight值设置为匹配的宽高比分辨率。

    示例:两个流的分辨率

    • 不匹配(可能导致仪表板上的宽高比切换):

      • 实时/go2rtc 流:1920x1080 (16:9)
      • 检测流:640x352 (~1.82:1, 不是 16:9)
    • 匹配(防止切换):

      • 实时/go2rtc 流:1920x1080 (16:9)
      • 检测流:640x360 (16:9)

    你可以在摄像头配置中更新检测设置以匹配 go2rtc 实时流的宽高比。例如:

    yaml
    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
最近更新