entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

OpenCaster para DVB-C: Enviar toda la lista de frecuencias

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
                    )

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta