-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDvbViewer.py
More file actions
150 lines (128 loc) · 5.34 KB
/
DvbViewer.py
File metadata and controls
150 lines (128 loc) · 5.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import lameDB
import Kingofsat
LOF_SW = 11700
LOF_1 = 9750
LOF_2 = 10600
class Channel:
def __init__(self, lamedbService: lameDB.Service, kingofsat: Kingofsat.Service, kofAudioID):
self.TunerType = 1 # 1 - Sat, 2 - Terrestrial
self.Root = None # List tree name
self.Category = None # Category
self.Name = lamedbService.ChannelName # Channel name
self.OrbitalPos = lamedbService.Transponder.Data.OrbitalPosition # OrbitalPosition
self.NetworkID = lamedbService.Transponder.OriginalNetworkID # OriginalNetworkID
self.StreamID = lamedbService.Transponder.TransportStreamID # TransportStreamID
self.SID = lamedbService.ServiceID # Service ID
self.Encrypted = 25 # ??
self.FEC = self.__fec(lamedbService.Transponder.Data.FEC)
self.Frequency = self.__frequency(lamedbService.Transponder.Data.Frequency) # Frequency
self.Polarity = self.__polarity(lamedbService.Transponder.Data.Polarization) # Polarization
self.Symbolrate = self.__symbolrate(lamedbService.Transponder.Data.SymbolRateBPS) # SymbolRateBPS
self.SatModulation = self.__satmodulation(lamedbService.Transponder.Data.Modulation,
lamedbService.Transponder.Data.System,
lamedbService.Transponder.Data.Rolloff,
lamedbService.Transponder.Data.Pilot) # Modulation & Rolloff & Pilot & System
self.LNB = self.__lnb(self.__frequency(lamedbService.Transponder.Data.Frequency))
self.LNBSelection = self.__lnb_selection(self.__frequency(lamedbService.Transponder.Data.Frequency))
self.SubStreamID = None
self.AC3 = None
self.Group = None
self.Volume = None
self.EPGFlag = None
self.AudioChannel = None
if kingofsat:
self.PMTPID = kingofsat.PMTPID
self.VPID = kingofsat.VPID
self.APID = kofAudioID[0]
self.PCRPID = kingofsat.PCR
self.Language = kofAudioID[1] if len(kofAudioID[1]) > 0 else str(kofAudioID[0])
self.TelePID = kingofsat.TeletextPID
if kofAudioID != kingofsat.APIDS[0]:
self.Name = "{} ({})".format(self.Name, self.Language)
self.Encrypted = self.Encrypted | 0B10000000
def __lnb(self, frequency):
if frequency < LOF_SW:
return LOF_1
else:
return LOF_2
def __lnb_selection(self, frequency):
if frequency < LOF_SW:
return 0
else:
return 1
def __fec(self, fec):
EnigmaMap = {}
EnigmaMap["0"] = "-1"
EnigmaMap["1"] = "0"
EnigmaMap["2"] = "1"
EnigmaMap["3"] = "2"
EnigmaMap["4"] = "3"
EnigmaMap["5"] = "4"
EnigmaMap["6"] = "6"
EnigmaMap["7"] = "7"
EnigmaMap["8"] = "5"
EnigmaMap["9"] = "8"
return EnigmaMap[fec]
def __frequency(self, frequency):
return frequency // 1000
def __polarity(self, polarity):
if polarity == 0:
return 'h'
elif polarity == 1:
return 'v'
print("Polarity unknown: {0}".format(polarity))
return None
def __symbolrate(self, symbolrate):
return symbolrate // 1000
def __rolloff(self, rolloff):
if rolloff is None:
return 0b11
else:
return rolloff & 0b11
def __pilot(self, pilot):
if pilot == 0:
return 0
elif pilot == 1:
return 0
elif pilot == 2:
return 1
print("Pilot unknown: {0}".format(pilot))
return None
def __satmodulation(self, modulation, system, rolloff, pilot):
satModulation = modulation # DVBViewer: 00 = Auto, 01 = QPSK, 10 = 8PSK, 11 = 16QAM
satModulation |= (system & 1) << 2
satModulation |= self.__rolloff(rolloff) << 3
satModulation |= self.__pilot(pilot) << 7
return satModulation
class DvbViewer():
def __init__(self, rootname):
self.Channels = []
self.rootname = rootname
def addservice(self, service: lameDB.Service, kingofsat: Kingofsat.Service, name):
if kingofsat:
# For each audio id create new dvbViewer channel
for audio in kingofsat.APIDS:
self.__addchannel(service, kingofsat, name, audio)
else:
self.__addchannel(service, None, name, None)
def __addchannel(self, service: lameDB.Service, kof: Kingofsat.Service, name, kofAudioID):
channel = Channel(service, kof, kofAudioID)
channel.Root = self.rootname
channel.Category = name
self.Channels.append(channel)
def save(self, filename):
file = open(filename, encoding='utf-8', mode="w")
keyMap = {"LNBSelection": "LNB-Selection"}
channelCount = 0
for channel in self.Channels:
file.write('[Channel{0}]\n'.format(channelCount))
for v, k in channel.__dict__.items():
if k is None:
continue
if v in keyMap:
file.write('{0}={1}\n'.format(keyMap[v], k))
else:
file.write('{0}={1}\n'.format(v, k))
file.write('\n')
channelCount = channelCount + 1
file.close()