scripts/tv/sat_base.py
dubost fee43f70e8 Nouvelles chaines
Correction Pids canal+
Correction langue W fashion channel

darcs-hash:20051014184916-c3cc4-e97d241a9ba51bb15ea1680e7a46aaa96c7e6a77.gz
2005-10-14 20:49:16 +02:00

422 lines
12 KiB
Python
Executable file

#! /usr/bin/env python
# -*- coding: iso8859-15 -*-
""" Configuration de base des différents transpondeurs disponibles """
#Auteur : Frédéric Pauget
#Maintenance et adaptations : DUBOST Brice
#Licence : GPLv2
from commands import getoutput
from time import sleep
import os, socket
IP = socket.gethostbyaddr(socket.gethostname())[-1][0]
class CarteOqp(Exception) :
""" La carte est déja utilisée """
class NotRunning(Exception) :
""" La carte ne diffuse rien """
class carte :
""" Classe parent de toute classe de transpondeur """
# Niveux de verbosite :
# 0 : ne dit rien
# 1 : messages à caractères informatifs
# 2 : messages de debug
# 3 : ne permet pas à mumudvb de daemonizer
verbose = 3
CONF_FILE = "/etc/sat/carte%i.conf" # %i : numero de la carte
timeout_accord=20 #en secondes
timeout_no_diff=300 #en secondes
entete_conf = """### Fichier généré, NE PAS EDITER
freq=%(freq)i
pol=%(pol)s
srate=%(srate)i
card=%(card)i
timeout_accord=%(timeout_accord)i
timeout_no_diff=%(timeout_no_diff)i
"""
entete_conf_TNT = """### Fichier généré, NE PAS EDITER
freq=%(freq)i
qam=%(qam)s
trans_mode=%(trans_mode)s
bandwidth=%(bandwidth)s
guardinterval=%(guardinterval)s
coderate=%(coderate)s
card=%(card)i
timeout_accord=%(timeout_accord)i
timeout_no_diff=%(timeout_no_diff)i
"""
chaine_template = """ip=%(ip)s
port=1234
name=%(name)s
pids=%(pids)s
"""
pid_file = "/var/run/tv/mumudvb_carte%i.pid" # % num carte
mumudvb = "/usr/local/bin/mumudvb "
def __cmp__(a,b) :
for attr in ( 'card', 'freq', 'chaines' ) :
if getattr(a,attr) != getattr(b,attr) :
return -2
return 0
def __init__(self,card) :
""" Initalisation card est le numéro (entier) de la carte
correspondante """
try :
self.freq = int(str(self.__class__).split('_')[-1])
except :
# On ne pourra pas faire grand chose à part killer le flux de la carte
self.freq = ''
pass
self.card = card
def gen_conf(self) :
""" Génère le fichier de conf """
if not self.freq :
if self.verbose > 1 : print "Instance ne permettant pas la génération de la conf"
return
fd = open(self.CONF_FILE % self.card,'w')
# Entète du fichier
try:
fd.write( self.entete_conf_TNT %
{ 'qam' : self.qam, 'trans_mode' : self.trans_mode ,
'bandwidth' : self.bandwidth, 'guardinterval' : self.guardinterval ,
'coderate' : self.coderate,
'freq' : self.freq , 'card' : self.card ,
'timeout_accord' : self.timeout_accord ,
'timeout_no_diff' : self.timeout_no_diff } )
except:
fd.write( self.entete_conf %
{ 'pol' : self.pol, 'srate' : self.srate ,
'freq' : self.freq , 'card' : self.card ,
'timeout_accord' : self.timeout_accord ,
'timeout_no_diff' : self.timeout_no_diff } )
# Chaines
n = 0
for pids, name in self.chaines.items() :
ip = '239.%s.20%i.2%02i' % ( IP.split('.')[-1], self.card, n)
n += 1
fd.write(self.chaine_template % vars())
fd.close()
def get_pid(self) :
""" Retourne le pid associé à la carte """
try:
pid = int(open(self.pid_file % self.card).readline().strip())
if self.verbose > 1 :
print 'pid : %i' % pid ,
return pid
except :
raise NotRunning
def is_running(self) :
""" Vérifie si le process correspondant à la carte toune """
if self.verbose > 1 :
redir = ''
else :
redir = '>/dev/null 2>&1'
try :
if not os.system('ps %i %s' % (self.get_pid() , redir) ) :
# Il tourne
return True
except NotRunning :
pass
return False
def start(self) :
""" Lance la diffusion """
if not self.freq :
if self.verbose > 1 : print "Instance ne permettant pas le lancement d'un flux"
return
if self.verbose >0 :
print "Lancement de %s sur la carte %i" % (str(self.__class__).split('.')[-1], self.card)
if self.is_running() :
raise CarteOqp
if self.verbose >0 : print "\tGénération de la conf...",
self.gen_conf()
if self.verbose >0 : print "OK"
cmd = '%s -c %s' % ( self.mumudvb, self.CONF_FILE % self.card )
if self.verbose > 2 : cmd += ' -d -s'
if self.verbose > 1 :
print "\tCommande : %s" % cmd
for i in range(2*self.timeout_accord) :
if not i%5 and i <= self.timeout_accord :
if self.verbose > 0 and i : print "ATTENTE/ERREUR"
# On fait une tentative de lancement toutes les 5s (en cas de pb de diseq)
if self.verbose > 0 : print "\tTentative %i" %(i/5+1) ,
os.system(cmd)
sleep(1)
if self.is_running() :
if self.verbose > 0 : print 'OK'
break
sleep(1)
if not self.is_running() :
if self.verbose > 0 : print 'ABANDON'
raise NotRunning
def stop(self) :
""" Arrète la diffusion de la carte """
if self.verbose >0 :
print "Arret diffusion carte %i..." % self.card ,
try :
# Ca tourne au moins ?
if not self.is_running() :
if self.verbose >0 : print "carte déja arrétée"
return
os.kill(self.get_pid(),15)
sleep(1)
if not self.is_running() :
if self.verbose >0 : print "OK"
return
# Crève !!
if not self.is_running() :
if self.verbose >0 : print "SIGKILL"
return
os.kill(self.get_pid(),9)
# Salloperie
raise CarteOqp
except NotRunning :
# Parfait, c'était le but
pass
def restart(self) :
""" Redémarre le flux """
self.stop()
self.start()
class Hotbird_10796(carte) :
pol='v'
srate=27500
chaines = {
'3534 3504' : 'rad fra France Inter',
'3535 3505' : 'rad fra France Info' }
class Hotbird_10873(carte) :
pol='v'
srate=27500
chaines = {
'3101 3131' : 'rad fra Europe 1',
'3102 3132' : 'rad fra Europe 2',
'3103 3133' : 'rad fra RFM',
'3105 3135' : 'rad fra RTL',
'3106 3136' : 'rad fra NRJ',
'3107 3137' : 'rad fra Radio Classique',
'3108 3138' : 'rad fra Cherie FM',
'3111 3141' : 'rad fra HITWEST',
'3202 3232' : 'rad fra Rires et chansons',
'3210 3240' : 'rad fra Nostalgie' }
class Hotbird_10911(carte) :
pol='v'
srate=27500
chaines = {
'3207 3237' : 'rad fra RFI',
'3301 3331' : 'rad fra Beur FM',
'3501 3531' : 'rad fra France Musiques',
'3503 3533' : 'rad fra FIP',
'3506 3536' : 'rad fra France Culture',
'3508 3538' : 'rad fra Le Mouv' }
class Hotbird_11137(carte) :
pol='h'
srate=27500
chaines = {
'524 644 260' : 'fra Beur TV',
'3521 3641 717 3601' : 'fra TV5 FBS',
'3522 3642 719 3602' : 'fra TV5 Europe',
'3523 3643 265' : 'ita Roma uno',
'3524 3644 262' : 'ara ANN',
'3525 3645 267' : 'ita Videolook',
'3526 3646 263' : 'ara K-TV',
'3528 3648 264' : 'ita Videolina',
'3529 3649 258' : 'ita TeleGenova Sat 2',
'3531 3651 261' : 'ita Amica9 telestar' }
class Hotbird_11200(carte) :
pol='V'
srate=27500
chaines = {
'366 367 2560' : 'ita Elite shopping TV',
'382 383 768' : 'ita calabria sat',
'386 387 512' : 'x-ero tv conto',
'397 398 399' : 'ita starsat',
'382 383 2048' : 'ita italia.tv channel',
'394 395 394' : 'x-ero play TV',
'400 401 402' : 'ita people tv',
'405 406 407' : 'ita roma sat',
'413 414 415' : 'ita sat adriatico' }
class Hotbird_11242(carte) :
pol='v'
srate=27500
chaines = {
'121 122 123' : 'ita TV7 Lombardia',
'3011 3012 3010' : 'fra TV8 Mont Blanc',
'33 36 35' : 'fra HD Forum',
'308 256 257' : 'fra World Fashion Channel' }
class Hotbird_11304(carte) :
pol='h'
srate=27500
chaines = {
'1060 1020 210' : 'esp venevision continental',
'310 256 211' : 'esp TV Chile',
'513 514 212' : 'esp TV Colombia'}
class Hotbird_11604(carte) :
pol='h'
srate=27500
chaines = {
'172 173 600 174' : 'ger Das Erste',
'1000 1001 700' : 'ger DW TV',
'175 176 900 177' : 'ger RTL2 Schweiz',
'180 181 1100 182' : 'ger SUPER RTL Schweiz',
'190 191 1200' : 'pol Viva Polska' }
class Hotbird_11623(carte) :
pol='v'
srate=27500
chaines = {
'223 233 243 203' : 'fra ger Arte',
'230 250 210 297' : 'fra 123 sat',
'225 245 205' : 'fra Best Of Shopping',
'221 241 201' : 'x-ero Videosexy TV',
'231 251 32' : 'x-ero SexySat 3',
'227 247 207 287' : 'rom TV romania'}
class Hotbird_11642(carte) :
pol='h'
srate=27500
chaines = {
'1360 1320 5003' : 'eng Bloomberg Europe',
'1460 1420 5004' : 'ger Bloomberg TV Deutschland',
'1560 1520 5005' : 'eng Bloomberg U.K.' }
class Hotbird_11727(carte) :
pol='v'
srate=27500
chaines = {
'2711 2712 257' : 'fra la locale',
'2730 2731 2732 264' : 'ara Al Maghribiyah',
'2741 2742 265' : 'ita Sicilia International (SET)',
'2751 2752 266' : 'ita Sardegna Uno Sat'}
class Hotbird_11785(carte) :
pol='h'
srate=27500
chaines = {
'3521 3522 3520 3525' : 'esp TVE International',
'3569 3570 3568 3573' : 'esp Canal 24 Horas',
'3553 3554 3552' : 'esp TVE Internacional Asia/Africa' }
class Hotbird_12245(carte) :
pol='h'
srate=27500
chaines = {
'127 137 117' : 'fra TELIF',
'128 138 32' : 'x-ero sexysat',
'1023 1033 1014' : 'fra astro center TV' }
class Hotbird_12476(carte) :
pol='h'
srate=27500
chaines = {
'101 201 202 203 204 205 206 207 208 209 210 211 212 100' : 'fra autres EBS',
'601 602 257' : 'ara 2M',
'551 552 550' : 'x-ero X Stream'}
class Hotbird_12558(carte) :
pol='v'
srate=27500
chaines = {
'6660 6661 6659' : 'ita Administra.it',
'6916 6917 6915 6930' : 'ita 24 Ore' }
class Hotbird_12577(carte) :
pol='h'
srate=27500
chaines = {
'1204 1304 1104' : 'fra telesud',
'1206 1306 1106' : 'fra F men',
'1218 1313 33 34' : 'x-ero sexysat1',
'1206 1306 1106' : 'x-ero Full X 4 free',
'1209 1309 1109' : 'fra liberty TV',
'1239 1339 1139' : 'ned liberty TV' }
class Hotbird_12597(carte) :
pol='v'
srate=27500
chaines = {
'80 81 1024' : 'rus sport planeta',
'163 92 1027' : 'eng BBC World',
'167 108 1031' : 'rus ORT International',
'2221 2231 2232 2233 2234 2235 2236 2237 2238 1034 768' : 'fra autres Euronews' }
class TNT_base(carte) :
qam="64"
trans_mode="8k"
bandwidth="8MHz"
class TNT_R1_586000(TNT_base) :
guardinterval="1/8"
coderate="3/4"
chaines = {
'120 130 110' : 'fra France 2',
'210 220 230' : 'fra France 3',
'410 420 430' : 'fra France 4',
'310 320 330' : 'fra France 5',
'510 520 530' : 'fra Arte',
'610 620 630' : 'fra LCP Public Senat' }
class TNT_R2_474000(TNT_base) :
guardinterval="1/32"
coderate="2/3"
chaines = {
'160 80 1280' : 'fra Direct 8',
'161 84 1281' : 'fra TMC',
'162 88 1282' : 'fra BFM TV',
'163 92 1283' : 'fra i tele',
'164 96 1284' : 'fra europe2 TV',
'165 100 1285' : 'fra Gulli'}
class TNT_R3_522000(TNT_base) :
guardinterval="1/32"
coderate="2/3"
chaines = {
'170 120 1280' : 'fra Canal'}
class TNT_R4_498000(TNT_base) :
guardinterval="1/32"
coderate="2/3"
chaines = {
'120 130 110' : 'fra M6',
'220 230 210' : 'fra W9',
'320 330 310' : 'fra NT1'}
class TNT_R6_562000(TNT_base) :
guardinterval="1/32"
coderate="2/3"
chaines = {
'120 130 100' : 'fra TF1',
'220 230 231 200' : 'fra NRJ12'}