Débugguer la trame rtsp dans jeedom

Bon… je me permets de relancer la communauté après avoir lu des centaines de messages sur ce forum et sur d’autres.

J’ai un problème d’accès au flux rtsp que ce soit à travers le plugin-camera ou plugin-jeedomconnect.

Ceux qui souhaitent m’aider pourront retrouver la trame de mes tâtonnements sur Caméra POE Annke H800 et sur Pas de son dans le widget camera?

En gros je dispose de 5 caméra ANNKE accessibles derrière un NVR ANNKE.

Sur VLC, aucun problème, j’accède au flux principal ou au flux secondaire (moins exigeant en bande passante) via l’instruction:

  • rtsp://#user#:#password#@#ip#:554/Streaming/channels/101 (flux principal de la 1ère caméra)
  • rtsp://#user#:#password#@#ip#:554/Streaming/channels/102 (flux secondaire de la 1ère caméra)

Voici les information de codec de mon flux (dans VLC):

Dans Jeedom maintenant:

  • avec le plugin-camera, nada… je ne récupère jamais le flux rtsp, ni en local, ni en distant, ni sur le flux principal, ni sur le flux secondaire, ni rien
  • avec le plugin-jeedomconnect, après avoir changé le mode d’authentification d’accès aux caméras (merci à @tomitomas !), je récupère le flux vidéo mais… pas de son ! jamais !

J’ai aussi pu changer les différents type d’encodage audio proposés par les caméras (expliqué ici) mais ça ne change rien non plus.

Question(s) donc:

  • Y’a-t-il un sauveur qui pourrait me dire: « mais c’est bien sûr… » et me donner la solution ?
  • Y’a-t-il à défaut un moyen d’examiner les erreurs d’interprétation sur la trame rtsp dans jeedom (les logs des fichiers de debug ne donnent pas grand chose à ce sujet).

D’avance, merci à tous,

Ton flux est en H265.

La librairie HLS utilisée par le plugin caméra ne permet de lire directement le H265.
Dans la beta du plugin camera, en cochant la case convertir en h264, le plugin encode la vidéo à la volée et permet d’avoir l’affichage ensuite.

sinon anke je crois que c’est la sous marque hik, sur la page web tu passe en H264

Merci @Flobul ,

C’est curieux, je n’ai pas cette option « Convertir en x264 le flux RTSP » que je trouve effectivement sur la doc.

Comment mettre la « beta » du plugin ?

Merci @anthopocket,

Effectivement ANNKE est une sous-marque de HIK.

Pour moi, l’option H264 est grisée et non disponible sur le NVR.

Au niveau des caméras, j’ai H265 ou MJPEG (en encore que pour la substream). C’est bien MJPEG ?

Sur market jeedom, dans ton profil, active « Activer l’accès aux plugins beta ».

Autre solution : MJPEG, c’est des images encodés (au lieu de demander à jeedom d’encoder le flux en images). Donc tu peux mettre le chemin de ce flux (à trouver) dans le plugin caméra sous « URL de snapshot ».

Merci @Flobul

J’avoue de ça me fait un peu peur… Je vais voir si je peux régler ça au niveau du flux des caméra à la source plutôt que d’activer ces bêtas…

Je galère déjà énormément avec Jeedom…

Si c’est bien ton NVR qui fournit ce flux MJPEG, autant l’utiliser pour encoder plutôt que de laisser jeedom faire.
Faut juste trouver l’endpoint. D"après la doc :

2. Get stream on Firefox or Chrome
HTTP commands is only available on Firefox or Chrome browser.
a) URL :
HTTP without Authentication
http://:/ISAPI/Streaming/channels/102/httpPreview
HTTP with Authentication
http://:@:/ISAPI/Streaming/channels/102/httpPreview
Snapshot using HTTP URL
http://:/ISAPI/Streaming/channels/1/picture

Décoche « Stream du flux RTSP », mets l’URL dans « URL de snapshot »

Merci @Flobul

Je dispose déjà des snapshots (pour que cela fonctionne, je dois très curieusement indiquer cette URL de snapshot dans le champ « URL de flux »)

L’URL est https://#username#:#password#@#ip#/ISAPI/Streaming/channels/102 (pour l’image dégradée, /101 pour l’image de meilleure qualité).

Mais je comprends que ceci ne me donnera pas accès au son. Il faut donc absolument que je récupère le stream. Je vais à nouveau voir côté ANNKE comment encore en H264 car ton option bêta m’effraie.

Merci

Bon…je reviens sur ce sujet qui me hante.

  • Je ne veux pas activer le beta du plugin plugin-camera comme proposé par @Flobul car je suis trop incompétent pour prendre le risque de casser le peu qui marche
  • 4 de mes caméras n’autorisent pas la diffusion en H264 mais en H265 seulement
  • 1 caméra peut diffuser en H264.

On vérifie le bon passage en H264 dans VLC

Pour celle-ci le passage en H264 permet effectivement la diffusion via RTSP dans le plugin-camera. C’est la première fois que cela marche mais TOUJOURS sans le son… quel que soit les encodage audio utilisés. D’ailleurs l’icône de son est systématiquement barré.

Cela présage vraiment mal de l’interfaçage d’une vidéophone avec Jeedom…

Si quelqu’un a d’autres idées…

Bonne fin de week-end à tous

Je pense que l’audio en PCM MU-LAW n’est pas bien lu par la lib hls.

Il faudrait tester différent encodage de l’audio via le script ffmpeg inclus dans le plugin caméra.
Ou alors modifier l’encode audio directement dans la configuration de la caméra.

bonjour @Flobul et merci de ta réaction.

ça j’ai testé, ça ne marche avec aucun des encodages proposés.

ça… je n’ai aucune idée de la façon de procéder. J’imagine qu’il faut taper directement dans le code ?

dans 3rdparty/rtsp-to-hls-copy.sh

Merci @Flobul ,

Ce que tu préconises est conforme à la « solution » donnée ici par @frixo

J’ai regardé le bout de code correspondant et les modifs recommandées par frixo semble avoir été déjà implémentée:

ffmpeg  -rtsp_transport tcp -i "$SOURCE" \
-f hls \
-vsync 0 -copyts -vcodec copy -acodec copy \
-tune zerolatency \
-movflags frag_keyframe+empty_moov \
-hls_flags delete_segments+append_list \
-hls_init_time 1 \
-hls_time $HLS_TIME \
-hls_list_size $HLS_LIST_SIZE \
-hls_base_url "segments/" \
-hls_segment_filename ${BASEDIR}"/../data/segments/$NAME-%d.ts" \
${BASEDIR}"/../data/$NAME.m3u8"

Je ne suis pas du tout spécialiste mais je ne vois rien dans ces lignes de pathologique. En particulier le modificateur -acodec copy me sembler forcer l’utilisation du codec du flux natif (cas PCM MU-LAW) qui n’est pas bien lu selon toi.

Que dois-je faire selon toi ? Changer par -acodec mp3 ou -acodec aac ? Je n’ai aucune idée de ce qui pourrait le mieux fonctionner avec jeedom.

Merci

Mets une librairie audio decoder de cette liste pour tester : FFmpeg Codecs Documentation

Bon… alors grande nouvelle… j’ai modifié le fichier plugins/camera/3rdparty/rtsp-to-hls-copy.sh comme indiqué par @Flobul et … il semble que j’aie le son ! Alléluïa !!

Comme je teste en distant… je n’ai plus la vidéo à cause de l’importante bande passante requise mais je retesterai en local dès que je le pourrai. Le cas échéant, je marquerai le problème comme résolu.

Ce que j’ai modifié: -acodec aac à la place de -acodec copy

Un grand merci !

Une question, cette modification effectuée dans le fichier ne sera-t-elle écrasée à chaque mise à jour du plugin ?

Il faudra ajouter un script .sh comme je l’ai fait pour reencoder le h265

Désolé d’insister @flobul mais avez-vous un lien où il est expliqué comme faire ça. J’erre dans la doc, dans les forum et même sur votre site web mais nul part je n’ai trouvé où surcharger un plugin par l’ajout d’un script.

J’ai bien trouvé cela « Option de réencodage en H.264 » mais je ne sais qu’en faire…

Vraiment désolé, jeedom est une terrifiante nébuleuse pour moi…

Ah non, ce n’est pas dans la doc.

Envoie-moi le script qui fonctionne chez toi ici, je soumettrai un PR sur le git jeedom

Bonjour @flobul et merci encore de ton aide.

Pour que ça marche, je dois altérer comme suit le fichier 3rdparty/rtsp-to-hls-copy.sh du plugin camera

#!/bin/sh

#[ $# -eq 0 ] && { echo "Usage: $0 rtsp://... <name>"; exit 1; }

BASEDIR=$(dirname "$0")
SOURCE="$1"
DEST="$2"
NAME=${2:-cctv}
#ARCHIVE=${ARCHIVE:-archive}

HLS_TIME=${HLS_TIME:-5}
HLS_LIST_SIZE=${HLS_LIST_SIZE:-5}

ffmpeg  -rtsp_transport tcp -i "$SOURCE" \
-f hls \
-vsync 0 -copyts -vcodec h264 -acodec aac \
-tune zerolatency \
-movflags frag_keyframe+empty_moov \
-hls_flags delete_segments+append_list \
-hls_init_time 1 \
-hls_time $HLS_TIME \
-hls_list_size $HLS_LIST_SIZE \
-hls_base_url "segments/" \
-hls_segment_filename ${BASEDIR}"/../data/segments/$NAME-%d.ts" \
${BASEDIR}"/../data/$NAME.m3u8"

Ici je force et -vcodec h264 et -acodec aac car parfois quand je ne force que le codec audio, je n’ai plus l’image. Mais ce n’est pas l’essentiel et je pense que ce problème additionnel est plutôt lié à la grande gourmandise du flux en bande passante. C’est bien la modification du codec audio est est critique.

Encore une fois, mon objectif n’est pas nécessairement d’avoir un flux permanent à l’aide de ces caméras avec lesquels je fais des tests. C’est surtout de m’assurer que je pourrai ultérieurement piloter un visiophone avec jeedom. Sans le son… c’est compromis !