Interface web pour chaine de conversion freebox pour N900

The multimedia part of the two set-top boxes c...
Image via Wikipedia

Le billet Automatisation des enregistrements de la freebox pour n900 montrait comment on pouvait convertir automatiquement les enregistrements de la freebox et les transférer sur le terminal sans autre intervention humaine que celle de programmer les enregistrements.

La chaine qui va de l’enregistrement, au transfert sur le N900 en passant par le téléchargement sur le PC et la conversion peut durer plusieurs heures. Aussi le besoin de contrôler l’état du processus à distance amène à répéter les tâches de connexion en ssh, listing de répertoire, vérification de la présence de fichier .lock etc.

Ce billet se propose de mettre en place une interface web afin de controler le processus de conversion à distance. Pour cela nous allons écrire une application web en python. Se référer au billet précédent pour l’installation de mod_python, nous nous attacherons ici seulement à décrire l’interface web.

L’application se compose de page psp dont voici le point d’entrée. On affiche l’état de la Freebox, à savoir si un enregistrement est en cours ou non, le nombre d’enregistrements et l’espace occupé. La page montre également l’état du rapatriement, c’est-à-dire  les téléchargements des enregistrement. Enfin elle donne un état de l’étape de conversion.

capture d'écran de n900replay sur un ... n900

L’application donne aussi la liste des fichiers qui se trouvent sur la Freebox, la liste des fichiers rapatriés et enfin la liste des fichiers en file d’attente pour conversion ainsi que les fichiers convertis.

L’ensemble des sources se trouvent sur googlecode n900replay . On  y trouve les scripts de la chaîne de conversion ainsi que l’application web de gestion.

Automatisation de la conversion des enregistrements de la Freebox pour N900

Ce billet montre la chaine complète de conversion des enregistrements des chaines de la TNT par une Freebox afin d’être lus par le N900. Il s’appuie sur les articles précédents en y ajoutant l’automatisation de la récupération des fichiers. La chaine de conversion se compose des étapes suivantes:

  1. rapatriement des enregistrements sur le PC
  2. conversion des enregistrement en H264
  3. rapatriement des fichiers convertis sur le N900

Chacune des étapes sera automatisée et s’effectuera par étage c’est-à-dire qu’une étape devra être complète avant de passer à la suivante. La procédure pourra être interrompue à tout moment pour se poursuivre plus tard. L’ensemble de la procédure doit minimiser l’espace disque utilisé et les étapes doivent s’exécuter de manière concurrente pour le mieux (1 en même temps que 3 par ex)

Rapatriement des enregistrements sur le PC

L’accès à la freebox se fait en FTP. La méthode utilisée est celle du miroitage différentiel à l’aide de l’outil lftp. Lftp permet de miroiter un répertoire entier ce qui correspond à notre problématique. Pour cela nous utilisons la commande mirror de lftp. L’aspect différentiel ou incrémental nous permet de reprendre un rapatriement interrompu. C’est l’option -c de la commande mirror. Mais ce n’est pas suffisant. Pour minimiser l’espace disque, une fois le rapatriement fait, les fichiers sont déplacés vers le répertoire de travail de l’étape 2. Il ne faut alors pas que la prochaine exécution de l’étape 1 ramène de nouveau les fichiers déjà traités ( la suppression des enregistrements est volontairement exclue de la procédure). En solution nous conservons la date du dernier mirroitage complet et utilisons l’option –newer-than=aaaammdd de la commande mirror qui parle d’elle-même. Pour finir le script de miroitage ne travaille que si aucun enregistrement n’est en cours. Pour cela nous comparons 2 fois de suite le contenu du répertoire des enregistrements de la Freebox.

En plus des spécificités précédente, ce script comme les autres, utilise la présence d’un fichier .lock pour s’assurer qu’aucune autre instance de lui-même est en train de travailler et rattrape les signaux SIGTERM SIGINT et SIGHUP pour faire le nettoyage qui se limite ici à supprimer les fichiers temporaires et le fichier de verrouillage.

Voici le script de téléchargement des enregistrements:

