Impossible de faire fonctionner (correctement) une caméra avec go2rtc / WebRTC / ngrok

Bonjour à tous et à toutes.

Je tente désespérément de faire fonctionner ma caméra HIKVision correctement.
Elle fonctionne mais elle fonctionne mal.
J’ai utilisé l’intégration OnVIF pour ma caméra HIKVision.
Et j’ai aussi tenté l’intégration générique.

J’ai regardé les tutos :

J’ai donc suivi ces tutos. J’ai ajouté ma caméra dans une carte WebRTC Caméra et j’ai ajouté les boutons OVIF (PTZ + Zoom).

Voici le code :

type: custom:webrtc-camera
url: camera.hikvision_ds_2de2a404iw_de3_mainstream
title: null
poster: https://home-assistant.io/images/cast/splash.png
muted: true
background: true
mode: webrtc,mse,mp4,mjpeg
camera_view: live
ui: true
ptz:
  service: onvif.ptz
  data_left:
    entity_id: camera.hikvision_ds_2de2a404iw_de3_mainstream
    pan: LEFT
    speed: 1
    distance: 0.3
    move_mode: ContinuousMove
  data_right:
    entity_id: camera.hikvision_ds_2de2a404iw_de3_mainstream
    pan: RIGHT
    speed: 1
    distance: 0.3
    move_mode: ContinuousMove
  data_up:
    entity_id: camera.hikvision_ds_2de2a404iw_de3_mainstream
    tilt: UP
    speed: 1
    distance: 0.3
    move_mode: ContinuousMove
  data_down:
    entity_id: camera.hikvision_ds_2de2a404iw_de3_mainstream
    tilt: DOWN
    speed: 1
    distance: 0.3
    move_mode: ContinuousMove
  data_zoom_in:
    entity_id: camera.hikvision_ds_2de2a404iw_de3_mainstream
    zoom: ZOOM_IN
    move_mode: ContinuousMove
  data_zoom_out:
    entity_id: camera.hikvision_ds_2de2a404iw_de3_mainstream
    zoom: ZOOM_OUT
    move_mode: ContinuousMove

Lorsque je charge la caméra, ça prend 5 secondes puis le flux arrive en direct, il est bon.
Je regarde dans ngrok et j’ai bien un tunnel.

Bon, on peut se dire : ça marche.

Mais en fait, je pense que je ne passe pas en RTSP. En effet, dans cette carte, en haut à droite il indique le protocol et celui-ci indique MSE.
De plus au bout de quelques minutes le flux se fige.

Un truc à faire en plus ?

Est-ce que ça a un lien avec ce sujet ? Mse: streams: wrong response on DESCRIBE / can't get url for camera.xx - #3 by EmpireHome - Configuration - Home Assistant Community

Bon, en fait il ne faut presque rien mettre dans go2rtc.
Le problème vient du fait que la caméra DOIT ÊTRE en H264 et pas H265.

2 « J'aime »

Bon, j’ai ajouté ngrok à frigate qui est sur une autre machine (Docker). Résultat, le flux vidéo est repassé en MSE au lieu de RTC.
J’ai supprimé le ngrok de frigate.
D’ailleurs quel est l’intéret de ngrok et go2rtc de frigate ?

J’ai redémarré frigate, puis j’ai fais un stop dans l’agent ngrok.
J’ai tout redémarré…

Résultat, plus de flux du tout !!

C’est quoi la démarche pour comprendre ce qui ne fonctionne pas ?
Ça tombe facilement en panne tout ça !

Sous go2rtc quand je clique sur stream, j’ai bien un flux vidéo.

J’ai tout désinstallé / Réinstallé… Rien ne fonctionne …
J’ai tout de même compris des trucs.

go2rtc permet de convertir le flux rtsp en flux RTC.
ngrok permet la création d’un tunnel pour visualiser les flux.
RTSPToWebRTC permet en fait (si j’ai tout compris) de « remplir / découvrir » les flux caméra en enrichir go2rtc automatiquement.
En fait si on laisse la configuration de go2rtc vide, des flux apparaissent dedans alors que l’on a rien entré. Je pense que c’est grâce à RTSPToWebRTC.
Et lorsqu’il n’ a aucun flux sur go2rtc, c’est ça qui merde.

Dans la configuration de RTSPToWebRTC il a :
stun.l.google.com:19302
Je ne sais pas à quoi ça sert, je crois que c’est pour ngrok ?
Et sa conf (je ne sais plus où ça se met, peut-être ajouter une entrée mais ça ne se fait qu’une seule fois) c’est http://localhost:1981 qui est l’accès à go2rtc. D’ailleurs de l’extérieur vous pouvez tenter http://<@ip de la machine qui contient go2rtc>:1981 et vous tomberez sur l’IHM minimaliste de go2rtc.

