Перезагрузился у меня как-то сервер, где живут 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, откуда брать видеопотоки с ваших камер. !!! Отступы в дзене неправильные, вот код https://teletype.in/@godisblind/iVwn8kUXUUG
Шаг 2: Настраиваем секцию cameras для каждой камеры
После того как go2rtc знает, откуда брать потоки, нужно сказать Frigate, чтобы он подключался к go2rtc, а не напрямую к камере.
Шаг 3: Настраиваем аудиокодеки для просмотра и записи
Аудио — это отдельная, но очень важная тема. Разные технологии просмотра (MSE, WebRTC) имеют свои требования к аудиокодекам. Пришлось повозиться со своим запарком камер, у меня они разные и удалось отловить правильные настройки
Перед настройкой кодеков нужно обязательно помнить как работает код во frigate - есть глобальный уровень и локальный. Когда все камеры работали без уточнения через go2rtc у меня был на глобальном уровне:
Когда начал настраивать локально для каждой камеры - у некоторых при загрузке “отваливались” кнопки включения звука. Поэтому нужно закомментировать или удалить на глобальном и ставить только на локальном (в настройках камеры). Вообще, я решил что буду со звуком точно делать на локальном, так как я уже один раз словил ошибку подключив 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