Buenas, estoy desarrollando un servicio de streaming DVB-C (por cable vamos) con la ayuda del programa OpenCaster.
Os describo la situación brevemente:
1 - Tendo un servidor que manda paquetes TS a través de diferentes puertos.
2 - En el primer puerto envía el primer paquete con 5 canales.
3 - En el siguiente puerto, envía el segundo paquete con 6 canales diferentes
(No se puede realizar el envío de todos los canales a través de un mismo puerto, ya que el proveedor de canales los manda a través de distintos puerto con IDs repetidas, con lo cual colisionarían algunos datos)
Cada paquete tiene su tabla NIT, la cual describe los servicios que esta contiene, el puerto desde donde los escucha y la frecuencia (además de la velocidad de símbolos):
nit = network_information_section(
network_id = 3001,
network_descriptor_loop = [
network_descriptor(network_name = "asdf",),
],
transport_stream_loop = [
transport_stream_loop_item(
transport_stream_id = 1,
original_network_id = 3001,
transport_descriptor_loop = [
service_list_descriptor(
dvb_service_descriptor_loop = [
service_descriptor_loop_item(
service_ID = tve_service_id,
service_type = 1,
),
service_descriptor_loop_item(
service_ID = antena3_service_id,
service_type = 1,
),
service_descriptor_loop_item(
service_ID = cuatro_service_id,
service_type = 1,
),
service_descriptor_loop_item(
service_ID = tele5_service_id,
service_type = 1,
),
service_descriptor_loop_item(
service_ID = cuatro_service_id,
service_type = 1, # digital tv service type
),
],
),
transport_stream_cable_descriptor(
frequency = 0x03060000,
FEC_outer = 0x0000,
modulation = 0x03, # 64 QAM
symbol_rate = 0x00069000,
FEC_inner = 0x0000,
),
frequency_list_descriptor( #No realiza ningún cambio
coding_type = 10,
frequency_list_descriptor_loop = [
frequency_descriptor_loop_item(
center_frequency = 0x03060000,
),
frequency_descriptor_loop_item(
center_frequency = 0x03140000,
),
],
),
],
),
],
version_number = 1,
section_number = 0,
last_section_number = 0,
)
El problema viene cuando realizo una búsqueda automática o manual desde el sintonizador, al encontrar el primer paquete este deja de buscar, cuando debería continuar...
Se que existe un descriptor llamado frecuency_list_descriptor, pero no tiene implementación en OpenCaster (cree una clase que lo implementara pero no ha funcionado):
class frequency_descriptor_loop_item(DVBobject):
def pack(self):
fmt = "!L"
return pack(fmt,
self.center_frequency,
)
class frequency_list_descriptor(Descriptor):
descriptor_tag = 0x62
def bytes(self):
frequency_list_bytes = string.join(
map(lambda x: x.pack(),
self.frequency_list_descriptor_loop),
"")
FMT = "!%dsB" % len(frequency_list_bytes)
return pack(FMT,
frequency_list_bytes,
self.coding_type
)