Et ensuite l’intégration WebRTC Camera + la carte custom:webrtc-camera qui permettent de lire le flux RTC.

C’est en cliquant sur les 2 flus de ma caméra (picture-entity) que ma configuration go2rtc s’est remplie à nouveau et que tout s’est remis en marche !

Du coup je me demande si je ne pourrais pas déplacer go2rtc vers frigate (qui tourne sur une autre machine NUC + Google Coral), il faudrait ouvrir le port 1981 du docker frigate.
Et pour en faire quoi de ces flux RTC ?

Bref là ça remarche mais je ne comprend pas encore tout.

Salut,

go2trc et autres machins du genre, c’est destiné à 3 choses :

  • jouer le role de relai pour les caméras
  • éventuellement, transformer les formats vidéos dans un autre plus commun
  • rendre la config de frigate plus efficace/simple, tu ne connais que l’intermédiaire, tu mets de coté les variations d’url, et de mot de passe.

Donc quand tu dis que tu coupes ngrok et que ça ne fonctionne plus, je dirais que c’est parfaitement logique. Pas d’intermédiaire pour mettre le flux à disposition, pas de flux. Sauf évidement à reconfigurer frigate pour accéder à la caméra en direct

Merci pour ta réponse.

Le truc c’est que Frigate est souvent mis sur la même machine que HA.
Hors, là ce n’est pas le cas, Frigate est installé au sein d’un Docker sur un mini PC (Ryzen 7) plus rapide que là où est installé mon HA (sur un Synology DS1815+).
Le Ryzen 7 a certaines instruction CPU manquant sur le Syno utilisées par Frigate.
Et visiblement passer du Syno → VM → Google Coral n’est pas une bonne solution pérenne.

Ma caméra est connue de HA par l’intégration OnVIF, on peut déplacer la caméra, zoomer, allumer l’IR, etc.
Or la caméra est connue de HA sous :
camera.hikvision_ds_2de2a404iw_de3_mainstream
camera.hikvision_ds_2de2a404iw_de3_substream

Et j’ai 2 cartes (au final j’en aurais plus qu’une) :
type: picture-entity / entity: camera.hikvision_ds_2de2a404iw_de3_mainstream
type : custom:webrtc-camera / entity: camera.hikvision_ds_2de2a404iw_de3_mainstream

Sur celle picture-entity je n’ai qu’une image toutes les 10 secondes.
Sur celle custom:webrtc-camera j’ai un flux qui met quelques secondes à s’afficher et qui est ensuite stable et en direct.

Sur Frigate, j’ai :

version: 0.14

mqtt:
  enabled: true
  host: 192.168.0.52
  user: yyyyy
  password: xxxxxxxxx
  port: 1883

cameras:
  camera_jardin:
    ffmpeg:
      inputs:
        - path: rtsp://login;pass@192.168.0.56:554/Streaming/Channels/101
          input_args: preset-rtsp-restream
          roles:
            - record
        - path: rtsp://login;pass@192.168.0.56:554/Streaming/Channels/102
          input_args: preset-rtsp-restream
          roles:
            - detect
    detect:
      enabled: true
      width: 704  # largeur de l'image du flux secondaire (en pixels)
      height: 576 # hauteur de l'image du flux secondaire (en pixels)

detectors:
  coral:
    type: edgetpu
    device: usb

record:
  enabled: true
  #retain:
  #  days: 30
  events:
    retain:
      default: 30
      mode: active_objects
    pre_capture: 5
    post_capture: 8
snapshots:
  enabled: true

objects:
  track:
    - person
    - car
    - cat
    - dog

# Désactiver le certificat pour le reverse proxy
tls:
  enabled: false

#go2rtc:
#  webrtc:
#    listen: :8555   # external TCP/UDP port
#    candidates:
#      - stun:8555
#
#  ngrok:
#    command: ngrok tcp 8555 --authtoken <montoken>

Via Frigate proxy, ma caméra est connu comme camera_jardin dans HA et pas comme camera.hikvision_ds_2de2a404iw_de3_mainstream.

Du coup j’ai 2 caméras pour une seule.
Si je déplace go2rtc dans Frigate, je pense qu’il faut l’arrêter dans HA et que faire ?
Donner à RTSPToWebRTC le go2rtc de frigate ? (et ouvrir le port 1984 sur le docker frigate) ?