#!/bin/bash
echo "***********************************"
echo "*                                 *"
echo "*   Freebox record downloader     *"
echo "*                                 *"
echo "***********************************"

INPUT_DIR=.
FINAL_DIR=..
# Change 0000 by the password
CREDENTIAL=freebox,0000
LAST_MIRROR_FILE="$INPUT_DIR/.last_mirror"

# do not allow concurrency
if [ -e "$INPUT_DIR/.lock" ]; then
 exit 1
else
 touch "$INPUT_DIR/.lock"
fi

function cleanup_action {
 rm -f "$INPUT_DIR/.listing1.txt"
 rm -f "$INPUT_DIR/.listing2.txt"
 rm -f "$INPUT_DIR/.lock"
}

function clean_shutdown {
 echo "shutdown sequence..." 
 cleanup_action
 exit 1
}

trap 'clean_shutdown' SIGTERM SIGINT SIGHUP

# do not start download if the freebox is recording
lftp -u $CREDENTIAL -e "open; ls /Disque dur/Enregistrements/ ; quit" hd1.freebox.fr > "$INPUT_DIR/.listing1.txt"
sleep 5
lftp -u $CREDENTIAL -e "open; ls /Disque dur/Enregistrements/ ; quit" hd1.freebox.fr > "$INPUT_DIR/.listing2.txt"
cmp -s "$INPUT_DIR/.listing1.txt" "$INPUT_DIR/.listing2.txt" > /dev/null
if [ $? -eq 0 ]; then
 if [ -e "$LAST_MIRROR_FILE" ]; then 
 LAST_MIRROR=`cat "$LAST_MIRROR_FILE"`
 else
 LAST_MIRROR=0
 fi
 LAST_MIRROR_DATE=`date +%Y%m%d`
 lftp -u freebox,4085 -e "mirror -c --newer-than=$LAST_MIRROR /Disque dur/Enregistrements/ .; quit" hd1.freebox.fr
 # mirroring finished, save the current date because
 # we don't want to download these files again
 echo $LAST_MIRROR_DATE > "$LAST_MIRROR_FILE"
 # move files to processing dir if not buzy
 if [ ! -e "$FINAL_DIR/.lock" ]; then
 mv -u -f *.ts "$FINAL_DIR"
 fi
fi

cleanup_action

Voici le script de tâche cron à mettre dans /etc/cron.hourly

