#! /usr/bin/env python # -*- coding: iso8859-15 -*- """ Configuration de base des différents transpondeurs disponibles Ce fichier contient la liste des chaines pour chaque transpondeur. Pour chaque chaine, on doit indiquer le nom de la chaine et au minimum : - Le pid PMT, ce pid permet a mumudvb de trouver les autres """ #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=0 #en secondes entete_conf = """### Fichier genere, NE PAS EDITER autoconfiguration=1 autoconf_pid_update=1 multicast_auto_join=1 dont_send_scrambled=1 dvr_buffer_size=100 sap=1 sap_organisation=crans common_port=1234 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 genere, NE PAS EDITER autoconfiguration=1 autoconf_pid_update=1 multicast_auto_join=1 dont_send_scrambled=1 dvr_buffer_size=100 sap=1 sap_organisation=crans common_port=1234 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 sap_group=%(sap_group)s name=%(name)s pids=%(pids)s #----- """ autoconf2_template = """common_port=1234 autoconfiguration=2 autoconf_ip_header=%(ip)s sap_default_group=various #----- """ 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, (sap_group, 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()) #Si pas de chaines, on passe en autoconfiguration=2 if not n : ip = '239.%s' % ( IP.split('.')[-1]) fd.write(self.autoconf2_template % { "ip" : ip}) fd.close() 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 "Generation de la conf de %s sur la carte %i" % (str(self.__class__).split('.')[-1], self.card) self.gen_conf() if self.verbose >0 : print " OK" class Hotbird_10853(carte) : pol='h' srate=27500 chaines = { '140' : ('x-ero' , 'x-ero Eurotic TV'), '4100' : ('eng' , 'eng Physique TV ')} class Hotbird_11034(carte) : pol='v' srate=27500 chaines = { '500' : ('ara' , 'ara fra 2M Monde'), '550' : ('ara' , 'ara fra radio 2M'), '1200' : ('fra' , 'fra Telesud'), '1400' : ('eng' , 'eng Al Jazeera')} class Hotbird_11054(carte) : pol='h' srate=27500 chaines = { '1026' : ('ger' , 'ger RTL Schweiz'), '1033' : ('ger' , 'ger ZDF')} class Hotbird_11137(carte) : pol='h' srate=27500 chaines = { '717' : ('fra' , 'fra TV5MONDE FBS'), '719' : ('fra' , 'fra TV5MONDE Europe'), '257' : ('ara' , 'ara ANN'), '258' : ('ara' , 'ara Kurdistan TV')} class Hotbird_11240(carte) : pol='v' srate=27500 chaines = { '244' : ('fra' , 'fra France 24'), '247' : ('eng' , 'eng France 24'), '401' : ('fra' , 'fra RTBF sat')} class Hotbird_11604(carte) : pol='h' srate=27500 chaines = { '500' : ('ita' , 'ita TLA'), '600' : ('ger' , 'ger Das Erste'), '700' : ('ger' , 'ger DW TV'), '800' : ('divers' , 'divers DW tv arabic (ara eng ger)'), '900' : ('ger' , 'ger RTL2 Schweiz'), '2600' : ('ger' , 'ger Erde Mensch'), '1600' : ('x-ero' , 'x-ero hot arab tv'), '3200' : ('x-ero' , 'x-ero xxx Action TV')} class Hotbird_11623(carte) : pol='v' srate=27500 chaines = {} class Hotbird_11642(carte) : pol='h' srate=27500 chaines = { '5003' : ('eng' , 'eng Bloomberg Europe'), '5004' : ('eng' , 'eng Bloomberg Europe"'), '5005' : ('eng' , 'eng Bloomberg U.K.'), '256' : ('gre' , 'gre ERT World')} class Hotbird_11727(carte) : pol='v' srate=27500 chaines = {} class Hotbird_11766(carte) : pol='v' srate=27500 chaines = { '1104' : ('ita' , 'ita Rai Uno'), '1105' : ('ita' , 'ita Rai Duo'), '1106' : ('ita' , 'ita Rai Tre'), '260' : ('ita' , 'ita Rai Med'), '1107' : ('ita' , 'ita eng Senato italiano'), '1107' : ('eng' , 'eng ita Senato italiano'), '261' : ('ita' , 'ita Rai Edu2')} class Hotbird_11539(carte) : pol='h' srate=27500 chaines = {} class Hotbird_12111(carte) : pol='v' srate=27500 chaines = { '1028' : ('ara' , 'ara Al Jazeera Documentary'), '1029' : ('ara' , 'ara Al Jazeera Mubasher'), '1030' : ('ita' , 'ita ACM - Architecture Construction Materials'), '1031' : ('ara' , 'ara Al Jazeera Satellite Channel'), '1032' : ('ita' , 'ita Silicia Channel'), '1034' : ('ita' , 'ita High life TV'), '1040' : ('ita' , 'ita Radio Radio TV'), '1042' : ('ita' , 'ita MediterraneoSat 1')} class Hotbird_12597(carte) : pol='v' srate=27500 chaines = { '1027' : ('eng' , 'eng BBC World'), '1031' : ('rus' , 'rus ORT International'), '1032' : ('eng' , 'eng CNN radio'), '1034' : ('fra' , 'fra autres Euronews'), '1034 2221 2232 768' : ('eng' , 'eng Euronews')} class Hotbird_12539(carte) : pol='h' srate=27500 chaines = { '4436' : ('ara fra' , 'ara fra Canal Algerie'), '4439' : ('ara fra' , 'ara fra Algerie 3'), '5123' : ('fra' , 'fra DIRECT 8'), '5124' : ('fra' , 'fra TV8 Mont Blanc')} class TNT_base(carte) : qam="auto" trans_mode="auto" guardinterval="auto" coderate="auto" bandwidth="8MHz" class TNT_R1_586000(TNT_base) : chaines = { '110' : ('TNT' , 'TNT02 France 2'), '210' : ('TNT' , 'TNT03 France 3'), '310' : ('TNT' , 'TNT05 France 5'), '510' : ('TNT' , 'TNT07 Arte'), '610' : ('TNT' , 'TNT13 LCP Public Senat'), '710' : ('TNT' , 'TNT20 France O')} class TNT_R2_474000(TNT_base) : chaines = { '1280' : ('TNT' , 'TNT08 Direct 8'), '1282' : ('TNT' , 'TNT15 BFM TV'), '1283' : ('TNT' , 'TNT16 i tele'), '1284' : ('TNT' , 'TNT17 Virgin17'), '1286' : ('TNT' , 'TNT14 France 4'), '1285' : ('TNT' , 'TNT18 Gulli')} #les pids ont tendance a changer souvent pour canal, on en met le plus possible --> plus maintenant avec le nouveau mumu class TNT_R3_522000(TNT_base) : chaines = { '1280' : ('TNT' , 'TNT04 Canal')} class TNT_R4_498000(TNT_base) : chaines = { '110' : ('TNT' , 'TNT06 M6'), '210' : ('TNT' , 'TNT09 W9'), '310' : ('TNT' , 'TNT11 NT1'), '710' : ('TNT' , 'TNT57 Arte HD')} class TNT_R5_538000(TNT_base) : chaines = { '110' : ('TNT' , 'TNT51 TF1 HD'), '210' : ('TNT' , 'TNT52 France 2 HD'), '310' : ('TNT' , 'TNT56 M6 HD')} class TNT_R6_562000(TNT_base) : chaines = { '100' : ('TNT' , 'TNT01 TF1'), '600' : ('TNT' , 'TNT10 TMC'), '200' : ('TNT' , 'TNT12 NRJ12')} class TNT_R7_490000(TNT_base) : chaines = { '4321' : ('TNT' , 'TNT21 Canal 21 : Cinaps TV, BDM TV, Bocal TV, Demain TV'), '4322' : ('TNT' , 'TNT22 IDF1'), '4323' : ('TNT' , 'TNT23 NRJ Paris'), '4324' : ('TNT' , 'TNT24 Cap 24')}