Et comment ma caméra sera-t-elle connue sous Frigate ?
Au lieu de passer rtsp://login;pass@192.168.0.56:554/Streaming/Channels/101 je pourrais passer camera.hikvision_ds_2de2a404iw_de3_mainstream ?
Du coup des trucs à changer sur input_args ?

Bref, plein de questions…

C’est bien plus simple que ça dans la réalité.
Ce sont des services (docker) qui communiquent entre eux, donc l’emplacement physique c’est une notion que les services ne connaissent pas . ça bavarde d’IP à IP. Si le réseau fonctionne, c’est suffisant

ça c’est une contrainte purement technique. Donc ça détermine ce qu’il est bon de faire (ou mieux de faire), c’est tout.

Logique aussi … 2 intégrations distinctes qui ne se connaissent pas et n’interagissent pas ensemble donc 2 entités.
Il se trouve que les 2 entités sont du même type, mais ça pourrait presque ne pas être le cas.
Par exemple on pourrait tout à fait avoir dans HA des volets qui sont vu à la fois comme des volets (logiques) mais dont on retrouve aussi les entités de type switch (les interrupteurs physiques)…
Tuya cloud, local tuya c’est un autre exemple, ça pilote les mêmes appareils, mais par 2 moyens différents, donc 2 fois les entités

Vois ça comme une chaine :
camera <=> go2rtc <=> frigate

Si tu bouges go2rtc, il faut adapter la chaine.

oui mais pas que :
A chaque étapes de la chaine, tu as potentiellement une adresse de flux différente (l’accès la caméra direct, ce n’est la même que l’accés au relai go2rtc, ni même que l’accès au flux Frigate)
Même si au final tu as la même image. Pour comparer, je dirais que si je t’appelle sur ton téléphone fixe ou sur ton portable perso, ou sur ton portable pro, je tombe sur toi dans tous les cas…
Et les flux étant potentiellement avec des formats (protocole, codec ou taille) différents, il faut forcément adapté. Si on reprends l’exemple des téléphones, c’est pas le même numéro, pas la même couverture réseau, ni la même qualité.

Salut et merci pour tes réponses.

Je suis d’accord avec ce que tu dis. Mais il y a quand même des trucs que je ne comprend pas.
(les - remplacent les espaces pour aligner ce que je veux (pas d’espace insécable).
(les | séparent les machines différentes).

Côté flux, si je mets go2rtc dans frigate (et je le retire de HA) :

| camera | <=> | go2rtc ↔ frigate | <=> --------------HA ----------- |
– camera ----------- NUC Ryzen 7 ---------- Synology DS1815+

go2rtc <=> | — HA RTSPToWebRTC – |
–NUC ------------- Synology DS1815+

Du coup, les flux dans Frigate ? C’est quoi ?
Je ne suis pas certain du tout que frigate connaissent camera.hikvision_ds_2de2a404iw_de3_mainstream

En fait, qu’apporte go2rtc dans Frigate ? Avoir les flux caméra RTC dans HA via le nom donné dans la conf de Frigate ? (ici camera_jardin dans ma conf actuelle).
Là, actuellement Frigate lit les flux RTSP direct de la caméra basse définition et HD).
Et HA lit les flux HD via go2rtc.

D’ailleurs c’est quoi la différence entre RTC et MSE ?
Hier, dans HA (carte custom:webrtc-camera) j’avais un flux RTC et ce matin c’est un flux MSE, sans rien changer… Pourquoi ça change tout seul ?

La source des ces flux dans frigate ce sera go2rtc à mon avis (dans ou hors HA c’est pas important)

Frigate crée des entités dans HA… Et il ne connait aucune des entités HA existantes.
C’est HA qui se sert de frigate et pas l’inverse
La caméras de frigate vue dans HA sera camera.camera_jardin, c’est ce que tu as déclaré dans la config frigate

Même pas… go2rtc propose des flux, c’est tout ! Ensuite Frigate les utilisent (ou pas) et HA les utilisent (ou pas). Je te le répéte, go2rtc c’est juste pour centraliser les différentes caméras et éventuellement convertir les flux. Rien d’autre

C’est pas gênant. Et de mon expérience, c’est même plus fluide de lire les flux en direct, que de le lire à traves Frigate.

2 protocoles différents

le changement ne se fait pas seul, c’est certain. Un restart avec prise en compte d’une nouvelle conf par exemple, ça explique la chose.
Dans l’absolue, c’est pas important non plus : pour faire Paris-Marseille, tu peux avoir une voiture diesel ou essence… C’est pas ce qui t’empêche/te force de voyager

1 « J'aime »