#!/bin/sh
N900_DIR=/home/thierry/Vidéos/n900
cd $N900_DIR/backup
./download.sh
#change thierry by your user
chown  thierry:thierry  $N900_DIR/*.ts

Conversion des enregistrements en H264

Une fois que les fichiers sont déplacés dans le répertoire /home/thierry/Vidéos/n900 un script se charge de les convertir en h264. Ce script commence par s’assurer qu’une autre instance de lui-même n’est pas déjà en train de travailler. La conversion elle même se base sur l’origine du fichier pour déterminer la résolution optimale (voir ce billet). Notons que la commande ffmpeg doit être lancé en arrière-plan car elle tue le shell quand elle se termine (étrange, peut-être spécifique à ma configuration?). Par ailleurs comme la conversion est un processus long, le script n’écrase pas le fichier de destination si il existe déjà. Pour finir le script rattrape les signaux d’interruptions pour faire le ménage. Dans son cas, le ménage consiste surtout à ne pas laisser un fichier converti incomplet. Donc on supprime le fichier en cours de création. Le prochain lancement le récréera. Enfin notons que le script supprime le fichier original une fois sa conversion terminée avec succès.

Voici le fichier de conversion:

#!/bin/bash

echo "***********************************"
echo "*                                 *"
echo "*    video converter for N900     *"
echo "*                                 *"
echo "***********************************"

INPUT_DIR=.
OUTPUT_DIR=$INPUT_DIR/converted

# do not allow concurrency
if [ -e "$INPUT_DIR/.lock" ]; then
 exit 1
else
 touch "$INPUT_DIR/.lock"
fi

function convert_file {
 original_def=$2
 original_file=$1
 converted_file="$OUTPUT_DIR/$original_file.mp4"

 if [ -e "$converted_file" ]; then
 return 1
 fi

 if [ $original_def == "mpeg" ]; then
 SIZE="400x480"
 elif [ $original_def == "dvd" ]; then
 SIZE="592x480"
 elif [ $original_def == "hd" ]; then
 SIZE="640x480"
 elif [ $original_def == "other" ]; then
 SIZE="320x240"
 else
 echo "format $original_def inconnu"
 return 1
 fi

 echo $converted_file > .work_in_progress
 (ffmpeg -i "$original_file" -acodec libfaac -vcodec libx264  -vpre hq -vpre baseline -crf 25 -maxrate 1000k -bufsize 2000k -threads 0 -flags2 -fastpskip  -s "$SIZE" "$converted_file" ) &
 echo $! > .work_pid
 wait       
 if [ $? -eq 0 ]; then
 rm "$original_file"
 fi
 rm .work_pid
 rm .work_in_progress

}

function clean_shutdown {
 echo "shutdown sequence..."
 if [ -e ".work_pid" ]; then
 kill `cat .work_pid`
 rm .work_pid
 fi
 if [ -e .work_in_progress ]; then
 rm "`cat .work_in_progress`"
 rm .work_in_progress
 fi
 rm "$INPUT_DIR/.lock"
 exit 1
}

trap 'clean_shutdown' SIGTERM SIGINT SIGHUP

find $INPUT_DIR -maxdepth 1 -type f ( -name "France 3*.ts" -o -name "France 4*.ts" -o -name "France 5*.ts" -o -name "La Chaîne*.ts" -o -name "NT1*.ts" -o -name "TMC*.ts" ) -print | ( while read i; do convert_file "$i" mpeg; done )

find $INPUT_DIR -maxdepth 1 -type f ( -name "DirectStar*.ts" -o -name "RTL9*.ts" -o -name "AB*.ts" ) -print | ( while read i; do convert_file "$i" dvd; done )

find $INPUT_DIR -maxdepth 1 -type f ( -name "Arte*.ts" -o -name "Direct 8*.ts" -o -name "France 2*.ts" -o -name "NRJ*.ts" ) -print | ( while read i; do convert_file "$i" hd; done )

# this just for any extra video i could put in the process directory
find $INPUT_DIR -maxdepth 1 -type f ( -name "*.mpeg" -o -name "*.vob" -o -name "*.mpg" -o -name "*.avi" ) | ( while read i; do convert_file "$i" other; done )

rm "$INPUT_DIR/.lock"

Voici le script cron à mettre dans /etc/cron.hourly

#!/bin/sh
N900_DIR=/home/thierry/Vidéos/n900
cd $N900_DIR
./convert_all.sh
chown -R thierry:thierry  ./converted

rapatriement des fichiers convertis sur le N900

Le rapatriement des fichiers est assuré par un script qui s’exécute sur le N900 et qui s’appuie sur la présence d’un deamon rsync sur le PC. Le script commence par s’assurer qu’il n’y a pas de conversion en cours sinon il rapatrierait un fichier incomplet. Puis il fait un rsync en spcifiant les options –remove-sent-files et –ignore-existing afin d’une part de libérer du disque sur le PC et d’autre part de limiter le temps de synchronisation en prevenant le rapatriement de fichiers qui seraient convertis en plusieurs fois (possible si on ne supprime pas les enregistrements sur la Freebox).
Voici le fichier de script à placer sur le N900:

#!/bin/sh
LOCAL_REPLAY_DIR=/home/user/MyDocs/.videos/replay
LOCK_FILE=$LOCAL_REPLAY_DIR/.lock
if [ -e $LOCK_FILE ]; then
	rm $LOCK_FILE
fi
rsync 192.168.0.12::"videos/n900/.lock"  $LOCAL_REPLAY_DIR/
if [ -e  $LOCK_FILE ]; then
  exit 1
fi
rsync -v --remove-sent-files --ignore-existing 192.168.0.12::"videos/n900/converted/*.mp4" $LOCAL_REPLAY_DIR

La planification de ce script est dévolue au l’outil Alarmed. On peut par exemple le programmer tous les jours à 7h00.

Cette chaine de conversion permet de libérer son utilisateur des contraintes de copie et de lancement de commande de conversion. Il n’a qu’à programmer les enregistrements pour que quelques heures plus tard ils soient disponibles pour un visionnage en mobilité !

Utilisation de lftp sans proxy avec la Freebox

Dans l’optique de faire une chaine de conversion automatisée des enregistrements fait sur la Freebox à destination du N900, nous avons réalisé dans les précédents billets la conversion et le transfert vers lze terminal. Le rapatriement des fichiers sur le PC devait se faire manuellement avec gFtp par exemple.

Dans l’utilisation de lftp comme outils de mirroitage ne fonctionnait pas. Pourquoi ? Le client gFtp arrive pourtant bien à effectuer les transferts. En examinant les réglages de gFtp on s’apperçoit que par défaut ce dernier n’utilise pas de proxy alors que le fichier /etc/lftp.conf nous indique que lftp utilise les réglages de proxy via les variables ftp_proxy, http_proxy et no_proxy.

Ne souhaitant pas entrer dans une configuration avancée de Squid et de lftp, nous choisissons de ne pas utiliser le proxy.

set net:no-proxy .freebox.fr

Cela est suffisant pour un serveur ftp qui se trouve sur le réseau local.

Réseau wifi de freebox

Le FAI Free a depuis un mois mis en place la fonctionnalité de routeur public sur ses freebox. Tout abonné dispose ainsi d’un accès wifi sur tout le réseau. Si Free permettait déjà de se connecter au réseau freephonie pour bénficier de la VoIP comme si on utilisait sa ligne résidentielle, Free propose ic un vrai accès à touts les freebox participante en tant que hotspot classique. Free arrivant bon dernier dans cette course au maillage Wifi derrière les Sfr, Fon et Neuf, il est intéressant de suivre l’évolution des activations des freebox comme hotspot sur le site freebox-wifi. Cette initiative privée permet à tous de signaler son hotspot ou celui-du voisin via un enregistrement automatique des hotspot détectée par les applications dédiée pour Iphone ou Android. Cependant le signalement automatique à tendance montrer les endroit où sont accessible les réseaux détecté et non pas la localisation de leur source. Ainsi les hotspot remontés automatiquement se positionnent sur les tronçons routiers parcourus par les propriétaires des IPhone ou Android participant…

Réseau wifi de freebox

Le FAI Free a depuis un mois mis en place la fonctionnalité de routeur public sur ses freebox. Tout abonné dispose ainsi d’un accès wifi sur tout le réseau. Si Free permettait déjà de se connecter au réseau freephonie pour bénficier de la VoIP comme si on utilisait sa ligne résidentielle, Free propose ic un vrai accès à touts les freebox participante en tant que hotspot classique. Free arrivant bon dernier dans cette course au maillage Wifi derrière les Sfr, Fon et Neuf, il est intéressant de suivre l’évolution des activations des freebox comme hotspot sur le site freebox-wifi. Cette initiative privée permet à tous de signaler son hotspot ou celui-du voisin via un enregistrement automatique des hotspot détectée par les applications dédiée pour Iphone ou Android. Cependant le signalement automatique à tendance montrer les endroit où sont accessible les réseaux détecté et non pas la localisation de leur source. Ainsi les hotspot remontés automatiquement se positionnent sur les tronçons routiers parcourus par les propriétaires des IPhone ou Android participant…

La VoIP en mobilité

De nombreux téléphones portables offrent une connectivité Wifi dont l’usage est multiple. Dès qu’un réseau sans fil est à porté, le premier usage est l’accès au web pour la consultation de site ou de messagerie. Un autre usage moins populaire mais qui gagne à être connu est la VoIP. Je ne parle pas de solution propriétaire comme Skype mais plutôt de réseau ouvert qui utilise le protocole SIP. Nous allons nous attarder sur ce dernier.

Tous d’abord commençons par préciser les avantages de la VoIP avec SIP. Ce protocol permet d’enregistrer un terminal (le téléphone ou un ordinateur) sur le réseau internet et de l’associer à une adresse SIP qui est l’équivalent du numéro de téléphone classique. Cela permet d’appeler et d’être joignable à partit d’un même numéro SIP. A la maison on utilise un terminal qui par exemple est un véritable téléphone puis au bureau on peut utiliser un logiciel (appelé softphone). Un correspondant utilise alors le même numéro pour nous joindre. Si on est enregistrer sur le réseau SIP à la maison, c’est le téléphone de la maison qui sonne. Si on est enregistré par le biais du téléphone logiciel, alors c’est l’ordinateur qui sonne.

Cela confère la caractéristique bien connue de mobilité déjà présente dans les téléphones portables. Et c’est ici que la VoIP prend justement tout son intérêt. Le téléphone portable devenant de plus en plus puissant, intègre aujourd’hui en natif ou par ajout d’un logiciel comme par exemple Gizmo, la fonction de téléphone SIP qui couplé à la connectivité Wifi, permet de passer des appels en mobilité par internet. La téléphonie IP devient alors plus attrayante que le résau cellulaire car utiliser par une borne Wifi (gratuite) pour passer des appels par SIP est bien moins onéreux.

Mais la VoIP est-t-elle réellement utilisable ? En effet on associe souvent au terme VoIP, des appels par internet et cela ramène au concept pourtant réducteur d’appel d’ordinateur à ordinateur. A quoi bon avoir un téléphone portable Wifi utilisant le protocole SIP si on ne peux pas joindre des téléphones classiques ? De même à quoi bon avoir un terminal Wifi si il n’y a pas de borne Wifi exploitable là où on se trouve ? Ces 2 questions ne sont à mon avis aujourd’hui plus des obstacles car d’une part les points d’accès “gratuits” se multiplient à l’instart du réseau FON et la liaison entre téléphonie IP et réseau classique existe sous diverse forme.

Intéressons nous au réseau Wifi lui même. Le maillage du réseau Wifi est le problème principale. En effet la mobilité en réseau cellulaire est acquise car les opérateurs on installé partout leurs antennes. Or un simple coup d’oeil sur la carte FON nous rassure sur le maillage d’un réseau gratuit. L’accès en Wifi au réseau internet n’est donc pas un problème insurmontable. Quand à la passerelle entre SIP et le réseau classique, c’est un écueil que l’on évite en s’affranchissant d’une somme modique au regard du tarif pratiqué par le réseau téléphonque classique mais réellement compétitif par rapport au tarif des opérateurs IP comme Free ou Neuf. En effet ni Skype ou Gizmo ne sont en mesure de rivaliser aujourd’hui avec les offres tarifaire de Free avec par exemple la liaison avec les ligne fixe gratuite.

L’astuce est alors d’utiliser le compte SIP de son opérateur résidentiel afin de bénéficier de ses tarifs en mobilité. Je pense que là les opérateurs de téléphonies cellulaires sont face à une réelle menace que pour l’instant ils contournent en interdisant le VoIP avec leurs offres internet sur les mobiles. Pour l’utilisateur ce n’est pas bloquant. Il utilise le reseau wifi gratuit pour passer ses appel SIP.

Dans cette perspective j’ai essayé avec bonheur l’utilisation de mon compte SIP Free depuis mon téléphone Wifi en me connectant à une borne Wifi d’un inconnu. Ce dernier utilisait il est vrai Free comme fournisseur ce qui explique que le point d’accès Wifi était pré-configuré pour en permettre l’usage aux autres abonnés. Il me reste à faire un test depuis un point d’accès FON pour terminer la démonstration mais elle me suffit déjà. La VoIP en mobilité est aujourd’hui possible car les terminaux sont disponibles, le maillage du réseau Wifi est suffisant et la passerelle vers le réseau classique est soit accessible soit donnée par le fournisseur d’accès résidentiel.

La VoIP en mobilité

De nombreux téléphones portables offrent une connectivité Wifi dont l’usage est multiple. Dès qu’un réseau sans fil est à porté, le premier usage est l’accès au web pour la consultation de site ou de messagerie. Un autre usage moins populaire mais qui gagne à être connu est la VoIP. Je ne parle pas de solution propriétaire comme Skype mais plutôt de réseau ouvert qui utilise le protocole SIP. Nous allons nous attarder sur ce dernier.

Tous d’abord commençons par préciser les avantages de la VoIP avec SIP. Ce protocol permet d’enregistrer un terminal (le téléphone ou un ordinateur) sur le réseau internet et de l’associer à une adresse SIP qui est l’équivalent du numéro de téléphone classique. Cela permet d’appeler et d’être joignable à partit d’un même numéro SIP. A la maison on utilise un terminal qui par exemple est un véritable téléphone puis au bureau on peut utiliser un logiciel (appelé softphone). Un correspondant utilise alors le même numéro pour nous joindre. Si on est enregistrer sur le réseau SIP à la maison, c’est le téléphone de la maison qui sonne. Si on est enregistré par le biais du téléphone logiciel, alors c’est l’ordinateur qui sonne.

Cela confère la caractéristique bien connue de mobilité déjà présente dans les téléphones portables. Et c’est ici que la VoIP prend justement tout son intérêt. Le téléphone portable devenant de plus en plus puissant, intègre aujourd’hui en natif ou par ajout d’un logiciel comme par exemple Gizmo, la fonction de téléphone SIP qui couplé à la connectivité Wifi, permet de passer des appels en mobilité par internet. La téléphonie IP devient alors plus attrayante que le résau cellulaire car utiliser par une borne Wifi (gratuite) pour passer des appels par SIP est bien moins onéreux.

Mais la VoIP est-t-elle réellement utilisable ? En effet on associe souvent au terme VoIP, des appels par internet et cela ramène au concept pourtant réducteur d’appel d’ordinateur à ordinateur. A quoi bon avoir un téléphone portable Wifi utilisant le protocole SIP si on ne peux pas joindre des téléphones classiques ? De même à quoi bon avoir un terminal Wifi si il n’y a pas de borne Wifi exploitable là où on se trouve ? Ces 2 questions ne sont à mon avis aujourd’hui plus des obstacles car d’une part les points d’accès “gratuits” se multiplient à l’instart du réseau FON et la liaison entre téléphonie IP et réseau classique existe sous diverse forme.

Intéressons nous au réseau Wifi lui même. Le maillage du réseau Wifi est le problème principale. En effet la mobilité en réseau cellulaire est acquise car les opérateurs on installé partout leurs antennes. Or un simple coup d’oeil sur la carte FON nous rassure sur le maillage d’un réseau gratuit. L’accès en Wifi au réseau internet n’est donc pas un problème insurmontable. Quand à la passerelle entre SIP et le réseau classique, c’est un écueil que l’on évite en s’affranchissant d’une somme modique au regard du tarif pratiqué par le réseau téléphonque classique mais réellement compétitif par rapport au tarif des opérateurs IP comme Free ou Neuf. En effet ni Skype ou Gizmo ne sont en mesure de rivaliser aujourd’hui avec les offres tarifaire de Free avec par exemple la liaison avec les ligne fixe gratuite.

L’astuce est alors d’utiliser le compte SIP de son opérateur résidentiel afin de bénéficier de ses tarifs en mobilité. Je pense que là les opérateurs de téléphonies cellulaires sont face à une réelle menace que pour l’instant ils contournent en interdisant le VoIP avec leurs offres internet sur les mobiles. Pour l’utilisateur ce n’est pas bloquant. Il utilise le reseau wifi gratuit pour passer ses appel SIP.

Dans cette perspective j’ai essayé avec bonheur l’utilisation de mon compte SIP Free depuis mon téléphone Wifi en me connectant à une borne Wifi d’un inconnu. Ce dernier utilisait il est vrai Free comme fournisseur ce qui explique que le point d’accès Wifi était pré-configuré pour en permettre l’usage aux autres abonnés. Il me reste à faire un test depuis un point d’accès FON pour terminer la démonstration mais elle me suffit déjà. La VoIP en mobilité est aujourd’hui possible car les terminaux sont disponibles, le maillage du réseau Wifi est suffisant et la passerelle vers le réseau classique est soit accessible soit donnée par le fournisseur d’accès résidentiel.