Boucle ping dans un batch pour détecter une déconnexion

Boucle ping dans un batch pour détecter une déconnexion - Shell/Batch - Programmation

Marsh Posté le 14-12-2009 à 14:31:45    

Bonjour à tous,
D'abord, je précise que je n'y connais rien en DOS donc soyez indulgents. :D  
J'essaie simplement d'améliorer un batch qui lance l'enregistrement de ma TV par ADSL avec le logiciel VLC.
Voici le script (très compliqué) :

Code :
  1. vlc rtp://@232.0.1.1:8200 :sout=#duplicate{dst=std{access=file,mux=ts,dst="E:\Enregistrements_tv\test.ts"}}


 
Mon problème c'est que l'enregistrement ne redémarre pas en cas de coupure de la connexion, même très courte, et comme les petites coupures sont légions chez moi, la plupart de mes enregistrements sont inutilisables.
Je me demandais s'il n'y avait pas moyen avec un simple test ping d'arrêter le logiciel dès que la connexion coupe, puis de le relancer de la même manière dès qu'elle se rétablit. (Il me semble qu'il faudrait d'ailleurs faire une autre batch en parallèle parce que celui-ci semble s'arrêter du fait que vlc est toujours en marche.)
J'ai vu qu'il y avait la commande "ping -t xxx.xxx.xxx.xxx" qui teste indéfiniment mais je ne sais pas comment la stopper dès qu'on obtient un résultat négatif pour lancer la suite.
Sinon, il y a peut-être tout simplement un petit utilitaire réseau qui pourrait lancer un programme en fonction d'un test de connexion, mais je n'en ai pas trouvé. :??:  
 
Merci d'avance.

Reply

Marsh Posté le 14-12-2009 à 14:31:45   

Reply

Marsh Posté le 14-12-2009 à 15:03:18    

Il y a par exemple VBS (en standard sur tous les PC depuis Win95), avec un petit script du genre:

Set objShell = WScript.CreateObject("WScript.Shell" )
Set objExecObject = objShell.Exec("cmd /c ping -n 3 -w 1000 232.0.1.1:8200" )
Do While Not objExecObject.StdOut.AtEndOfStream
    strText = objExecObject.StdOut.ReadLine()
    If Instr(strText, "Reply" ) > 0 Then
        Wscript.Echo "Reply received."
        objShell.Run("vlc rtp://@232.0.1.1:8200 :sout=#duplicate{dst=std{access=file,mux=ts,dst="E:\Enregistrements_tv\test.ts"}}" ),1,True
        Exit Do
    End If
Loop

Reply

Marsh Posté le 14-12-2009 à 15:18:36    

t'as pas plutôt une option coté vlc pour lui dire de raccrocher le flux? (ne serait ce que le tampon)

Reply

Marsh Posté le 15-12-2009 à 11:02:01    

Citation :

 Il y a par exemple VBS (en standard sur tous les PC depuis Win95), avec un petit script du genre:
 
Set objShell = WScript.CreateObject("WScript.Shell" )
Set objExecObject = objShell.Exec("cmd /c ping -n 3 -w 1000 232.0.1.1:8200" )
Do While Not objExecObject.StdOut.AtEndOfStream
    strText = objExecObject.StdOut.ReadLine()
    If Instr(strText, "Reply" ) > 0 Then
        Wscript.Echo "Reply received."
        objShell.Run("vlc rtp://@232.0.1.1:8200 :sout=#duplicate{dst=std{access=file,mux=ts,dst="E:\Enregistrements_tv\test.ts"}}" ),1,True
        Exit Do
    End If
Loop


 
Ca a l'air intéressant, mais j'ai un problème avec le ping : j'avais mis le .vbs dans mon dossier vlc et quand je lance un ping depuis ailleurs que c:\, il me fait une boucle que je suis obligé d'arrêter avec ctrl+c. Comme je n'ai pas réussi à faire une deuxième ligne dans la fonction objShell.Exec() pour changer de répertoire :sweat: , j'ai essayé de placer le .vbs à la racine de c:\ et là, il m'ouvre simplement l'invite de commande sans rien faire.  :??: (J'ai aussi échappé les " dans le objShell.Run mais pour l'instant, je n'en suis pas là...)
 

Citation :

t'as pas plutôt une option coté vlc pour lui dire de raccrocher le flux? (ne serait ce que le tampon)


Il semblerait que non... D'autres personnes ont posté à ce sujet sur les forum VLC et si j'ai bien compris le problème viendrait du fait que VLC ne détecte pas la rupture du flux, il reste planté là à rien faire. Mais bon, j'ai tout de même posté un message à ce sujet, on va bien voir.
Quand à la mémoire tampon, je ne sais pas très bien comment ça marche. Ca affecte une chaîne diffusée en continu ?


Message édité par ollvin le 15-12-2009 à 11:04:07
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed