IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Contrôle de connexion à un serveur via script Bash (Curl ou RTMPDUMP)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut Contrôle de connexion à un serveur via script Bash (Curl ou RTMPDUMP)
    Bonsoir à tous,

    Je suis désolé de poster ici mais je n'ai pas trouvé un autre forum pouvant correspondre à mon problème.

    J'ai installé sur Ubuntu 18.04 un serveur Nginx avec un module serveur RTMP qui fonctionne parfaitement. Je diffuse de la vidéo sur ce serveur et mes 2 autres clients se connecte via VLC sans problème.

    Je souhaiterais faire un test régulier via un script batch pour couper VLC et lancer la lecture d'une video en local sur le client en cas de serveur indisponible.

    J'ai effectué des recherches et ai trouvé différents scripts que j'ai essayé de reproduire sans succès.

    Voici le premier script que j'ai réalisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if [[ `curl --connect-timeout 3 --output /dev/null --silent --head --fail rtmp://127.0.0.1/mytv/test 2>&1` ]]
    then
      echo "failing!"
    else
      echo "working!"
    fi
    Le script me retourne systématiquement "Working!" même lorsque je stoppe le démon.

    J'ai testé la commande en direct dans le terminal mais elle ne me retourne rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root$ curl --connect-timeout 3 --output /dev/null --silent --head --fail rtmp://127.0.0.1/mytv/test 2>&1
    J'ai testé en arrêtant le serveur et la diffusion en streaming mais pareil, rien ne se passe lorsque je test dans le terminal et le script me mets toujours "Working!" alors que la diffusion est stoppé.

    J'ai cherché à faire plusieurs modification sur la commande mais j'ai toujours les mêmes retours.

    J'ai cherché sur le manuel de curl (Man CURL). Il y a de nombreux commutateurs disponibles et je suis un peu perdu.

    De ce fait, je me suis tourné vers rtmpdump.

    Streaming stoppé, voici la commande que j'ai essayé dans terminal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    root$ rtmpdump -v -m6 -B6 -r rtmp://127.0.0.1/mytv/test -o /tmp/test.flv
     
    RTMPDump v2.4
    (c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
    Connecting ...
    INFO: Connected...
    Starting Live Stream
    For duration: 6.000 sec
    ERROR: RTMP_ReadPacket, failed to read RTMP packet header
    0.000 kB / 0.00 sec
    Download may be incomplete (downloaded about 0.00%), try resuming
    La commande arrive à se connecter au serveur mais comme il n'y a aucune diffusion, j'ai en retour une erreur. Jusque là, c'est ce que j'attendais.

    Cette fois ci, voici le retour lorsque le streaming est en live :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    $ rtmpdump -v -m6 -B6 -r rtmp://127.0.0.1/mytv/test -o /tmp/test.flv
     
    RTMPDump v2.4
    (c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
    Connecting ...
    INFO: Connected...
    Starting Live Stream
    For duration: 6.000 sec
    INFO: Metadata:
    INFO:   Server                NGINX RTMP (github.com/arut/nginx-rtmp-module)
    INFO:   width                 960.00
    INFO:   height                530.00
    INFO:   displayWidth          960.00
    INFO:   displayHeight         530.00
    INFO:   duration              0.00
    INFO:   framerate             30.00
    INFO:   fps                   30.00
    INFO:   videodatarate         1800.00
    INFO:   videocodecid          0.00
    INFO:   audiodatarate         160.00
    INFO:   audiocodecid          0.00
    3333.187 kB / 21.73 sec[/I]
     
    Interruption de la commande avec CTRL+C
     
    [I]Caught signal: 2, cleaning up, just a second...
    ERROR: RTMP_ReadPacket, failed to read RTMP packet header
    3333.187 kB / 21.73 sec
    Download may be incomplete (downloaded about 0.00%), try resuming
    Tout semble fonctionner sauf que je demande que l'enregistrement s'arrête au bout de 6 secondes mais passé ce délai, la commande s'exécute toujours.

    Je suis preneur de vos conseils où information qui me permettrait de sortir de l'impasse. Mon niveau en architecture linux et proche du néant mais j'apprends de jour en jour et j'ai vraiment besoin de réaliser ce test. Je suis prêt à me tourner vers python ou un autre langage si besoin mais je trouvais que batch est le plus simple et logique pour ce que je souhaite faire.

    Merci par avance de votre aide.

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par Trebor Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if [[ `curl --connect-timeout 3 --output /dev/null --silent --head --fail rtmp://127.0.0.1/mytv/test 2>&1` ]]
    then
      echo "failing!"
    else
      echo "working!"
    fi
    Le script me retourne systématiquement "Working!" même lorsque je stoppe le démon.

    J'ai testé la commande en direct dans le terminal mais elle ne me retourne rien.
    c'est normal que la commande ne renvoie rien en sortie (standard ou d'erreur) étant donné --output /dev/null, --silent, --fail et le 2>&1 terminal

    en revanche la commande retourne une valeur que tu peux tester via la variable $? en bash

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ curl --connect-timeout 3 --output /dev/null --silent --head --fail rtmp://127.0.0.1/mytv/test
    $ echo $?
    7   # PAS OK
    $ curl --connect-timeout 3 --output /dev/null --silent --head --fail http://127.0.0.1/
    $ echo $?
    0   # OK
    quand la commande se termine sans erreur elle retourne 0 par convention

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if [[ `curl --connect-timeout 3 --output /dev/null --silent --head --fail rtmp://127.0.0.1/mytv/test 2>&1` ]]
    then
      echo "failing!"
    else
      echo "working!"
    fi
    Dit plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if curl --connect-timeout 3 --output /dev/null --silent --head --fail rtmp://127.0.0.1/mytv/test 2>&1
    then
      echo "working!"
    else
      echo "failing!"
    fi
    Il ne faut pas confondre le canal d'erreur (&2) et la valeur de retour ($?).

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses. Vos deux solutions fonctionnent et me permettent de tester le serveur RTMP.

    Peut-être pourriez-vous m'aider avec rtmpdump car de ce fait, je ne teste que le serveur et pas le flux ce qui fait que si il n'y a pas de diffusion en cours, je ne serai pas avisé.

    Avec rtmpdump mon script fonctionne mais ne stop pas son exécution au bout des 6 secondes comme demandé.

    Je me tourne vers la page manuel de RTMPDump et ne constate rien d'anormal.

    Voici les différents tests effectués :

    STREAMING DEMARRE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root$ rtmpdump -v -m 3 -B 6 -r rtmp://127.0.0.1/mytv/test -o /tmp/test.flv
    rtmpdump se connecte au streaming et génére un fichier .flv dans le répertoire /tmp/. Le seul soucis, je luis demande d'interrompre l'enregistrement au bout de 6 secondes (-B 6) mais ce dernier ne s'interrompt pas.

    Je suis obligé d'interrompre le script manuellement avec CTRL+C.

    A ce moment, j'affiche la variable $? qui me retourne 127.

    STREAMING COUPE : la variable $? retourne 2.

    Je tiens une piste pour tester mon streaming mais je voudrais être sur que rtmpdump se coupe au bout des 6 secondes. Auriez-vous une piste pour m'aider ?

    Merci à vous.

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    quand je veux savoir si un serveur est joignable (plus précisément, si une machine est en écoute sur le port dédié à un service (hhtp, ssh...), j'utilise netcat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if nc -w 5 -z "$serveur" "$port"; then echo "ok :)"; else; echo "ko :("; fi
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Bonjour N_BaH,

    Merci pour cette réponse. Ici, je souhaite aller plus loin et plus précisément vérifier si il y a de la diffusion en streaming. L'idée est de faire démarrer la vidéo en local lorsqu'il n'y a aucune diffusion.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion au MySQL et Insertion des données via script bash
    Par youssefcss dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 15/10/2018, 18h19
  2. Connexion SFTP et SSH via script Bash
    Par pcsystemd dans le forum Linux
    Réponses: 1
    Dernier message: 18/06/2009, 12h39
  3. Réponses: 8
    Dernier message: 06/02/2009, 17h29
  4. Injection de donnée MySQL via script bash
    Par loopback dans le forum Linux
    Réponses: 9
    Dernier message: 03/11/2007, 11h15
  5. Connexion à SQL SERVEUR via VPN
    Par freud dans le forum Bases de données
    Réponses: 6
    Dernier message: 29/09/2007, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo