344 lines
9.5 KiB
Python
Executable file
344 lines
9.5 KiB
Python
Executable file
#! /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 = {}
|
|
|
|
|
|
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')}
|
|
|
|
|