frigate/docs/i18n/zh/docusaurus-plugin-content-docs/current/configuration/hardware_acceleration.md
2025-04-29 21:58:32 +08:00

7.9 KiB
Raw Blame History

id title
hardware_acceleration 硬件加速

硬件加速

强烈建议在Frigate中使用GPU进行硬件加速。某些类型的硬件加速会被自动检测并使用但您可能需要更新配置以在ffmpeg中启用硬件加速解码。

根据您的系统这些参数可能不兼容。更多关于ffmpeg硬件加速解码的信息请参考https://trac.ffmpeg.org/wiki/HWAccelIntro

官方支持

树莓派3/4

确保为GPU分配至少128MB内存通过raspi-config > 性能选项 > GPU内存设置。 如果使用Home Assistant插件可能需要使用完全访问版本并关闭"保护模式"以启用硬件加速。

# 解码h264流
ffmpeg:
  hwaccel_args: preset-rpi-64-h264

# 解码h265(hevc)流  
ffmpeg:
  hwaccel_args: preset-rpi-64-h265

:::note

如果通过Docker运行Frigate需要以特权模式运行或将/dev/video*设备映射到Frigate。使用Docker Compose添加

services:
  frigate:
    ...
    devices:
      - /dev/video11:/dev/video11

或使用docker run

docker run -d \
  --name frigate \
  ...
  --device /dev/video11 \
  ghcr.io/blakeblackshear/frigate:stable

/dev/video11是正确的设备树莓派4B。可以通过以下命令检查

for d in /dev/video*; do
  echo -e "---\n$d"
  v4l2-ctl --list-formats-ext -d $d
done

或者映射所有/dev/video*设备。

:::

Intel显卡

:::info

推荐硬件加速预设

CPU代数 Intel驱动 推荐预设 说明
1-7代 i965 preset-vaapi 不支持qsv
8-12代 iHD preset-vaapi 也可使用preset-intel-qsv-*
13代+ iHD/Xe preset-intel-qsv-*
Intel Arc显卡 iHD/Xe preset-intel-qsv-*

:::

:::note

默认驱动是iHD。如需要改为i965驱动可能需要通过添加环境变量LIBVA_DRIVER_NAME=i965在docker-compose文件中或HA插件的config.yml中)。

参考Intel文档确认您的CPU是第几代的。

:::

通过VAAPI

VAAPI支持自动配置文件选择可自动处理H.264和H.265流。

ffmpeg:
  hwaccel_args: preset-vaapi

通过QuickSync

:::warning

部分用户反馈使用preset-intel-qsv-*可能无法正常启动Frigate这种情况建议使用VAAPI

:::

H.264流

ffmpeg:
  hwaccel_args: preset-intel-qsv-h264

H.265流

ffmpeg:
  hwaccel_args: preset-intel-qsv-h265

Docker中配置Intel GPU统计

需要额外配置才能使Docker容器访问intel_gpu_top命令获取GPU统计信息。有两种方法

  1. 以特权模式运行容器
  2. 添加CAP_PERFMON能力(注意:可能需要降低perf_event_paranoid值)

特权模式运行

这种方法有效但会赋予容器过多权限。

Docker Compose - 特权模式
services:
  frigate:
    ...
    privileged: true
Docker Run CLI - 特权模式
docker run -d \
  --name frigate \
  ...
  --privileged \
  ghcr.io/blakeblackshear/frigate:stable

CAP_PERFMON

只有较新版本的Docker支持CAP_PERFMON能力。可通过运行测试:docker run --cap-add=CAP_PERFMON hello-world

Docker Compose - CAP_PERFMON
services:
  frigate:
    ...
    cap_add:
      - CAP_PERFMON
Docker Run CLI - CAP_PERFMON
docker run -d \
  --name frigate \
  ...
  --cap-add=CAP_PERFMON \
  ghcr.io/blakeblackshear/frigate:stable

perf_event_paranoid

