Enregistrer un flux avec une connexion intermitente

Bonjour,
je voudrais enregistrer un flux mais la connexion que j’ai dans la journée n’est pas sure (coupure, baisse de débit, …) et mencoder s’arrête lorsque la connexion ne mache plus. Je voudrais savoir s’il existait une solution pour dire à mencoder d’attendre que la connexion reprenne ou alors que je puisse le relancer manuellement mais qu’il reprenne là où il s’était arrêter.

En fait, je voudrais que mencoder ait exactement le même comportement que wget -c.

Quelqu’un sait comment procéder ?

P-S: j’ai essayer d’augmenter le cache (mencoder -cache [bcp]) sans résultat

[quote=“sidell”]Bonjour,
je voudrais enregistrer un flux mais la connexion que j’ai dans la journée n’est pas sure (coupure, baisse de débit, …)[/quote]
:smt006 sidell.
Ne vaudrait-il pas mieux chercher, tout d’abord, à trouver l’origine des dysfonctionnements de ta connexion ? car, si tu en trouve la cause, tu y gagneras non ? …
(oui, je sais, ce n’est pas la question abordée dans ton fil … :wink:)

C’est un réseau wifi collectif.
Trop de personnes qui se connecte en même temps = coupure de connexion, trop de personnes qui télécharge de gros fichiers =coupure de connexion.
Bref je n’ai aucune influence sur ce réseau.

:smt006

effectivement, la solution s’éloigne … ( :bulb: tu pourrais améliorer la réception avec une antenne directive artisanale type “ricoré” …)

Tu peux t’inspirer du script que j’ai fait pour cela pour adapter fricorder aux connections Free classiques c’est à dire ayant régulièrement des coupures de flux:

[code]#!/bin/sh

François Boisson 7 Janvier 2006

Enregistrement via VLC avec reprise en cas

de rupture de flux

PID_FILE=$3
MODE=$5
OUTFILE=$2
STREAM=$4
TAILLE=0
DELAI=2
DELAIDEBUT=15

echo $* >> /var/log/freecorder.log

on crée le fichier par un touch: ça évite

une erreur sur le ls après

touch “$OUTFILE”

on lance la session

case $MODE in
ogm)
EXTENSION=".ogm"
vlc “$STREAM” --filter deinterlace:bob --sout “#transcode{vcodec=mp4v,vb=512,scale=0.75,acodec=vorb,ab=64,channels=2}:std{access=file,mux=ogg,url=$OUTFILE}” -I dummy &
PID_VLC=$!
;;
*)
EXTENSION=".mpg"
vlc “$STREAM” --filter deinterlace:bob --sout “#std{access=file,mux=ts,url=$OUTFILE}” -I dummy &
PID_VLC=$!
esac
date >> /var/log/freecorder.log
echo "PID: " $PID_VLC >> /var/log/freecorder.log
echo $PID_VLC > “$PID_FILE-vlc.pid”

TEMPS=date +"%s"
BUTEE=$[$TEMPS+$1]
echo “deb:” $TEMPS >> /var/log/freecorder.log
echo “fin:” $BUTEE >> /var/log/freecorder.log
PBM=1
sleep $DELAIDEBUT
while [ date +"%s" -le $BUTEE ] ; do

/bin/true

TAILLEP=ls -l "$OUTFILE" | cut -d ' ' -f 6
if [ $TAILLEP -eq $TAILLE ] ; then
kill $PID_VLC
wait $PID_VLC
TAILLE=0
mv “$OUTFILE” "$OUTFILE-$PBM$EXTENSION"
echo “mv $OUTFILE $OUTFILE-$PBM$EXTENSION” >> /var/log/freecorder.log
PBM=$[$PBM+1]
echo -n “-” >> /var/log/freecorder.log
echo $PID_VLC >> /var/log/freecorder.log
touch "$OUTFILE"
case $MODE in
ogm)
vlc $STREAM --filter deinterlace:bob --sout “#transcode{vcodec=mp4v,vb=512,scale=0.75,acodec=vorb,ab=64,channels=2}:std{access=file,mux=ogg,url=$OUTFILE}” -I dummy &

vlc $STREAM --filter deinterlace:bob --sout “#transcode{vcodec=mp1v,vb=512,scale=0.75,acodec=mpga,ab=96,channels=2}:std{access=file,mux=ps,url=$OUTFILE}” -I dummy &

        PID_VLC=$!
        ;;
        *)
        vlc $STREAM --filter deinterlace:bob --sout "#std{access=file,mux=ts,url=$OUTFILE}" -I dummy &
        PID_VLC=$!
    esac
    date >>  /var/log/freecorder.log
    echo -n "+" >> /var/log/freecorder.log
    echo $PID_VLC >> /var/log/freecorder.log
    echo $PID_VLC > "$PID_FILE-vlc.pid"
    sleep $DELAIDEBUT
else
    TAILLE=$TAILLEP
    ACTUEL=0
fi
sleep $DELAI

done
kill $PID_VLC
wait $PID_VLC
rm "$PID_FILE-vlc.pid"
mv $OUTFILE $OUTFILE-$PBM$EXTENSION
echo "FIN: " date >> /var/log/freecorder.log
[/code]

En gros, tu as vlc lancé en tache de fond, son PID conservé, et un processus qui teste la taille du fichier fabriqué. Si au bout d’un délai fixé, la taille n’a pas changée, le flux est coupé, vlc est alors tué, le nom du fichier incrémenté et un nouveau processus est lancé, et ce jusqu’à ce que la durée d’enregistrement soit atteinte. Dans la pratique, ça ne me coupe que quelque 10s de films, guère plus et ça s’avère très efficace. Ce script est facile à adapter à ton cas précis, la seule chose est d’être sur que le fichier obtenu après un kill de mencoder soit lisible, ça n’est pas toujours le cas (d’où l’usage de vlc ici).

merci beaucoup pour ton script, ça ne me dérange pas du tout d’utiliser vlc, du temps que ça marche.

Par contre, je n’y connais rien aux script et ne comprend donc pas grand chose au tien.

pour le lancer, il faut que je fasse ./ton_script monflux ?

Comment spécifier les variables que tu indiques au début de ton script (outfile, …)?

exemple
[quote]/usr/local/freecorder/sleep.sh 60 /home/francois/FINI/[France_2][2008.10.19_09:10][1] /var/run/freecorder/[France_2][2008.10.19_09:10][1].pid "rtsp://mafreebox.freebox.fr/fbxtv_pub/stream?namespace=1&service=201&flavour=sd" direct[/quote]

Le fichier obtenu est  [France_2][2008.10.19_09:10][1]-1.mpg

Tu peux simplifier le script en virant les logs et l'utilisation du fichier PID si tu veux.

exemple

Le fichier obtenu est [France_2][2008.10.19_09:10][1]-1.mpg

Tu peux simplifier le script en virant les logs et l’utilisation du fichier PID si tu veux.