323 lines
7.9 KiB
Python
323 lines
7.9 KiB
Python
#! /usr/bin/env python
|
|
# -*- coding: iso8859-15 -*-
|
|
|
|
"""
|
|
Configuration de base des différents transpondeurs disponibles
|
|
"""
|
|
|
|
#Auteurs: Frédéric Pauget, Brice Dubost, Nicolas Dandrimont
|
|
#Licence : GPLv2
|
|
|
|
from commands import getoutput
|
|
from time import sleep
|
|
import os, socket
|
|
|
|
import textwrap
|
|
|
|
IP = socket.gethostbyaddr(socket.gethostname())[-1][0]
|
|
|
|
class CardBusy(Exception) :
|
|
""" La carte est déja utilisée """
|
|
|
|
class NotRunning(Exception) :
|
|
""" La carte ne diffuse rien """
|
|
|
|
class Card(object):
|
|
""" 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 = 100 #en secondes
|
|
|
|
srate = 0
|
|
bandwidth = ""
|
|
|
|
template_conf_TNT = textwrap.dedent("""\
|
|
### Fichier généré par /usr/scripts/tv/*
|
|
### Ne pas éditer !
|
|
|
|
# Autoconfiguration complète
|
|
autoconfiguration=2
|
|
|
|
# Configuration multicast
|
|
multicast_auto_join=1
|
|
common_port=1234
|
|
|
|
# Ne pas toucher aux chaines chiffrées
|
|
dont_send_scrambled=1
|
|
dvr_buffer_size=100
|
|
|
|
# Configuration de la carte TNT
|
|
freq=%(freq)i
|
|
card=%(card)i
|
|
bandwidth=%(bandwidth)s
|
|
|
|
# Timeouts
|
|
timeout_accord=%(timeout_accord)i
|
|
timeout_no_diff=%(timeout_no_diff)i
|
|
|
|
# Autoconfiguration des chaines
|
|
autoconf_ip4=239.%(ip)s.%%card.%%number
|
|
autoconf_lcn=1
|
|
autoconf_name_template=TNT%%lcn %%name
|
|
|
|
# Configuration SAP
|
|
sap_organisation=crans
|
|
sap_default_group=TNT
|
|
""")
|
|
|
|
|
|
template_conf_SAT = textwrap.dedent("""\
|
|
### Fichier généré par /usr/scripts/tv/*
|
|
### Ne pas éditer !
|
|
|
|
# Autoconfiguration complète
|
|
autoconfiguration=2
|
|
|
|
# Configuration multicast
|
|
multicast_auto_join=1
|
|
common_port=1234
|
|
|
|
# Ne pas toucher aux chaines chiffrées
|
|
dont_send_scrambled=1
|
|
dvr_buffer_size=100
|
|
|
|
# Configuration de la carte Sat
|
|
freq=%(freq)i
|
|
pol=%(pol)s
|
|
card=%(card)i
|
|
srate=%(srate)i
|
|
|
|
# Timeouts
|
|
timeout_accord=%(timeout_accord)i
|
|
timeout_no_diff=%(timeout_no_diff)i
|
|
|
|
# Autoconfiguration des chaines
|
|
autoconf_ip=239.%(ip)s.%%card.%%number
|
|
autoconf_lcn=1
|
|
autoconf_name_template=%%name
|
|
|
|
# Configuration SAP
|
|
sap_organisation=crans
|
|
sap_default_group=%(sap)s
|
|
""")
|
|
|
|
template_conf_sid = textwrap.dedent("""\
|
|
|
|
# Liste des chaines à diffuser
|
|
autoconf_sid_list=%(sids)s
|
|
""")
|
|
|
|
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(self.__class__.__name__.split('_')[-1])
|
|
self.pol = ''
|
|
except ValueError:
|
|
try:
|
|
self.freq = int(self.__class__.__name__.split('_')[-1][:-1])
|
|
self.pol = self.__class__.__name__.split('_')[-1][-1]
|
|
except ValueError:
|
|
# On ne pourra pas faire grand chose à part killer le flux de la carte
|
|
self.freq = ''
|
|
self.pol = ''
|
|
self.classe = self.__class__.__name__.split('_')[0]
|
|
self.card = card
|
|
self.sap = self.classe
|
|
|
|
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
|
|
fd.write( getattr(self, 'template_conf_%s' % self.classe) %
|
|
{ 'bandwidth' : self.bandwidth,
|
|
'freq' : self.freq ,
|
|
'card' : self.card ,
|
|
'timeout_accord' : self.timeout_accord ,
|
|
'timeout_no_diff' : self.timeout_no_diff,
|
|
'pol': self.pol,
|
|
'sap': self.sap,
|
|
'srate': self.srate,
|
|
'ip': IP.split('.')[-1]} )
|
|
if hasattr(self, 'sid_list'):
|
|
fd.write(self.template_conf_sid %
|
|
{ 'sids' : " ".join(str(sid) for sid in self.sid_list) })
|
|
|
|
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" % (self.__class__.__name__, self.card)
|
|
|
|
self.gen_conf()
|
|
if self.verbose >0 : print " OK"
|
|
|
|
class TNT_base(Card) :
|
|
"""
|
|
Classe de base pour les transpondeurs TNT. On pourra se référer au site du
|
|
CSA pour une liste des fréquences. À Cachan, on capte l'émission de la Tour
|
|
Eiffel.
|
|
http://www.csa.fr/Media/Files/Television/La-reception/Liste-des-canaux-affectes-aux-multiplex-de-la-TNT-en-metropole-et-outre-mer
|
|
"""
|
|
|
|
bandwidth="8MHz"
|
|
|
|
@classmethod
|
|
def freqByChannel(cls, channel):
|
|
"""
|
|
Renvoie la fréquence (en MHz) correspondant à un canal donné.
|
|
À titre indicatif.
|
|
Voir la page perso:
|
|
http://tvignaud.pagesperso-orange.fr/tv/canaux.htm
|
|
"""
|
|
if channel < 21 or channel > 60:
|
|
raise IndexError('Canal non utilisé en France')
|
|
return 474. + (channel-21)*8
|
|
|
|
class TNT_R1_586000(TNT_base):
|
|
"""
|
|
Canal: 35
|
|
France 2, France 5, France Ô, LCP, France 3
|
|
"""
|
|
pass
|
|
|
|
class TNT_R2_506000(TNT_base):
|
|
"""
|
|
Canal: 25
|
|
D8, BFM TV, i>TELE, D17, Gulli, France 4
|
|
"""
|
|
pass
|
|
|
|
class TNT_R3_482000(TNT_base):
|
|
"""
|
|
Canal: 22
|
|
Note: Canal+ : pas de diffusion la plupart du temps...
|
|
"""
|
|
timeout_no_diff=0
|
|
|
|
class TNT_R4_546000(TNT_base):
|
|
"""
|
|
Canal: 30
|
|
M6, W9, NT1, PARIS PREMIERE, ARTE HD
|
|
"""
|
|
pass
|
|
|
|
class TNT_R5_530000(TNT_base):
|
|
"""
|
|
Canal: 28
|
|
TF1 HD, France 2 HD, M6HD
|
|
"""
|
|
pass
|
|
|
|
class TNT_R6_562000(TNT_base):
|
|
"""
|
|
Canal: 32
|
|
TF1, NRJ12, TMC, ARTE
|
|
"""
|
|
pass
|
|
|
|
class TNT_L8_570000(TNT_base):
|
|
"""
|
|
Transpondeur local, aka R15.
|
|
Canal: 33
|
|
À Cachan, on reçoit:
|
|
Canal 31, IDF1, NRJ Paris, BFM Business
|
|
"""
|
|
pass
|
|
|
|
|
|
class TNT_R7_642000(TNT_base):
|
|
"""
|
|
Canal: 42
|
|
HD1, Équipe 21, Chérie 25
|
|
"""
|
|
pass
|
|
|
|
class TNT_R8_770000(TNT_base):
|
|
"""
|
|
Canal: 58
|
|
6ter, Numero 23, RMC découverte
|
|
"""
|
|
pass
|
|
|
|
class SAT_UK_base(Card):
|
|
sap="UK"
|
|
|
|
class SAT_10773h(SAT_UK_base):
|
|
"""BBC"""
|
|
srate = 22000
|
|
|
|
class SAT_10714h(SAT_UK_base):
|
|
"""Channel4"""
|
|
srate = 22000
|
|
sid_list = [
|
|
9211, # Channel4
|
|
9220, # Film4
|
|
9225, # Film4 +1
|
|
9230, # More4 +1
|
|
]
|
|
|
|
class SAT_11344h(SAT_UK_base):
|
|
"""Food Network"""
|
|
srate = 27500
|
|
sid_list = [ 53260, # Food Network
|
|
53270, # Food Network +1
|
|
53280, # wedding tv
|
|
]
|
|
|
|
class SAT_11895v(SAT_UK_base):
|
|
"""MTV"""
|
|
srate = 27500
|
|
|
|
class SAT_12480v(SAT_UK_base):
|
|
"""Channel 4"""
|
|
srate = 27500
|
|
|
|
class SAT_11343v(SAT_UK_base):
|
|
"""Sex"""
|
|
srate = 27500
|
|
|
|
class SAT_11222h(SAT_UK_base):
|
|
"""Random"""
|
|
srate = 27500
|
|
sid_list = [
|
|
52001, # UCB
|
|
52002, # Horror channel +1
|
|
#52004, Ummah
|
|
52005, # Sony TV
|
|
#52006, # Jewelry
|
|
52007, #CBS Action
|
|
#52008, # Get lucky (porn)
|
|
52010, # Summer hits TV
|
|
52014, # BT Sport 1
|
|
#52040, # Sportxxxgirls (porn)
|
|
#52050, # Northern Birds (porn)
|
|
52056, # Controversial TV
|
|
52060, # Heat (chaîne de musique)
|
|
52065, # Magic (chaîne de musique)
|
|
52070, # Klear TV (chaîne de musique)
|
|
52085, # Muslim World
|
|
]
|