Встроенный go2rtc в Frigate: Оптимизация видеонаблюдения
Перезагрузился у меня как-то сервер, где живут Frigate и Home Assistant… и, как назло, ни Home Assistant, ни Frigate не запустились. Я, конечно, сразу полез смотреть логи, и увидел, что Frigate тоже "лег".
Я начал мучить чат-бот, и он внезапно предложил воспользоваться встроенным go2rtc. А ведь у меня до этого был установлен go2rtc как отдельный Docker-контейнер, который, как оказалось, постоянно конфликтовал с Frigate. Помню, как я его устанавливал в отдельном контейнере и потом еще как отдельный аддон.
Снес go2rtc как отдельный контейнер и настроил встроенный. Главное, чаты раньше не предлагали использовать встроеный, что странно.
А что это за "зверь" — встроенный go2rtc?
Frigate который умеет круто анализировать видео с камер, теперь поставляется со встроенным go2rtc. Это такая маленькая, но очень шустрая программка для стриминга видео, которая сама настраивается так, чтобы всё работало идеально с Frigate.
Штука получается как единый центр обработки изображения, к которому обращаются все потребители - frigate, home assisstant. Пока не тестировал, но и сервисы распознавания лиц и номеров тоже могут обращаться к go2rtc который уже подготовил нужное изображение.
Использование этой встроенной версии go2rtc — это не просто удобно, это прямо-таки необходимо, чтобы активировать кучу классных и важных функций, а еще, чтобы забыть о многих проблемах:
- Живой просмотр в нормальном качестве: Теперь можно смотреть видео с камер в реальном времени с минимальной задержкой. go2rtc поддерживает WebRTC или MSE, а это значит, что у будет высокое разрешение, отличная частота кадров и, конечно же, звук. Картинка становится просто нереально плавной и детализированной.
- Прямые трансляции в Home Assistant: Если вы используете Home Assistant, то go2rtc обеспечивает стабильную и правильную работу прямых трансляций с камер прямо там.
- Меньше нагрузки на камеры: go2rtc работает как ретранслятор RTSP-потоков. Представьте: раньше Frigate, Home Assistant и, возможно, другие приложения каждый по отдельности "дергали" камеру, создавая кучу подключений. Теперь go2rtc устанавливает одно-единственное соединение с камерой и раздает его всем, кому нужно. Это ОЧЕНЬ сильно снижает нагрузку на камеру, делает её стабильнее и быстрее отзывающейся. Прощайте, зависания!
- Никаких конфликтов портов: Раньше, когда go2rtc был отдельным, могли быть проблемы с портами. Встроенное решение полностью исключает эти конфликты, делая систему гораздо надежнее и проще в настройке.
- Движение камеры через ONVIF стало более отзывчивым, думаю потому что снижена нагрузка на камеры.
Картинки для сравнения нет, но качество улучшилось и задержка на видео реально ушла. Загрузка самого изображения стала чуть дольше конечно. Это конечно скрины с экрана и сложно понять насколько лучше стало, но все же:
Как настроить встроенный go2rtc? Пошаговая инструкция
Чтобы начать пользоваться всеми прелестями встроенного go2rtc, вам нужно отредактировать свой конфигурационный файл Frigate — config.yml
.
Шаг 1: Настраиваем секцию go2rtc
Здесь мы указываем go2rtc, откуда брать видеопотоки с ваших камер.
go2rtc: streams: # Здесь мы описываем все видеопотоки, которыми go2rtc будет управлять. PeredVhodom: rtsp://admin:ВашПароль@192.168.2.4:554/channel=1/stream=0 # ^ "PeredVhodom" - это как бы "имя" потока для go2rtc. Frigate потом будет использовать его, чтобы запросить видео. # ^ "rtsp://admin:ВашПароль@192.168.2.4:554/channel=1/stream=0" - это полный адрес вашей IP-камеры. # go2rtc сам подключится сюда. Тут есть протокол (rtsp://), логин (admin), пароль (ВашПароль), # IP-адрес камеры, порт (554) и путь к конкретному видеопотоку (channel=1/stream=0). Doma: rtsp://192.168.2.40:554/user=admin&password=ВашПароль&channel=1&stream=0?.sdp # ^ Точно так же настраиваем поток для камеры "Doma". Обратите внимание, что формат URL # может отличаться в зависимости от производителя камеры (user=...&password=...). ViezdPravo: rtsp://admin:ВашПароль@192.168.1.61:554/channel=1/stream=0 # ^ Поток для камеры "ViezdPravo". ViezdLevo: rtsp://admin:ВашПароer@192.168.2.27:554/channel=1/stream=0 # ^ Поток для камеры "ViezdLevo". Sad: rtsp://admin:ВашПароль@192.168.2.24:554 # ^ Поток для камеры "Sad". Здесь URL короче, потому что это, скорее всего, основной или единственный поток. Xiaomi1: rtsp://192.168.2.6:554/primary # ^ Поток для моей камеры "Xiaomi1". Путь к потоку (/primary) тоже специфичен для Xiaomi. # **Важно:** Для камер Xiaomi RTSP-URL часто бывает неочевидным и может потребовать # предварительной "активации" или использования сторонних программ. Путь (вроде /primary, /live/ch0 и т.д.) # сильно зависит от конкретной модели и прошивки. Так что тут придется немного погуглить! webrtc: # Это настройки для WebRTC — технологии, которая дает нам живой просмотр с минимальной задержкой. candidates: # Список адресов, которые go2rtc будет предлагать вашим устройствам (например, браузерам) # для установки WebRTC-соединения. - 192.168.2.18:8555 # Ваш локальный IP-адрес сервера Frigate и порт go2rtc. # Это внутренний адрес, который go2rtc сообщит клиентам. - stun:8555 # Использование STUN-сервера (Session Traversal Utilities for NAT) # очень помогает WebRTC работать, когда вы смотрите видео из-за роутера/NAT. # Он помогает обнаружить внешний IP-адрес сервера.
Шаг 2: Настраиваем секцию cameras
для каждой камеры
После того как go2rtc знает, откуда брать потоки, нужно сказать Frigate, чтобы он подключался к go2rtc, а не напрямую к камере.
cameras: PeredVhodom: # Уникальное имя камеры в Frigate. Оно должно совпадать с тем, что вы указали в секции go2rtc. name: PeredVhodom # Название, которое будет отображаться. enabled: true # Включаем эту камеру в работу Frigate. ffmpeg: # Настройки для FFmpeg — это компонент, который обрабатывает видеопотоки. hwaccel_args: preset-rk-h264 # Аргументы для аппаратного ускорения FFmpeg. # Это СУПЕР-ВАЖНО для снижения нагрузки на ваш процессор (CPU)! # Часть работы по обработке видео перекладывается на специальное "железо" # (например, видеокарту). "preset-rk-h264" подходит для чипов Rockchip # и кодека H.264. Убедитесь, что вы используете пресет, # который подходит именно вашему оборудованию (например, "preset-nvidia-h264" # для Nvidia, "preset-vaapi" для Intel). Если у вас нет аппаратного ускорения, # эту строку можно просто удалить, но тогда CPU будет работать по полной! inputs: # Здесь мы указываем, откуда FFmpeg будет брать потоки. - path: rtsp://127.0.0.1:8554/PeredVhodom # ^ **Это ГЛАВНОЕ изменение!** Frigate теперь подключается к go2rtc # (по локальному адресу 127.0.0.1 и стандартному порту go2rtc 8554) # и запрашивает поток с именем "PeredVhodom", который go2rtc уже получает с вашей камеры. # Это убирает прямое подключение Frigate к камере, что сильно снижает нагрузку на неё. input_args: preset-rtsp-restream # ^ Это набор оптимизированных аргументов для FFmpeg, # специально разработанных для работы с потоками, # которые go2rtc ретранслирует. Это помогает сделать поток стабильным и качественным. roles: # Здесь мы говорим Frigate, для чего использовать этот видеопоток. - detect # Поток используется для детекции (людей, машин и т.д.). - record # Поток используется для записи видео. - audio # Поток используется для обработки аудио (например, детекции звуков).
Шаг 3: Настраиваем аудиокодеки для просмотра и записи
Аудио — это отдельная, но очень важная тема. Разные технологии просмотра (MSE, WebRTC) имеют свои требования к аудиокодекам. Пришлось повозиться со своим запарком камер, у меня они разные и удалось отловить правильные настройки
Перед настройкой кодеков нужно обязательно помнить как работает код во frigate - есть глобальный уровень и локальный. Когда все камеры работали без уточнения через go2rtc у меня был на глобальном уровне:
ffmpeg: output_args: record: preset-record-generic-audio-aac
Когда начал настраивать локально для каждой камеры - у некоторых при загрузке “отваливались” кнопки включения звука. Поэтому нужно закомментировать или удалить на глобальном и ставить только на локальном (в настройках камеры). Вообще, я решил что буду со звуком точно делать на локальном, так как я уже один раз словил ошибку подключив esp32 cam у которой вобще нет аудиопотока. Вот так должны правильно выглядеть кнопки:
Технологии Live View (просмотр в реальном времени) в Frigate:
- MSE (Media Source Extensions): Дает нам нативную частоту кадров и разрешение. Поддерживает аудио в форматах PCMA/PCMU или AAC. Это основной способ просмотра в Frigate, когда go2rtc настроен.
- WebRTC (Web Real-Time Communication): Тоже дает нативную частоту кадров и разрешение, но с еще меньшей задержкой. Поддерживает аудио в форматах PCMA/PCMU или Opus. Frigate пытается использовать WebRTC, если MSE не работает, или если вам нужна двусторонняя связь с камерой. WebRTC требует дополнительной настройки и обычно работает через TCP/UDP на порту 8555.
Конфигурация go2rtc для Live View (секция streams
):
Наша цель — сделать так, чтобы go2rtc мог отдавать аудио в форматах, которые "понимают" и MSE, и WebRTC. Эта конфигурация относится только к живому просмотру. Посмотреть какой кодек у вас стоит можно через VLC. Подгрузив поток можно в Tools - Codec information.
- Если камера выдает аудио в формате AAC (например, 32000 Гц, стерео): MSE будет прекрасно работать с AAC вашей камеры. Но вот WebRTC напрямую AAC не любит, ему нужен Opus. Поэтому, чтобы WebRTC тоже работал со звуком, нужно добавить дополнительный поток, который перекодирует аудио в Opus.
go2rtc: streams: Sad: - rtsp://admin:ВашПароль@192.168.2.24:554 # Оригинальный поток с AAC аудио - "ffmpeg:Sad#audio=opus" # Это копия потока, где аудио перекодируется в Opus для WebRTC
- Если камера выдает аудио в формате PCM ALAW (alaw) или PCMU (mu-law): Тут все гораздо проще! Форматы PCMA (A-law) и PCMU (μ-law) напрямую поддерживаются как MSE, так и WebRTC. Никаких дополнительных конвертаций аудио не требуется!
go2rtc: streams: your_camera: - rtsp://camera_url_here # Оригинальный поток с PCM ALAW/PCMU аудио
Это самый эффективный вариант, потому что он не нагружает процессор лишними перекодированиями. Однако, я сталкивался с тем, что звук с камер в формате PCM ALAW переставал передаваться через MSE, несмотря на заявленную совместимость. В таких случаях перевод аудио в AAC (например, черезffmpeg:camera_name#audio=aac
) помог решить проблему. - Если камера выдает аудио в другом формате (не AAC, не PCMA/PCMU): В этом случае, чтобы все работало и с MSE, и с WebRTC, вам понадобятся оба дополнительных потока: один для AAC (для MSE) и один для Opus (для WebRTC).
go2rtc: streams: camera_name: - rtsp://camera_url # Оригинальный поток с неподдерживаемым аудио - "ffmpeg:camera_name#audio=aac" # Копия потока, где аудио перекодируется в AAC для MSE - "ffmpeg:camera_name#audio=opus" # Копия потока, где аудио перекодируется в Opus для WebRTC
Конфигурация камеры для записи (секция cameras
-> ffmpeg
-> output_args
):
Настройки для записи отличаются от настроек Live View, потому что они касаются сохранения файлов, а не потоковой передачи.
- Если камера поддерживает AAC: Для записи лучше использовать
preset-record-generic-audio-copy
. Потому что аудио уже в нужном формате, и его можно просто скопировать без перекодирования. Это экономит ресурсы процессора.cameras: camera_name: ffmpeg: output_args: record: preset-record-generic-audio-copy
- Если камера НЕ поддерживает AAC (например, PCM ALAW): Для записи рекомендуется конвертировать аудио в AAC. AAC обычно более эффективно сжимает звук для длительного хранения файлов.
cameras: camera_name: ffmpeg: output_args: record: preset-record-generic-audio-aac
go2rtc
(секцияstreams
): Это про Live View в браузере (MSE/WebRTC). Здесь мы добавляем дополнительные потоки (ffmpeg:stream#audio=opus
или#audio=aac
), если нужно, чтобы звук работал со всеми протоколами Live View.cameras
(секцияoutput_args
): Это про записи (файлы). Используемpreset-record-generic-audio-copy
для AAC-камер (экономим CPU) илиpreset-record-generic-audio-aac
для других камер (конвертируем в AAC для эффективного хранения).
А что насчет видеокодеков и перекодирования?
Go2rtc, конечно, умеет декодировать и перекодировать видео (это называется транскодированием) в разные форматы. Но, при использовании Frigate, как правило, для Live View в этом нет нужды.
- MSE и WebRTC (основные технологии Live View Frigate) отлично поддерживают нативный H.264. MSE также умеет работать с H.265 (хотя тут могут быть ограничения в некоторых браузерах или операционных системах).
- Главная фишка go2rtc как ретранслятора (restreamer) в том, чтобы избегать перекодирования видео, если это возможно. Это помогает минимизировать нагрузку на процессор сервера и сохранить исходное качество видео. Он просто "перепаковывает" видео и аудио в нужные "контейнеры" или протоколы (например, из RTSP в WebRTC/MSE).
- Когда перекодирование видео может пригодиться? Только в очень редких случаях. Например, если ваша камера выдает видео в каком-то очень старом или экзотическом кодеке, который MSE/WebRTC вообще не понимают, например, MPEG-2 Video. Или если у вас много камер H.265, а ваши устройства (например, старые браузеры) не могут их декодировать. В таких ситуациях можно настроить go2rtc на транскодирование H.265 в H.264, но будьте готовы, что это очень сильно нагрузит ваш процессор, и тут без аппаратного ускорения (
hwaccel_args
) не обойтись!
Кратко про аппаратное ускорение preset-rk-h264
и preset-rk-h265
для Orange Pi 5 Plus:
Orange Pi 5 Plus оснащен процессором Rockchip (RK3588S). Пресеты preset-rk-h264
и preset-rk-h265
в Frigate позволяют использовать специализированные аппаратные блоки (VPU) внутри чипа Rockchip для декодирования видео H.264 и H.265. Это значительно снижает нагрузку на CPU, освобождая его для детекции объектов, и делает систему плавнее и эффективнее.
Главные преимущества встроенного go2rtc = еще раз.
- Автоматическая настройка и бесшовная интеграция: Встроенный go2rtc сам прекрасно настраивается для работы с Frigate. Никаких лишних телодвижений, просто прописываем в конфиге указанные выше параметры.
- Крутое качество и никаких задержек: С WebRTC и MSE можно получить невероятно четкую картинку, высокую частоту кадров и минимальную задержку. Видео станет плавным, детализированным, а записи без притормаживания. Я даже удивился, у меня же камеры не по кабелю, а по воздуху.
- Камеры вздохнут с облегчением: Go2rtc — это как личный менеджер для ваших камер. Он берет на себя всю нагрузку, устанавливая одно соединение, и камеры работают стабильнее и быстрее. Это особенно важно для тех, у кого камеры не самые мощные.
- Надежность и никаких конфликтов: Забудьте о проблемах с портами! Встроенное решение работает как часы, делая вашу систему надежной и простой в использовании. А еще, запись через go2rtc становится более стабильной и плавной, потому что он умеет справляться с прерываниями и восстанавливать поток. Go2rtc улучшает запись, обеспечивая более стабильный и непрерывный поток, что минимизирует пропуски кадров и повышает надежность архива.
Способ 1 Поддержать автора
Способ 2 https://donate.stream/yoomoney410013774736621
или через криптокошелёк (Только USDT) TCHekdJZFndXpDrHZGuTmqFNcqhWBTTzPr
Связаться со мной. (Консультации, проектирование и обучение)
Новый подход к электрике и дизайну помещений. Некоторые провода уже не нужно тянуть, какие-то решения можно принять после ремонта. Перенести выключатель, запустить кондиционер с телефона - возможно автоматизировать любую рутину.
Мой телеграм канал, там все быстрее обновляется телеграм.
Сайт smart4home.ru и альтернативный Умный дом на любом этапе
Соц сети: RuTube канал Удобный дом / You Tube канал Удобный дом Яндекс Дзен: Удобный дом / InGram
Платформы специалистов: Авито / Профи.ру / Яндекс Услуги https://uslugi.yandex.ru/profile/EgorSmirnov-2294380?from=telek