注意:此设置需针对整个系统修改。

关于不同发行版的值,参考:https://askubuntu.com/questions/1400874/what-does-perf-paranoia-level-four-do

临时修改(重启后失效):

sudo sh -c 'echo 2 >/proc/sys/kernel/perf_event_paranoid'

永久修改:

sudo sh -c 'echo kernel.perf_event_paranoid=2 >> /etc/sysctl.d/local.conf'

SR-IOV设备统计

使用SR-IOV虚拟化GPU时需要额外参数才能使GPU统计正常工作

telemetry:
  stats:
    sriov: True

AMD/ATI显卡Radeon HD 2000及更新

VAAPI支持自动配置文件选择可自动处理H.264和H.265流。

:::note

需要通过环境变量LIBVA_DRIVER_NAME=radeonsi将驱动改为radeonsi在docker-compose文件中或HA插件的config.yml中)。

:::

ffmpeg:
  hwaccel_args: preset-vaapi

NVIDIA显卡

建议使用现代支持的GPU。NVIDIA提供了支持的GPU和功能矩阵。如果您的显卡在列表中且支持CUVID/NVDEC则很可能可用于解码。但必须使用与FFmpeg兼容的驱动版本

更完整的显卡和驱动兼容列表见驱动发布说明

Docker中配置NVIDIA显卡

需要安装NVIDIA容器工具包并指定GPU。

Docker Compose - NVIDIA显卡

services:
  frigate:
    ...
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0'] # 仅需在多GPU时指定
              count: 1 # GPU数量
              capabilities: [gpu]

Docker Run CLI - NVIDIA显卡

docker run -d \
  --name frigate \
  ...
  --gpus=all \
  ghcr.io/blakeblackshear/frigate:stable

设置解码器

使用preset-nvidiaffmpeg会自动选择适合的配置文件如果不支持会记录错误。

ffmpeg:
  hwaccel_args: preset-nvidia

验证硬件解码是否工作,运行nvidia-smi应显示ffmpeg进程:

:::note

由于Docker限制nvidia-smi在容器内运行时可能不显示ffmpeg进程。

:::

这些说明基于Jellyfin文档

社区支持

NVIDIA Jetson系列

提供基于Jetpack/L4T的专用Docker镜像包含使用Jetson专用媒体引擎的ffmpeg构建。Jetpack 6.0+主机使用stable-tensorrt-jp6标签镜像。注意Orin Nano没有视频编码器将使用软件编码。

Docker Run CLI - Jetson

docker run -d \
  ...
  --runtime nvidia
  ghcr.io/blakeblackshear/frigate:stable-tensorrt-jp6

Docker Compose - Jetson

services:
  frigate:
    ...
    image: ghcr.io/blakeblackshear/frigate:stable-tensorrt-jp6
    runtime: nvidia

:::note

旧版docker-compose不支持runtime:标签。可改为在/etc/docker/daemon.json中添加"default-runtime": "nvidia"

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"
}

:::

设置解码器

根据输入视频选择解码器(在容器内运行ffmpeg -decoders | grep nvmpi查看支持的解码器):

ffmpeg:
  hwaccel_args: preset-jetson-h264

验证硬件解码是否工作,运行jtopsudo pip3 install -U jetson-stats应显示NVDEC/NVDEC1在使用。

Rockchip平台

所有Rockchip SoC都支持使用Nyanmisaka的FFmpeg 6.1分支进行硬件加速编解码。

前提条件

按照Rockchip特定安装说明操作。

配置

config.yml中添加以下预设之一:

# 解码h264流
ffmpeg:
  hwaccel_args: preset-rk-h264

# 解码h265(hevc)流
ffmpeg:
  hwaccel_args: preset-rk-h265

:::note

确保您的SoC支持输入流的硬件加速。例如如果摄像头以h265编码和4K分辨率流式传输您的SoC必须能够以4K或更高分辨率编解码h265。如果不确定请查阅SoC数据手册。

:::