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).