SASC-NG est ce que l'on appelle un “softcam”. C'est un des logiciels nécessaire pour décoder les flux cryptés du satellite ou de la TNT. Il peut être utilisé dans de nombreux cas:
Pour compiler, vous aurez besoin des paquets suivants:
et peut être d'autres
cd /usr/local/src hg clone http://85.17.209.13:6100/sc cd /usr/local/src/sc chmod +x contrib/sasc-ng/configure chmod +x contrib/sasc-ng/dvbloopback/module/config_dvb.pl
cd /usr/local/src/sc/contrib/sasc-ng/ ./configure make make module
à l'étape “configure, vous pouvez être amené à indiquer le chemin vers les sources de votre driver si vous l'avez compilé vous même
A l'étape “make” vous aurez peut être l'erreur indiquant qu'il ne trouve pas le fichier linux/compiler.h. Il suffit de le créer:
cd /usr/src/v4l-dvb/linux/include/linux sudo touch compiler.h
Le chemin est à adapter en fonction de votre driver de carte tuner si vous l'avez compilé vous même.
Il suffit de placer le module dans l'arborescence du noyau pour faciliter son lancement.
rm /lib/modules/`uname -r`/misc/dvbloopback.ko cd /usr/local/src/sc/contrib/sasc-ng/ cp sasc-ng /usr/bin cp /usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/* /usr/lib/ mkdir /lib/modules/`uname -r`/misc /usr/bin/install dvbloopback.ko /lib/modules/`uname -r`/misc/ depmod
Comme vous avez placé le module en bonne position, vous pouvez utilisez la commande “modprobe”:
modprobe dvbloopback
Si vous avez plusieurs cartes DVB à décoder, vous devez spécifier le nombre de tuner (adapter) virtuel que vous souhaitez. Si vous voulez 3 tuners virtuels:
modprobe dvbloopback num_adapters=3
Il n'est pas nécessaire de modifier le fichier /etc/modules pour monter le module au démarrage. Le lancement de celui-ci est inclus dans le script de démarrage de sasc que vous trouverez plus loin.
Pour démarrer sasc-ng avec un CAM:
LD_LIBRARY_PATH=/usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/ ./sasc-ng -j 0:1 --cam-budget
Pour l'utiliser un CAM avec MythTV:
LD_LIBRARY_PATH=/usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/ ./sasc-ng -j 0:1 --cam-budget --sid-allpid --sid-nocache
Pour utiliser sasc-ng avec newcs, vous devrez mettre en place un fichier de configuration (voir le chapitre “fichiers aditionnels” et consulter le wiki newcs) puis lancer.
LD_LIBRARY_PATH=/usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/ ./sasc-ng -j 0:1
Attention : il se peut que vous soyez obligé de préciser l'emplacement des fichiers de configuration avec l'option –cam-dir.
L'option –sid-allpid permet de mettre à jour toutes les clefs de décryptage pour toutes les chaînes à chaque connexion de sasc.
L'option –buffer 8M permet de modifier la taille du cache de sasc, ce sera nécessaire si vous avez plusieurs tuners virtuels qui utilisent simultanément sasc (il semble inutile de monter au delà de 8 Mega-octets)
Vous devez créer votre propre répertoire pour stocker vos fichiers de configuration (cardclient.conf) et créer un lien sasc-ng dans le répertoire des exécutables.
mkdir /etc/camfiles cd /usr/local/src/sc/contrib/sasc-ng/ mv sc_files/* /etc/camfiles/ cp sasc-ng /usr/bin/
Vous trouverez des exemples de fichiers de configuration dans le répertoire /usr/local/src/opensasc/sc/PLUGINS/src/sc-src/examples.
Puis copier les librairies au bon endroit:
cp /usr/local/src/sc/contrib/sasc-ng/sc/PLUGINS/lib/* /usr/lib/
Nous allons maintenant éditer les scripts de lancement de SASC. Ce script installe le module dvbloopback et lance la commande sasc-ng.
Créer /usr/local/bin/runsasc
et copier ce script (vous pouvez ignorer la variable DRIVERDIR dans le script. Puisque vous avez copier le module dans l'arborescence du noyau, vous devez juste faire “modprobe dvbloopback” sans préciser le chemin.) Faites attention au nombre de tuner (adapter), que vous souhaitez charger! Il est réglé sur 3 et l'option -j
a été personnalisée.
#!/bin/bash # Script pour lancer SASC-NG et le module dvbloopback # Répertoire de stockage du driver DRIVERDIR="" # Commande de lancement de sasc #(doit inclure le chemin si sasc-ng n'est pas dans /usr/bin ou /usr/local/bin) SASCPRG="/usr/local/src/sc/contrib/sasc-ng" # Emplacement des fichiers de configuration (/sc_files par défaut) CAMDIR="" # Nombre de cartes DVB qui seront crées et utilisées avec sasc-ng ADAPTERS="3" # Options à passer à SASC-NG. À ajuster en fonction de votre marériel. OPTIONS="-j 0:3 -j 1:4 -j 2:5 --cam-budget --sid-allpid --sid-nocache --cam-dir" # Nombre de tentatives de démarrage de sasc-ng avant de prononcer le "non-démarrage" de celui-ci (mettre à 0 pour relancer sans limitation) MAXTRIES=10 # Temps minimum en secondes entre 2 relances de sasc-ng MINRUN=20 ## Fin de section de configuration ## SASCCMD="$SASCPRG $OPTIONS $CAMDIR" KILL="/usr/bin/killall -q -TERM" # Detect whether the DVBLooopback driver is already loaded # and return 0 if it *is* loaded, 1 if not: function DriverLoaded() { grep -qse dvbloopback /proc/modules } # Load all DVBLoopback driver modules needed for your hardware: function LoadDriver() { modprobe dvbloopback num_adapters=$ADAPTERS sleep 5 } # Unload all DVBLoopback driver modules loaded in LoadDriver(): function UnloadDriver() { rmmod dvbloopback } # Load driver if it hasn't been loaded already: if ! DriverLoaded; then LoadDriver fi LASTRESTART=$(date +%s) LOOPCOUNT=0 while (true) do if [ $LOOPCOUNT -le $MAXTRIES ] || [ $MAXTRIES -eq 0 ] ; then eval "screen -D -m -S sasc-ng $SASCCMD &" # Wait for SASC-NG to initialize then do rest sleep 10 touch /tmp/SASC_COMPLETE else $KILL runsasc fi # Remember PID of SASC-NG process PID=$! # Wait for SASC-NG to end or signal to arrive wait $PID # Remember return value of SASC-NG RET=$? if test $RET -eq 0 -o $RET -eq 2; then exit; fi TIMEOFDEATH=$(date +%s) RUNTIME=$((TIMEOFDEATH - LASTRESTART)) if [ $TIMEOFDEATH -le $(($LASTRESTART + $MINRUN)) ] ; then echo "`date` SASC-NG crashed in $RUNTIME seconds. Minimum required runtime for SASC-NG is $MINRUN seconds. Killing runsasc process..." $KILL runsasc fi echo "`date` Reloading DVBLoopback drivers" $KILL sasc-ng sleep 10 UnloadDriver LoadDriver LASTRESTART=$(date +%s) LOOPCOUNT=$((LOOPCOUNT+1)) echo "`date` Restarting SASC-NG $LOOPCOUNT time(s). Maximum retries set to $MAXTRIES" done
Modifier les permissions:
chmod 755 /usr/local/bin/runsasc chmod +x /usr/local/bin/runsasc
Nous allons créer un script pour lancer SASC au démarrage de la machine.
Créer /etc/init.d/sascd
Et copier ces lignes:
#! /bin/bash # # sasc start-stop script # PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME="runsasc" DESC="SASC-NG" DAEMON="sasc-ng" ENABLED=0 test -f /etc/default/sascc && . /etc/default/sascc test "$ENABLED" != "0" || exit 0 rm -f /tmp/SASC_COMPLETE LOOP=0 case "$1" in start) if ! ps -C sasc-ng > /dev/null 2>&1; then echo -e "Starting $DESC: $NAME. n" runsasc & until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do sleep 1 LOOP=$((LOOP+1)) done if [ $LOOP -eq $TIMEOUT ]; then echo -e "SASC-NG startup sequence has timed out in $TIMEOUT seconds. SASC-NG will not start. n" exit 1 fi echo -e "SASC-NG startup time was $LOOP second(s). n" echo -e "SASC-NG startup sequence completed. n" else echo -e "SASC-NG is already running. n" fi ;; stop) if ps -C sasc-ng > /dev/null 2>&1; then echo -e "Stopping $DESC: $NAME. n" sleep 3 killall -q -TERM $NAME killall -q -TERM $DAEMON sleep 5 rmmod dvbloopback.ko else echo -e "SASC-NG is not running. n" fi ;; restart|force-reload) if ps -C sasc-ng > /dev/null 2>&1; then echo -e "Restarting $DESC: $NAME. n" sleep 3 killall -q -TERM $NAME killall -q -TERM $DAEMON sleep 5 rmmod dvbloopback.ko sleep 2 runsasc & until [ -e /tmp/SASC_COMPLETE ] || [ $LOOP -eq $TIMEOUT ] ; do sleep 1 LOOP=$((LOOP+1)) done if [ $LOOP -eq $TIMEOUT ]; then echo -e "SASC-NG startup sequence has timed out in $TIMEOUT seconds. SASC-NG will not start. n" exit 1 fi echo -e "SASC-NG startup time was $LOOP second(s). n" echo -e "SASC-NG startup sequence completed. n" else echo -e "SASC-NG is not running. n" fi ;; *) N=/etc/init.d/$NAME echo "Use: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac rm -f /tmp/SASC_COMPLETE exit 0
Changer les permissions et le niveau de lancement(runlevels):
chmod +x /etc/init.d/sascd cd /etc/rc5.d ln -s /etc/init.d/sascd mv sascd S99sascd
Vous avez besoin de créer un fichier de configuration:
Créer /etc/default/sascc
Et ajouter ceci:
# /etc/default/sascc # Fichier de configuration de sascd # Mettre à 1 pour valider le lancement de sascd ENABLED=1 # DVBLoopback Device creation timeout (in seconds) TIMEOUT=60
Si vous souhaitez utiliser NewCS avec une carte d'abonnement, vous devez créer ce fichier: /etc/camfiles/cardclient.conf et copier la ligne suivante qui pourra être personnaliser si nécssaire
# # Comment lines can start with # or ; # # every client line starts with the client name, followed by some arguments: # 'hostname' is the name of the server # 'port' is the port on the server # 'emm' is a flag to allow EMM transfers to the server # (0=disabled 1=enabled) # 'caid' (optional) caid on which this client should work # 'mask' (optional) mask for caid e.g. caid=1700 mask=FF00 would allow # anything between 1700 & 17FF. # Default is 1700 & FF00. If only caid is given mask is FFFF. # You may give multiple caid/mask values comma separated # (e.g. 1702,1722,0d0c/ff00). # 'username' is the login username # 'password' is the login password # # newcamd client # 'cfgkey' is the config key (28bytes) #newcamd:hostname:port:emm/caid/mask:username:password:cfgKey newcamd:127.0.0.1:15050:1/0500/FFFF:dummy:dummy:0102030405060708091011121314 #
Avec le noyau 2.6.32, j'ai dû appliquer cette correction pour compiler sasc
change the line 11 in /usr/src/linux/include/asm-generic/int-ll64.h,
from:
#include <asm/bitsperlong.h>
to:
#include <asm-generic/bitsperlong.h>
Un petit script pour connaitre le nom des chaînes décodées (merci à FabriceMG)
#!/bin/bash for i in `grep V1 /usr/local/src/sc/contrib/sasc-ng/sc_files/ecm.cache |awk -F":" '{print $2}'|sort|uniq`; do c=`mysql mythconverg -r -s --execute "select name from channel where chanid=$i"`; h=`printf "%x" $i` echo "[$h] $i => $c"; done
Rédigé par gilles74 le 3/1/2009/
Mis à jour par Gilles74 le 28/2/2010 pour tenir compte de la disparition d'opensasc
Ajout des options sid-allpid et buffer le 21/3/2010