tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de...

154
Escuela Politécnica Superior de Linares HERRAMIENTA DE ANÁLISIS DE UN TRANSPORT STREAM DVB-T Alumno: Mireya Aguilera Martos Tutor: Prof. D. Luis Ramón López López Co-tutor: Prof. D. José Enrique Muñoz Expósito Depto.: Ingeniería de Telecomunicación Febrero, 2020 UNIVERSIDAD DE JAÉN Escuela Politécnica Superior de Linares Trabajo Fin de Grado

Transcript of tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de...

Page 1: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Escu

ela

Po

lité

cn

ica

Su

pe

rio

r d

e L

ina

res

HERRAMIENTA DE ANÁLISIS DE

UN TRANSPORT STREAM DVB-T

ESCUELA POLITÉCNICA

SUPERIOR DE LINARES

HERRAMIENTA DE ANÁLISIS DE

UN TRANSPORT STREAM DVB-T

ESCUELA POLITÉCNICA

SUPERIOR DE LINARES

Alumno: Mireya Aguilera Martos

Tutor: Prof. D. Luis Ramón López López

Co-tutor: Prof. D. José Enrique Muñoz Expósito

Depto.: Ingeniería de Telecomunicación

Febrero, 2020

UNIVERSIDAD DE JAÉN

Escuela Politécnica Superior de Linares

Trabajo Fin de Grado

Page 2: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

2

UNIVERSIDAD DE JAÉN

Escuela Politécnica Superior de Linares

Grado en Ingeniería de Tecnologías de Telecomunicación

Trabajo Fin de Grado

Herramienta de Análisis de un Transport Stream DVB-T

Alumno: Mireya Aguilera Martos

Fdo.________________________

Tutor: Luis Ramón López López

Fdo.________________________

Tutor: José Enrique Muñoz Expósito

Fdo.________________________

Page 3: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

3

Índice de contenido

ÍNDICE DE ILUSTRACIONES .............................................................................. 7

ÍNDICE DE TABLAS ............................................................................................. 8

1. RESUMEN ...................................................................................................... 9

1.1. RESUMEN .................................................................................................. 9

1.2. ABSTRACT ................................................................................................. 9

Lista de Acrónimos ........................................................................................10

2. ESTADO DEL ARTE Y OBJETIVOS .............................................................12

2.1. OBJETIVOS ...............................................................................................12

2.2. ESTADO DEL ARTE ....................................................................................12

2.3. JUSTIFICACIÓN DE LAS DECISIONES ADOPTADAS .........................................14

2.4. ORGANIZACIÓN DEL TRABAJO ....................................................................16

3. EVOLUCIÓN DE LA TELEVISIÓN DIGITAL .................................................17

3.1. ORÍGENES DE LA TELEVISIÓN. ....................................................................17

3.2. HISTORIA DE LA TELEVISIÓN EN ESPAÑA .....................................................21

4. ESTÁNDAR MPEG-2 Y APLICACIÓN EN DVB-T .........................................24

4.1. INTRODUCCIÓN .........................................................................................24

4.2. TABLAS DE INFORMACIÓN DE SERVICIO (SI) ...............................................28

4.2.1. Mecanismo de tablas SI. Uso de secciones ........................................28

4.3. MAPEO DE SECCIONES EN UN PAQUETE TS. ...............................................29

4.4. CODIFICACIÓN DE LOS CAMPOS PID Y TABLE_ID .........................................29

4.4.1. Program Association Table (PAT).......................................................29

4.4.2. Conditional Access Table (CAT) .........................................................29

4.4.3. Program Map Table (PMT) .................................................................29

4.4.4. Network Information Table (NIT) .........................................................30

4.4.5. Bouquet Association Table (BAT) .......................................................30

4.4.6. Service Description Table (SDT) ........................................................30

4.4.7. Event Information table (EIT) ..............................................................30

4.4.8. Running Status Table (RST) ...............................................................30

4.4.9. Time and Date Table (TDT) ................................................................30

4.4.10. Time Offset Table (TOT) ...................................................................30

4.4.11. Stuffing Table (ST) ............................................................................30

4.4.12. Selection Information Table (SIT) ......................................................30

Page 4: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

4

4.4.13. Discontinuity Information Table (DIT) ................................................31

4.5. TABLAS DEFINIDAS EN EL ESTÁNDAR INTERNACIONAL ISO/IEC 13818-1 .......31

4.5.1. Capa de paquetes de Transport Stream .............................................31

4.5.2. Transporte de secuencias de programas y secuencias de sistemas

ISO/IEC 11172-1 en el Transport Stream .................................................................33

4.5.3. Información específica de programa (PSI). .........................................34

4.5.4. Tabla de Asociación de Programas (PAT) ..........................................35

4.5.5. Tabla de Acceso Condicional (CAT) ...................................................37

4.5.6. Tabla de Mapeo de Programas (PMT) ................................................37

4.6. DEFINICIÓN SEMÁNTICA DE CAMPOS EN DESCRIPTORES DE ELEMENTOS DE

PROGRAMA 39

4.6.1. Video Stream Descriptor .....................................................................40

4.6.2. Audio Stream Descriptor .....................................................................41

4.6.3. Hierarchy Descriptor ...........................................................................42

4.6.4. Registration Descriptor .......................................................................43

4.6.5. Data Stream Aligment Descriptor .......................................................44

4.6.6. Target Background Grid Descriptor ....................................................45

4.6.7. Video Window Descriptor ...................................................................46

4.6.8. Conditional Access Descriptor ............................................................47

4.6.9. ISO 639 Language Descriptor ............................................................48

4.6.10. System Clock Descriptor ...................................................................49

4.6.11. Multiplex Buffer Utilization Descriptor ................................................50

4.6.12. Copyright Descriptor .........................................................................50

4.6.13. Maximum Bitrate Descriptor ..............................................................51

4.6.14. Private Data Indicator Descriptor ......................................................51

4.6.15. MPEG-4 Video Descriptor .................................................................52

4.6.16. MPEG-4 Audio Descriptor .................................................................52

4.6.17. SL Descriptor ....................................................................................52

4.6.18. FMC Descriptor .................................................................................53

4.6.19. External_ES_ID Descriptor ...............................................................54

4.6.20. Multiplex Buffer Descriptor ................................................................55

5. REVISIÓN DEL ALGORITMO Y PROCESO DE DESARROLLO ..................56

5.1. ENTORNO DE TRABAJO ..............................................................................56

5.2. REVISIÓN DEL ALGORITMO .........................................................................57

5.2.1. Código de análisis de la cabecera de un Transport Stream ................58

5.2.2. Diagrama de flujo de la lectura de bytes. ............................................60

Page 5: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

5

5.2.3. Algoritmo de lectura de N bits. ............................................................61

5.2.4. Algoritmo de salto de N bits. ...............................................................62

5.2.5. Algoritmo de lectura de una cadena de caracteres. ............................63

5.2.6. Código de análisis de la PAT. .............................................................63

5.2.7. Código de análisis de la SDT. .............................................................65

5.2.8. Código de análisis de la PMT. ............................................................66

5.3. INSERCIÓN DEL CONTENIDO EN UNA BASE DE DATOS ...................................68

5.4. VISUALIZACIÓN DEL CONTENIDO DEL TRANSPORT STREAM ..........................69

5.4.1. Página principal ..................................................................................69

5.4.2. Lista de programas .............................................................................69

5.4.3. Lista de componentes.........................................................................69

5.4.4. Página de administración ...................................................................69

5.4.5. Inserción de un Transport Stream.......................................................69

6. RESULTADOS OBTENIDOS ........................................................................71

6.1. PÁGINA PRINCIPAL ....................................................................................72

6.2. LISTA DE PROGRAMAS ...............................................................................73

6.3. LISTA DE COMPONENTES ...........................................................................74

6.4. PÁGINA DE ADMINISTRACIÓN ......................................................................75

6.5. ADMINISTRACIÓN DE TRANSPORT STREAM .................................................76

7. DIFICULTADES ENCONTRADAS ................................................................77

8. CONCLUSIONES Y LÍNEAS DE FUTURO ...................................................78

ANEXO A: CÓDIGO DE PROYECTO ..................................................................80

1. TRANSPORTSTREAMPARSER.PHP ..................................................................80

2. INDEX.PHP ................................................................................................. 113

3. SHOWSDT.PHP .......................................................................................... 117

4. SHOWPROGRAM.PHP ................................................................................. 119

5. PANEL-CONTROL.PHP ................................................................................. 123

6. CHECKLOGIN.PHP ....................................................................................... 126

7. LOGOUT.PHP .............................................................................................. 127

8. SELECT.PHP............................................................................................... 128

9. DELETEMODIFY.PHP ................................................................................... 132

10. PID.PHP ................................................................................................. 136

11. INSERTFILE.PHP ..................................................................................... 137

12. CONFIG.PHP ........................................................................................... 139

Page 6: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

6

ANEXO B. ACCESO A LA BASE DE DATOS ................................................... 140

ANEXO C. TABLA DE ISO/IEC 8859-1. ALFABETO LATINO N.1 ................... 142

BIBLIOGRAFÍA ................................................................................................. 143

Page 7: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

7

Índice de ilustraciones

Figura 2.1.Arquitectura de la aplicación en modo usuario¡Error! Marcador no

definido.

Figura 2.2.Arquitectura de la aplicación en modo administrador¡Error! Marcador no

definido.

Figura 2.3. Diagrama de ejemplo de uso de la herramienta¡Error! Marcador no

definido.

Figura 3.1. Funcionamiento de un disco de Nipkow................................................ 17

Figura 3.2.Representación esquemática de un escaneo progresivo. ...................... 17

Figura 3.3. Esquema de un iconoscopio. ................................................................ 18

Figura 3.4. Representación esquemática de un escaneo entrelazado. ................... 19

Figura 3.5. Vista de una línea de una señal de vídeo compuesta monocromática. . 19

Figura 4.1. Generación de un Transport Stream ..................................................... 25

Figura 4.2. Proceso de demultiplexado de transporte para un programa ................ 26

Figura 4.3.Tablas MPEG-2 ..................................................................................... 27

Figura 4.4. Relación entre las tablas a analizar por la herramienta ......................... 27

Figura 4.5. Área de visualización del Target Background Grid Descriptor .............. 45

Figura 5.1. Esquema de un paquete Transport Stream .......................................... 59

Figura 5.2. Diagrama de flujo de leerN ................................................................... 61

Figura 6.6.1. Página principal ................................................................................. 72

Figura B.0.1. Estado de WAMPServer.................................................................. 140

Figura B.0.2. Página de acceso a phpMyAdmin ................................................... 140

Figura B.0.3. Vista general de la base de datos dvbmpeg .................................... 141

Page 8: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

8

Índice de tablas

Tabla 1. Esquema de un Transport Stream ..........................................................31

Tabla 2. Valor de adaptation_field_control ............................................................32

Tabla 3. Tablas PSI ..............................................................................................34

Tabla 4. Esquema PAT ........................................................................................35

Tabla 5. Valores del campo table_id .....................................................................36

Tabla 6. Esquema CAT ........................................................................................37

Tabla 7. Esquema PMT ........................................................................................38

Tabla 8. Valores del campo descriptor_tag ...........................................................39

Tabla 9. Esquema de Video Stream Descriptor ....................................................41

Tabla 10. Esquema de Audio Stream Descriptor ..................................................41

Tabla 11. Esquema de Hierarchy Descriptor ........................................................42

Tabla 12. Valores del campo hierarchy_type ........................................................43

Tabla 13. Esquema de Registration Descriptor .....................................................43

Tabla 14. Esquema de Data Stream Alignment Descriptor ...................................44

Tabla 15. Valores del campo alignment_type para vídeo .....................................44

Tabla 16. Valores del campo alignment_type para audio .....................................45

Tabla 17. Esquema de Target Background Grid Descriptor ..................................45

Tabla 18. Esquema de Video Window Descriptor .................................................46

Tabla 19. Esquema de Conditional Access Descriptor .........................................47

Tabla 20. Esquema de ISO 639 Language Descriptor ..........................................48

Tabla 21. Valores del campo audio_type ..............................................................49

Tabla 22. Esquema de System Clock Descriptor ..................................................49

Tabla 23. Esquema de Multiplex Buffer Utilization Descriptor ...............................50

Tabla 24. Esquema de Copyright Descriptor ........................................................50

Tabla 25. Esquema de Maximum Bitrate Descriptor .............................................51

Tabla 26. Esquema de Private Data Indicator Descriptor .....................................51

Tabla 27. Esquema de MPEG-4 Video Descriptor ................................................52

Tabla 28. Esquema de MPEG-4 Audio Descriptor ................................................52

Tabla 29. Esquema de SL Descriptor ...................................................................53

Tabla 30. Esquema de FMC Descriptor ................................................................53

Tabla 31. Esquema de External ES ID Descriptor ................................................54

Tabla 32. Esquema de Multiplex Buffer Descriptor ...............................................55

Page 9: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

9

1. RESUMEN

1.1. Resumen

Este Trabajo de Fin de Grado es una herramienta que permite el estudio de la

estructura de un Transport Stream DVB-T con fines didácticos, que se enmarca dentro del

campo de procesado de señales de vídeo. El trabajo consistirá en el desarrollo de una

aplicación capaz de analizar, mediante la interacción con el usuario, un elemento de tipo

Transport Stream para poder determinar y mostrar el contenido almacenado. Esta

herramienta se va a desarrollar en NetBeans IDE 8.2, en código PHP, HTML y SQL. La

herramienta se visualizará desde un navegador web con pestañas interactivas que mostrará

al usuario el contenido almacenado en la base de datos tras analizar el Transport Stream,

así como la modificación de la descripción y eliminación del mismo.

Palabras clave: procesado de vídeo, MPEG, DVB-SI, HTML, PHP, SQL.

1.2. Abstract

In this dissertation, we propose a practical tool that allows the study of the structure of

a Transport Stream DVB-T with didactics purposes, which is part of the field of video signal

processing. The work will consist in the development of an application capable of analysing,

through interaction with the user, an element of Transport Stream type to be able to determine

and show the stored content. This tool will be developed in NetBeans IDE 8.2, in PHP, HTML

and SQL code. The tool will be displayed from a web browser with interactive tabs that will

show the user the content stored in the database after analysing the Transport Stream, as

well as the modification of the description and removal of it.

Key words: MPEG, DVB-T, video signal processing, HTML, PHP, SQL.

Page 10: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

10

Lista de Acrónimos

TDT Televisión Digital Terrestre

DVB-T Digital Video Broadcasting-Terrestrial

MPEG Moving Pictures Expert Group

COFDM Coded Orthogonal Frequency Division Multiplexing

CRT Cathode Ray Tube

VHF Very High Frequency

NTSC National Television System Committee

CCIR International Radio Consultative Committee

SECAM Sequential colour with memory

PAL Phase Alternating Line

EMM Entitlement Management Message

ETM Extended Text Message

ECM Entitlement Control Messages

PCR Program Clock Reference

PES Packetized Elementary Stream

IPTV Internet Protocol TV

ADSL Asymmetric digital subscriber line

FTTH Fiber To The Home

TS Transport Stream

PAT Program Association Table

PMT Program Map Table

SDT Service Description Table

GUI Graphical User Interface

PHP PHP: Hypertext Preprocessor

MySQL My Structured Query Language

SQL Structured Query Language

SI Service Information

MPEG Moving Picture Experts Group

NIT Network Information Table

ES Elementary Stream

PES Packetized Elementary Stream

Page 11: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

11

PSI Program Specific Information

CAT Conditional Access Table

BAT Bouquet Association Table

EIT Event Information Table

RST Running Status Table

TDT Time and Date Table

TOT Time Offset Table

ST Stuffing Table

SIT Section Information Table

DIT Discontinuity Information Table

Page 12: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

12

2. ESTADO DEL ARTE Y OBJETIVOS

2.1. Objetivos

El principal objetivo de este trabajo de fin de grado es el desarrollo y la

implementación de una herramienta capaz de analizar la unidad básica de transporte digital

del estándar MPEG-2, el Transport Stream, a través del lenguaje de programación PHP. A

partir de un fichero de entrada, la herramienta será capaz de extraer las diferentes tablas y

partes que componen un Transport Stream y visualizar el contenido extraído en un

navegador, donde permitirá al usuario ver la relación existente entre las diferentes partes del

Transport Stream analizado. Además, dicha herramienta almacenará el contenido extraído

del Transport Stream en una base de datos, la cual podrá ser modificado su contenido o

eliminar alguno de sus registros.

Con el fin de conseguir este objetivo principal, se han propuesto conseguir los

siguientes objetivos:

• Diseño de una herramienta que permita estudiar la estructura de un Transport

Stream DVB-T.

• Implementación de la herramienta.

• Documentación acerca del uso de la herramienta

2.2. Estado del arte

En las últimas décadas, la digitalización como concepto ha abarcado todo el amplio

abanico de la tecnología y la televisión no ha estado exenta de ello. La Televisión Digital

Terrestre, también conocida como TDT, combina la televisión digital con la transmisión

terrestre, emitiendo por los canales de la televisión convencional analógica. La novedad de

la TDT es su difusión a través de ondas hertzianas terrestres y, además, es de uso gratuito,

en el sentido que no hay que realizar el pago de ninguna cuota mensual para poder tener

acceso al contenido. [1]

La TDT consigue aumentar la oferta de programas, mejorar la calidad de imagen y

sonido, facilitar la recepción, ampliar la interactividad, ofrecer aplicaciones multimedia y

permitir programas con diferentes coberturas: nacional, autonómica y local. Uno de los

principales atractivos es la interactividad, con la que se facilita la interacción de los usuarios

con la programación y, además, ofrece servicios y aplicaciones útiles para el comercio,

información y aprendizaje, entre otros. [1]

Con este antecedente, se puede observar que la Televisión Digital Terrestre

comprende una innovación tecnológica muy importante. Como parte de este proceso, nos

encontramos con la etapa de multiplexación de las señales. El estándar DVB-T, Difusión de

Page 13: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

13

Video Digital-Terrestre, utiliza MPEG-2 para la transmisión de audio, vídeo y otros datos,

usando una modulación de “Multiplexación por División de Frecuencia Ortogonal Codificada”

(COFDM). MPEG-2 es similar a MPEG-1, pero también proporciona soporte para vídeo

entrelazado y tiene disposiciones para una compatibilidad hacia HDTV mediante el uso de

niveles y perfiles más altos. Esto dio lugar a la estandarización de tres variantes para los

diversos medios de transmisión: satélite (DVB-S), cable (DVB-C) y terrestre (DVB-T), que se

produjo entre 1994 y 1996. [2]

En los últimos años del siglo XX, han aparecido otras formas de televisión digital:

televisión digital por cable, televisión digital terrestre (TDT) y, más recientemente, televisión

digital a través de la línea de abonado de teléfono (IPTV sobre ADSL o FTTH). Estos

desarrollos han provocado el desuso de la televisión analógica en Europa. [2]

Por otro lado, la rápida disminución de los precios de los televisores grandes de

pantalla plana con una resolución compatible con los requisitos de HDTV los hace ahora

accesibles a un público que ha ido aumentando en número. Esta caída de precios coincide

con la disponibilidad de estándares de compresión más efectivos (como MPEG-4 AVC/

H.264) que, finalmente, han permitido el desarrollo a gran escala de HDTV en Europa.

En la actualidad, se pueden encontrar un sinfín de opciones que permiten al usuario

el estudio de un Transport Stream sin necesidad de un demultiplexor para el estudio de su

contenido. Por ejemplo, podemos encontrar herramientas como:

• Programa de análisis de streams DVB/MPEG, DVBSNOOP, cuyo propósito

es depurar, volcar o ver la información de la transmisión digital enviadas por

satélite, cable o terrestre [1]. Para poder visualizar el valor de los PIDs

transmitidos es necesario ejecutar en Linux el programa dvbsnoop con el

parámetro -s pidscan -tssubdecode -pd 6. Para poder acceder a los datos

asociados a la PAT se deberá ejecutar la utilidad con los siguientes

parámetros: dvbsnoop -s ts -pd 4 -tssubdecode -nph 0x00. Tras lanzar este

comando, se visualizará una lista de los programas y el PID asociado.

• Programa de análisis de streams DemuxToy Middleware Analyser [2]. Se

trata de una aplicación que, introduciendo un fichero como parámetro de

entrada, devuelve el contenido que se encuentra en el Transport Stream.

Page 14: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

14

• Programa de análisis de streams DVB Inspector [3]. Es un analizador de

código abierto DVB, escrito en Java. Puede mostrar la estructura lógica de los

datos DVB SI y PSI. También muestra datos de uso de velocidad de bits. Se

puede utilizar para analizar contenidos; estructura de video MPEG, teletexto,

subtítulos DVB, carruseles de objetos DSM-CC, etc.

La gran mayoría de los programas que analizan Transport Stream ofrecen una serie

de inconvenientes que resulta conveniente resaltar:

• Dan demasiada información al usuario y no muestran la relación que existe

entre las diferentes tablas que forman el Transport Stream.

• Son complejos de usar y requieren de un conocimiento previo de la materia

para facilitar la navegación entre la información.

• No están disponibles sin conexión. Algunos programas necesitan de una

conexión a Internet para poder realizar el análisis de los datos.

• Son aplicaciones de pago. Algunas aplicaciones requieren de su compra por

parte del usuario para poder acceder a su uso.

• Resultan poco pedagógicos. El contenido que muestran no está adaptado

para un uso docente o para una fácil comprensión por parte de un alumno

que visualiza por primera vez el contenido de un Transport Stream.

• Requieren del sistema operativo Linux para poder ejecutar la aplicación.

Este trabajo se enfocará precisamente en el estudio del estándar MPEG-2 y de la

unidad básica de transporte digital, los paquetes MPEG-2 Transport Stream de una manera

didáctica, fácil, intuitiva y sin necesidad de tener acceso a una conexión de Internet por parte

del usuario.

2.3. Justificación de las decisiones adoptadas

A la hora de desarrollar este proyecto uno de los puntos fundamentales fue la

intención de uso de esta herramienta. Un ejemplo de ello sería en un aula donde un profesor

realiza una captura de un Transport Stream mediante un capturador y lo inserta en la

aplicación, en modo administrador, para su análisis. Después, el alumno desde su

Page 15: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

15

ordenador, podrá acceder a la aplicación en modo usuario y visualizará un listado con los

Transport Streams que han sido insertados por el profesor y profundizar en el contenido de

éstos de una manera rápida y eficaz.

Si el profesor necesitase añadir un nuevo archivo para analizar, los resultados de

éste se mostrarían en el ordenador del usuario tras un periodo corto de tiempo.

Figura 2.1. Diagrama de ejemplo de uso de la herramienta

Otro de los puntos fue qué tipo de herramienta se quería implementar. Existía la

opción de implementar una aplicación de escritorio o una aplicación web. La elección de

desarrollar una aplicación web se basó principalmente en la libertad de ejecución que tiene,

pues cualquier ordenador con la aplicación WAMPServer instalado es capaz de ejecutar esta

herramienta sin necesidad de instalar contenido adicional.

Otro de los puntos fundamentales para el desarrollo fue la elección del lenguaje de

programación que se iba a implementar. Se eligió finalmente el uso de PHP junto a SQL.

PHP es un lenguaje de código abierto especialmente adecuado para el desarrollo web y que

puede ser incrustado en HTML. Además, lo que distingue a PHP de algo del lado del cliente

como JavaScript es que el código es ejecutado en el servidor, generando HTML y enviándolo

al cliente. El cliente recibirá el resultado de ejecutar el script, aunque no se sabrá el código

Profesor Estudiante

Page 16: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

16

subyacente que era. El servidor web puede ser configurado para que procese todos los

ficheros HTML con PHP, por lo que no hay manera de que los usuarios puedan saber qué

se tiene debajo de la manga. [6]

La elección de MySQL como gestor de la base de datos de nuestra herramienta se

basó en la adaptabilidad existente entre PHP y SQL. Es relativamente sencillo generar una

conexión entre PHP y MySQL para poder gestionar los datos que se analizarán a lo largo de

la ejecución de la herramienta, así como poder crear conexiones con programas externos

como HeidiSQL o Microsoft Management SQL Server.

2.4. Organización del trabajo

La memoria se dividirá en tres bloques bien diferenciados:

• En primer lugar, los apartados 3 y 4 servirán como revisión de conocimientos.

Se incluirá una introducción de la evolución de la televisión en España y su

digitalización, así como una introducción teórica del estándar MPEG para

comprender mejor el trabajo realizado. En concreto, en el apartado 3, se hablará

sobre conceptos generales de vídeo y de la digitalización de estándares de

televisión. El apartado 4 servirá como revisión de los conocimientos

relacionados con el estándar MPEG y su aplicación en DVB-T.

• En el apartado 5, se describirá el algoritmo utilizado y el proceso de desarrollo

de la herramienta de análisis de un Transport Stream DVB-T. También se

incluirá un esquema general de la aplicación que permitirá comprender el

funcionamiento de la misma y las partes que la componen.

• Por último, en los apartados 6 y 7, se expondrán y evaluarán los resultados

obtenidos y las conclusiones que se pueden extraer de los mismos.

Page 17: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

17

3. EVOLUCIÓN DE LA TELEVISIÓN DIGITAL

3.1. Orígenes de la televisión.

Debemos tener en cuenta que todos los estándares de televisión actuales que se

encuentran en uso en la actualidad derivan de los estándares de televisión “en blanco y

negro” que tuvieron inicio en las décadas de 1940 y 1950, que han definido su marco. Los

primeros intentos en la televisión electromecánica comenzaron a finales de la década de

1920, utilizando el disco Nipkow para el análisis y la reproducción de la escena que se

televisaría, con una definición de 30 líneas y 12.5 imágenes por segundo. [2]

Figura 3.1. Funcionamiento de un disco de Nipkow.

Esta baja definición dio resultado en un ancho de banda de vídeo de menos de 10

kHz, permitiendo que esas imágenes se transmitiesen en un transmisor AM/MW o LW

ordinario. La resolución pronto mejoró a 60, 90 e, incluso, 120 líneas, y luego se estabilizó

por un tiempo en 180 líneas (Alemania, Francia) o 240 líneas (Inglaterra, Estados Unidos)

alrededor del año 1935. El escaneo fue progresivo, lo que significa que todas las líneas de

las imágenes se escaneaban secuencialmente en un cuadro, tal y como se muestra en la

figura 3.2.

Figura 3.2.Representación esquemática de un escaneo progresivo.

Page 18: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

18

Estas definiciones, utilizadas para las primeras transmisiones “regulares”, fueron el

límite práctico para el disco Nipkow utilizado para el análisis de imágenes; el tubo de rayos

catódicos (CRT) comenzó a utilizarse para la visualización en la parte del receptor. Con el

fin de evitar las perturbaciones debidas a la radiación electromagnética de los

transformadores o una ondulación en la fuente de alimentación, la velocidad de imagen (o

frame rate) se derivó de la frecuencia de la red. Esto dio lugar a tasas de actualización de

25 imágenes por segundo en Europa y 30 imágenes por segundo en Estados Unidos. El

ancho de banda requerido fue del orden de 1 MHz, lo que implica el uso de frecuencias VHF

(del orden de 40-50 MHz) para la transmisión. Sin embargo, la resolución espacial de estas

primeras imágenes de TV aún era insuficiente, y se vieron afectadas por un parpadeo muy

molesto debido al hecho de que su frecuencia de actualización era demasiado baja.

Durante los años que precedieron a la Segunda Guerra Mundial, el análisis de las

imágenes se volvió completamente electrónico con la invención del iconoscopio [3] (Figura

3.3) y las definiciones en so alcanzaron a 405 líneas (Inglaterra), 441 líneas (Estados Unidos,

Alemania) o 455 líneas (Francia) gracias al uso del escaneado entrelazado. Este ingenioso

método, inventado en 1927, consistió en escanear un primer campo formado por las líneas

impares del marco y luego un segundo campo formado por las líneas pares (Figura 3.4), lo

que permite que la tasa de actualización de la imagen para una resolución vertical dada

pueda duplicarse (50 o 60 Hz en vez de 25 o 30 Hz) sin aumentar por ello el ancho de banda

requerido para la transmisión.

Figura 3.3. Esquema de un iconoscopio.

Page 19: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

19

Figura 3.4. Representación esquemática de un escaneo entrelazado.

Sin embargo, la necesidad de mantener un enlace entre la velocidad de la imagen y

la frecuencia de la red llevó inevitablemente a estándares diferentes a ambos lados del

Atlántico, incluso cuando el número de líneas era idéntico (como en el caso de los sistemas

de 441 líneas de Estados Unidos y Alemania). Estos sistemas compartían las siguientes

características comunes:

• Una señal de imagen compuesta única que combinaba información de vídeo,

blanqueo y sincronización, también descrita como señal de banda base de vídeo

(Figura 3.5).

• Un escaneo entrelazado (de orden 2), reconocido como el que tiene el mejor

compromiso entre parpadeo y ancho de banda requerido. [4]

Figura 3.5. Vista de una línea de una señal de vídeo compuesta monocromática.

Poco después, debido al aumento en el tamaño del tubo de imagen, y teniendo en

cuenta la resolución del ojo en condiciones normales de visión, la resolución espacial de

estos sistemas todavía parecía insuficiente, y la mayoría de los expertos propusieron una

definición vertical de entre 500 y 700 líneas. Las siguientes características se eligieron en

Page 20: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

20

1941 para el sistema monocromático de Estados Unidos, que más tarde se convirtió en

NTSC (Comité Nacional de Sistemas de Televisión) cuando se actualizó a color en 1952:

• 525 líneas, con escaneo entrelazado (dos campos de 262.5 líneas);

• Frecuencia de campo, 60 Hz (cambiada a 59.94 Hz tras la introducción del color);

• Frecuencia de línea, 15750 Hz (60 x 262.5); más tarde cambió a 15735 Hz con

color (59.94 x 262.5);

• Ancho de banda de vídeo, 4.2 MHz; modulación de vídeo negativa;

• Sonido FM con portadora a 4.5 MHz por encima de la portadora de imágenes.

Después de la Segunda Guerra Mundial, a partir de 1949, la mayoría de los países

europeos, exceptuando Francia y Reino Unido, adoptaron el estándar alemán GERBER,

también conocido como CCIR. Puede verse como una adaptación del sistema de Estados

Unidos a una frecuencia de campo de 50 Hz, manteniendo una frecuencia de línea lo más

cercana posible a 15750 Hz; esto permitió aprovechar la experiencia estadounidense con la

tecnología de recepción. Esta elección implicó un mayor número de líneas,

aproximadamente en el radio 60/50, y, en consecuencia, un ancho de banda más amplio

para obtener resoluciones horizontales y verticales bien equilibradas. Se definieron las

siguientes características:

• 625 líneas, escaneo entrelazado (dos campos de 312.5 líneas);

• Frecuencia de campo, 50 Hz;

• Frecuencia de línea, 15625 Hz (50 x 312.5),

• Ancho de banda de vídeo, 5 MHz; modulación de vídeo negativa;

• Transmisión de sonido FM 5.5 MHz sobre la portadora de imágenes.

Esto ha formado la base de todos los estándares de color europeos: PAL, SECAM,

D2-MAC, PAL+…

Hasta principios de la década de 1980, se han utilizado diferentes sistemas en el

Reino Unido (405 líneas, lanzadas en 193 y reiniciadas después de una larga interrupción

durante la guerra) y en Francia (819 líneas, lanzadas en 1949 por Henri de France, que

también inventó el sistema SECAM en 1957). Estos sistemas no se adaptaron a la televisión

en color para la transmisión debido a la casi imposibilidad de la conversión del estándar con

los medios técnicos disponibles en ese momento, y finalmente se abandonaron después de

un período de transmisión simultánea con el nuevo estándar de color.

Page 21: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

21

3.2. Historia de la televisión en España

La historia de la televisión en España está fuertemente relacionada con la de la radio.

En noviembre de 1938, durante el desarrollo de la Guerra Civil, se produjo la primera

exhibición de televisión. Diez años más tarde, se produjeron las primeras demostraciones

en España, las cuales fueron realizadas por empresas privadas como Philips y RCA, con el

fin de convencer a autoridades de difundir sus emisiones. Así, Philips organizó pruebas

televisivas difundiendo programas musicales y humorísticos para el público en 1948 en el

marco de la Feria de Muestras de Barcelona. El éxito fue inmenso. A partir de ello, en 1951-

1952, TVE comenzó sus emisiones en prueba. [5]

En octubre de 1956, comenzaron oficialmente las emisiones regulares en España.

Consistían en la retransmisión de la misa, de discursos oficiales, etc. En febrero de 1959, se

estrenaba el primer partido de fútbol. Una multitud de ciudadanos compraron televisores en

la Ciudad Condal, fue un enorme éxito. Sin embargo, y pese a su inmenso éxito, se tardó

años en que la mayoría de españoles pudieran tener acceso a los programas. Entre los años

1960 y 1964 fue llegando la televisión a los hogares.

Antes de estas fechas, un televisor era un producto de gran lujo que había que

importar desde el extranjero, y al que solamente tenían acceso una ínfima parte de la

población. A partir de los primeros años 1960, los poderes públicos plantearon políticas para

incentivar el consumo y potenciar la penetración del medio en la sociedad. Así el Estado

tomó diversas medidas como la venta a plazos y tarifas inferiores.

Al final de la década, se estimaba un total de 3 millones y medio de aparatos en

España, lo que equivalía al 40% de los hogares de todo el país. Sin embargo, había una

gran diferencia dependiendo de la zona, lugares como Madrid y Barcelona contaban con un

70% de televisores, mientras que en ciudades pequeñas apenas el 25% tenía un televisor.

Por ello, aparecieron los parques de televisores y teleclubs en las zonas rurales. Sin

embargo, su éxito fue limitado, ya que el televisor no era un aparato prioritario para los

españoles.

En la segunda mitad de los años 1960, la televisión se convirtió en la principal forma

de ocio. TVE vivía su Edad de Oro. Ya no tenía problemas financieros y proponía numerosos

programas competitivos en los festivales europeos. Así, los ingresos provenían de los

anuncios y la cadena aumentaba el tiempo de publicidad o subía las tarifas de los anuncios

cuando necesitaba fondos, pues en España la publicidad televisiva no se encontraba

prohibida o limitada.

Page 22: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

22

La televisión en color apareció y cambió radicalmente la imagen de un punto de vista

técnico. TVE adoptó el sistema PAL en 1970. Los programas no eran tan diferentes de lo

presente, aunque las técnicas variaron muchísimo desde aquella época. Las cadenas

difundían producciones extranjeras, largometrajes y series.

Durante la transición (1976-1982), la televisión tuvo un papel decisivo, ya que era la

principal forma de información y conocimiento de millones de personas. Dirigió varias

operaciones:

• Erosionó los valores sociales de la dictadura y TVE se esforzó en contrarrestar

los valores de paz, orden y estabilidad que prevalecían durante el franquismo

frente a los de libertad y democracia.

• Legitimó el régimen de libertades y la televisión desarrolló tácticas programáticas

para la noche de las elecciones.

• Elaboró una política pedagógica de los nuevos valores democráticos a través de

series como Curro Jiménez, Cañas y barro, etc., donde se trataba de presentar

personajes en una sociedad en plena transformación, los cuales aprenden de sus

errores y buscan un mundo mejor.

Los gustos de los espectadores iban cambiando poco a poco a favor de programas

que reflejaron gustos más cercanos a la sensibilidad contemporánea.

En 1980, por primera vez en España, se promulgaba una reglamentación con rango

de ley, el Estatuto de la Radio y la televisión, con el objetivo de establecer una normativa

jurídica democrática que controlase el sistema televisivo español. Fue el resultado de un

consenso entre el partido del gobierno de la época (Unión de Centro Democrático) y el

principal partido de la oposición (PSOE). Ya hacía algunos años que los partidos españoles

reivindicaban la creación de un “Consejo Superior”, un órgano independiente de los poderes

públicos que organizara el sector. Estos años están marcados por el crecimiento de las horas

de emisión y de las cifras de audiencia. La televisión se convertía en un fenómeno social:

era un medio de comunicación de gran alcance y repercusión.

En los años 1990, aparecían televisiones privadas de cobertura estatal con una

programación similar a la de TV1: Antena 3, Tele 5 y Canal +. En consecuencia, todas las

emisoras tuvieron que adaptarse a un nuevo marco competitivo y reorganizar el

funcionamiento del sector en función de la audiencia.

La televisión española tuvo cambios drásticos en los últimos años, alrededor del año

2000, debido en parte a la aparición más que evidente de la competencia. Ahora, el criterio

básico consiste en satisfacer las demandas del público y conseguir el mayor número de

Page 23: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

23

audiencia. Por eso, las televisiones privilegian los programas dirigidos a ciertos

consumidores para cada banda horaria. Es la razón por la que han aparecido muchos

programas minoritarios como, por ejemplo, el cine en blanco y negro o los programas

infantiles. Eso es lo que se conoce como “guerra de audiencias”, el motor de las televisiones.

El gusto del público también ha cambiado. Mientras que en los años 1980

predominaban los largometrajes estadounidenses, en la actualidad, la balanza se inclina

más hacia programas deportivos y series. Sin embargo, sigue existiendo en la actualidad los

programas especiales como los debates electorales, o las bodas reales.

En la actualidad, nos encontramos con la televisión digital, unida a internet. Los

espectadores se convierten, una vez más en usuarios-consumidores y se debe pagar por

ciertos servicios interactivos adicionales como, por ejemplo, televisión a la carta. Este es el

claro ejemplo de cómo ciertas plataformas han sufrido un crecimiento exponencial en los

últimos años, siendo Netflix su máximo exponente, seguido de plataformas como HBO y

Amazon Prime. [6]

Page 24: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

24

4. ESTÁNDAR MPEG-2 Y APLICACIÓN EN DVB-T

4.1. Introducción

Para poder comentar las características del estándar MPEG y DVB-T, antes hay que

realizar una introducción de estos términos y la relación que existe entre ambos.

MPEG-2, Moving Picture Experts Group 2, es la designación para un grupo de

estándares de codificación de audio y vídeo acordado por MPEG y publicados como

estándar ISO 13818. Por lo general se usa este grupo de estándares para la codificación de

audio y vídeo en señales de transmisión, que incluyen Televisión Digital Terrestre, por

satélite o cable. [11]

Este grupo de estándares introduce y define Transport Streams, que son diseñados

para transportar audio y vídeo digital a través de medios impredecibles e inestables y son

utilizados en transmisiones televisivas.

Un Transport Stream es un protocolo de comunicación para audio, vídeo y datos

especificado en los estándares de MPEG-2. Los flujos de datos de cada programa de

televisión se comprimen independientemente formando cada uno de ellos un ES (Elementary

Stream) o “corriente elemental” que, a su vez se estructuran en forma de paquetes llamados

PES (Packetized Elementary Stream). [12]

Estos paquetes de audio y vídeo, así como otros datos del programa, pasan

posteriormente a un multiplexor donde se conforma un solo tren binario. Para esta

multiplexación, el grupo de estándares de PMEG-2 distingue entre dos posibilidades: la

conformación de un PS (Program Stream) y la conformación de un TS (Transport Stream).

Un Transport Stream es apropiado para entornos ruidosos, opción que encaja en las

necesidades de la difusión de TDT. Esta opción exige pasar los paquetes PES a otros

paquetes más cortos, de 188 bytes de longitud, y aplicar técnicas de corrección de errores.

Un Transport Stream puede formarse con varios programas de televisión y cada uno

de ellos con varios ES. Los ES que forman un mismo programa de televisión deben ser

sincrónicas, sin embargo, los diferentes programas pueden tener cada uno una

sincronización independiente. En este caso se organiza un canal de múltiplex con todos los

programas. Esto se puede visualizar en la figura 4.1. [12]

Page 25: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

25

Figura 4.1. Generación de un Transport Stream

Para poder explicar correctamente qué es DVB antes hay que definir qué es un

múltiplex. Son circuitos combinacionales con varias entradas y una única salida de datos, y

están dotados de entradas de control capaces de seleccionar una y, solo una, de las

entradas de datos para permitir su transmisión desde la entrada seleccionada hacia la salida.

En este contexto el múltiplex se utiliza como un dispositivo que puede recibir varias

entradas y transmitirlas por un medio de transporte compartido. Para ello lo que hace es

dividir el medio de transmisión en múltiples canales, para que varios nodos puedan

comunicarse al mismo tiempo. [13]

El esquema de multiplexado puede describirse como una combinación de

multiplexado en dos capas diferentes. En la primera, los flujos de transporte se forman

multiplexando uno o más flujos elementales en la capa de transporte. En la segunda, los

flujos de transporte se combinan, generalmente por multiplexado asíncrono de paquetes,

para formar el sistema completo. La capa en el sistema, que contiene la información tanto al

nivel de programa como al nivel de sistema, se designa como de información específica de

programa (PSI).

Un Transport Stream se forma multiplexando ES, con o sin empaquetado PES, que

comparten una base de tiempo común. Según estos ES se multiplexan, se organizan en

Page 26: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

26

paquetes de transporte y se agrega un flujo binario de control que describe el programa. Los

ES y flujos binarios de control se identifican por sus respectivos y únicos PIDs en el

encabezado del Transport Stream. El flujo de control contiene la PMT, que describe el mapa

del ES e incluye información de los PIDs de transporte que constituyen el programa, así

como la identificación de las aplicaciones que se transmiten en esos flujos, la relación entre

dichos flujos, etc. [12]

Esta relación entre flujos se puede ver claramente en la figura 4.2 y 4.3.

Figura 4.2. Proceso de demultiplexado de transporte para un programa

Page 27: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

27

Figura 4.3.Tablas MPEG-2

Para este proyecto se ha tenido en cuenta la relación entre las diferentes partes de

un Transport Stream de la siguiente manera: (figura 4.4.)

Figura 4.4. Relación entre las tablas a analizar por la herramienta

Page 28: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

28

DVB-T, siglas de Digital Video Broadcasting – Terrestrial, en español: Difusión de

Vídeo Digital – Terrestre, es el estándar para la transmisión de Televisión Digital terrestre

(TDT) creado por la organización europea Digital Video Broadcasting (DVB). Es un sistema

que transmite audio, vídeo y otros datos a través de un flujo MPEG-2, usando una

modulación de “Multiplexación por División de Frecuencia Ortogonal Cruzada” (COFDM).

4.2. Tablas de Información de Servicio (SI)

4.2.1. Mecanismo de tablas SI. Uso de secciones

La especificación de tablas de Información de Servicio, en adelante SI, en el presente

documento y las tablas MPEG-SI se segmentarán en una o más secciones antes de

insertarse en paquetes TS.

Las tablas, cuando se transmitan, no se codificarán, con la excepción del EIT, que

podrá ser codificado si fuera necesario.

Una sección es una estructura sintáctica que se utilizará para asignar todas las tablas

MPEG-2 y las tablas SI especificadas en el presente documento, en paquetes TS.

Estas estructuras sintácticas se ajustan a la sintaxis de la sección privada definida en

ISO/IEC 13818-1. [6]

Las secciones son de longitud variable y dentro de cada tabla estarán limitadas a

1024 bytes de longitud, excepto para las secciones del EIT que estarán limitadas a 4096

bytes. Cada sección se identificará de forma única mediante la combinación de los siguientes

elementos:

• Table_id: Identifica a qué tabla pertenece la sección.

• Table_id_extension: es utilizada para la identificación de una sub_table.

• Section_number: el campo permite que el decodificador vuelva a montar las

secciones de una sub_table determinada en su orden original. Se recomienda,

que las secciones se transmitan en orden numérico, a menos que se desee

transmitir algunas secciones con más frecuencias que otras.

• Version_number: Cuando cambien las características del TS descritas en el SI

que se indican en la ETSI EN 300 468 v.1.15.1 [7], se enviarán los nuevos datos

del SI que contengan la información actualizada. Una nueva versión de los datos

SI se señala enviando una subtabla con los mismos identificadores que la

subtabla anterior que contiene los datos relevantes, pero con el siguiente valor

de version_number.

Page 29: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

29

• Current_next_indicator: Cada sección será numerada como válida “ahora”

(actualmente) o como válida en el futuro inmediato (siguiente). Esto permite la

transmisión de una versión futura del SI antes del cambio, dando al decodificador

la oportunidad de prepararse para éste. Sin embargo, no hay ningún requisito

para transmitir la siguiente versión de una sección con antelación, pero si se

transmite, entonces será la siguiente versión correcta de esa sección.

4.3. Mapeo de secciones en un paquete TS.

Las secciones se asignarán directamente a los paquetes TS. Las secciones pueden

comenzar al principio de la carga útil de un paquete TS, pero esto no es un requisito, porque

el comienzo de la primera sección en la carga útil de un paquete TS es señalado por el

pointer_field. Nunca hay más de un pointer_field en un paquete TS, ya que el inicio de

cualquier otra sección se puede identificar contando la longitud de la primera y cualquier

sección posterior, ya que la sintaxis no permite brechas entre secciones dentro de un

paquete TS.

Dentro de los paquetes TS de cualquier valor PID único, una sección se termina antes

de que se permita que se inicie la siguiente, o de lo contrario no es posible identificar a qué

encabezado de sección pertenecen los datos. SI una sección termina antes del final de un

paquete TS, pero no es conveniente abrir otra sección, se puede utilizar un mecanismo de

relleno para rellenar el espacio. El relleno se puede realizar rellenando cada byte restante

del paquete con el valor “0xFF”.

4.4. Codificación de los campos PID y table_id

4.4.1. Program Association Table (PAT)

Para cada servicio en el multiplex, la PAT indica la ubicación (los valores del

identificador de paquetes (PID) de los paquetes del Transport Stream (TS)) de la tabla mapas

de programa (PMT) correspondiente. También da la ubicación de la tabla de información de

red (NIT).

4.4.2. Conditional Access Table (CAT)

La CAT proporciona la información sobre los sistemas de CA utilizados en el

multiplex; la información es privada y depende del sistema de CA, pero incluye la ubicación

de la secuencia Entitlement Management Message (EMM) cuando corresponda.

4.4.3. Program Map Table (PMT)

La PMT identifica e indica la ubicación de las secuencias que componen cada servicio

y la ubicación de los campos del PCR para un servicio.

Page 30: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

30

4.4.4. Network Information Table (NIT)

4.4.5. Bouquet Association Table (BAT)

La tabla BAT describe un bouquet y los servicios que en él se agrupan (de uno o

varios TS).

El término “Bouquet” se utiliza para referirse a una colección de servicios

comercializados como entidad única. Las tablas BAT ofrecen información sobre los bouquets

comercializados por los operadores de Televisión Digital.

4.4.6. Service Description Table (SDT)

La tabla SDT contiene datos que describen los servicios del sistema, por ejemplo,

nombres de servicio, el proveedor de servicios, etc.

4.4.7. Event Information table (EIT)

La tabla EIT contiene datos relativos a eventos o programas como el nombre del

evento, la hora de inicio, la duración, etc.

El uso de diferentes descriptores permite la transmisión de diferentes tipos de

información de eventos, por ejemplo, para diferentes tipos de servicio.

4.4.8. Running Status Table (RST)

La tabla RST proporciona el estado de un evento (en ejecución / no en ejecución). El

RST actualiza esta información y permite el cambio automático oportuno a eventos.

4.4.9. Time and Date Table (TDT)

La tabla TDT proporciona información relativa a la fecha y hora actuales. Esta

información se proporciona en una tabla separada debido a la actualización frecuente de

esta información.

4.4.10. Time Offset Table (TOT)

La tabla TDT proporciona información relativa a la fecha y hora actuales y la

compensación de la hora local. Esta información se proporciona en una tabla separada

debido a la actualización frecuente de esta información.

4.4.11. Stuffing Table (ST)

La tabla ST se utiliza para invalidar las secciones existentes, por ejemplo, en los

límites de los sistemas de entrega.

4.4.12. Selection Information Table (SIT)

La tabla SIT se utiliza sólo en bitstreams parciales. Lleva un resumen de la

información SI requerida para describir las secuencias en la corriente de bits parcial.

Page 31: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

31

4.4.13. Discontinuity Information Table (DIT)

La tabla DIT se utiliza sólo en bitstreams parciales. Se inserta donde la información

SI en la corriente de bits parcial puede ser discontinua.

4.5. Tablas definidas en el estándar internacional ISO/IEC 13818-1

4.5.1. Capa de paquetes de Transport Stream

Un Transport Stream siempre seguirá el siguiente esquema:

Tabla 1. Esquema de un Transport Stream

Sintaxis Número de bits

Transport_packet () {

Sync_byte

Transport_error_indicator

Payload_unit_start_indicator

Transport_priority

PID

Transport_scramblig_control

Adaptation_field_control

Continuity_counter

If (adaptation_field_control == ‘10’ || adaptation_field_control == ‘11’) {

Adaptation_field ()

}

If (adaptation_field_control == ‘01’ || adaptation_field_control == ‘11’) {

for (i=0; i<N; i++) {

data_byte

}

}

8

1

1

1

13

2

2

4

8

• Sync_byte: El byte de sincronización es un campo fijo de 8 bits cuyo valor es

0x47.

• Transport_error_indicator: es un indicador de 1 bit. Cuando se establece en

1 indica que existe al menos 1 error de bit no corregido en el paquete del

Transport Stream. Esto se puede establecer por 1 entidad externa a la capa

de transporte. Cuando se establece en 1 este bit, no se restablecerá a 0 a

menos que se hayan los errores presentes.

• Payload_unit_start_indicator: Es un indicador de 1 bit que tiene un

significado normativo para los paquetes de Transport Stream que transportan

paquetes PES o datos PSI.

Page 32: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

32

Cuando la carga útil del paquete Transport Stream contiene datos del paquete

PES, el payload_unit_start_indicator tiene el siguiente significado: un ‘1’ indica que la

carga útil de este paquete comenzará con el primer byte de un paquete PES; y un ‘0’

indica que ningún paquete PES empezará en este paquete Transport Stream. Si el

indicador está a ‘1’, entonces uno y solamente un paquete PES empezará en este

paquete Transport Stream.

Cuando la carga útil del paquete Transport Stream contiene datos del paquete

PSI, el payload_unit_start_indicator tiene el siguiente significado: un ‘1’ indica el

primer byte de la carga útil de este paquete Transport Stream contiene el

pointer_field. Si el paquete Transport Stream no contiene el primer byte de la sección

PSI, el indicador valdrá ‘0’.

• Transport_priority: Es un indicador de 1 bit. Cuando el indicador está

establecido en ‘1’ indica que el paquete asociado tiene más prioridad que

otros paquetes del mismo PID, pero con el indicador a ‘0’.

• PID: El PID es un campo de 13 bits que indica el tipo de datos

almacenados en la carga útil del paquete. El PID de valor 0x0000 está

reservado para la Program Association Table (PAT), el PID de valor

0x0001 está reservado para la Conditional Access Table (CAT). Los PID

de valores entre 0x0002 – 0x000F están reservados. El PID de valor

0x1FFF está reservado para paquetes de contenido nulo.

• Transport_scrambling_control: Es un indicador de 2 bits que indica el

modo de codificación de la carga útil del paquete. La cabecera y el campo

de adaptación del paquete no estarán codificados. En caso de que el

paquete sea nulo, el valor del campo de transport_scrambling_control será

‘00’.

• Adaptation_field_control: Es un indicador de 2 bits que indica si a la

cabecera de un paquete Transport Stream le sigue un campo de

adaptación o carga útil.

Tabla 2. Valor de adaptation_field_control

Valor Descripción

00 Reservado

01 Solamente carga útil

10 Sólo campo de adaptación

11 Campo de adaptación y carga útil

Page 33: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

33

• Continuity_counter: Es un campo de 4 bits que se incrementa con cada

paquete de un Transport Stream con el mismo PID. Vuelve al valor inicial

0 después de alcanzar su valor máximo. No se incrementará cuando el

campo adaptation_field_control de los paquetes sea ‘00’ o ‘10’.

• Data_byte: Los bytes de datos serán bytes contiguos de datos de los

paquetes PES, secciones PSI, bytes de relleno de paquetes después de

secciones PSI o datos privados que no estén en estas estructuras como

se indica en el PID. En el caso de paquetes nulos con el valor de PID

0x1FFF, data_bytes puede tener cualquier valor. El número de

data_bytes, N, se especifica como 1184 menos el número de bytes en el

adaptation_field ().

4.5.2. Transporte de secuencias de programas y secuencias de sistemas ISO/IEC

11172-1 en el Transport Stream

El Transport Stream contiene campos adicionales para admitir el transporte de

secuencias de programas y corrientes de sistemas ISO/IEC 11172-1, de una manera que

permite la reconstrucción simple de la secuencia respectiva en el decodificador.

Al colocar una secuencia de programa en un Transport Stream, los paquetes PES de

la secuencia del programa con los valores stream_id de private_stream_1, ITU-T Rec. H.262

| ISO/IEC 13818-2 o vídeo ISO/IEC 11172-2, e ISO/IEC 13818-3 o el audio ISO/IEC 11172-

3, se transportan en paquetes de Transport Stream. [8] [9] [10] [11] [12]

Para estos paquetes PES, al reconstruir el Program Stream en el decodificador de

Transport Stream, los datos del paquete PES se copian a la secuencia del programa que se

está reconstruyendo.

Para los paquetes PES de las secuencias de programa con valores stream_id de

program_stream_map, padding_stream, private_stream_2, Entitlement Control Messages

(ECM), EMM, DSM_CC_stream, o program_stream_directory, todos los bytes del paquete

PES de la secuencia de programa, excepto el packet_start_code_prefix, se colocan en los

campos data_bytes de un nuevo paquete PES. El stream_id de este nuevo paquete PES

tiene el valor de ancillary_stream. Este nuevo paquete será transportado en los paquetes

Transport Stream.

Al reconstruir el Program Stream en el decodificador Transport Stream, para

paquetes PES con un valor stream_id de ancillary_stream_id, el valor de

packet_start_code_prefix se escribe en la secuencia de programas que se está

Page 34: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

34

reconstruyendo, seguida de los campos data_byte de estos paquetes PES del Transport

Stream.

4.5.3. Información específica de programa (PSI).

La Información específica de programa incluye datos de las normativas ITU-T Rec.

H.222.0 | ISO/IEC 13818-1 y datos privados que permiten la demultiplexación de programas

por los decodificadores. Los programas se componen de una o más secuencias elementales,

cada una etiquetada por un PID. Los programas, streams elementales o sus partes pueden

codificarse para el acceso condicional. Sin embargo, la información específica del programa

no será codificada. [13] [6]

En los Transport Streams, la información específica del programa se clasifica en

cinco estructuras de tabla como se muestra en la tabla 3. Mientras estas estructuras pueden

ser consideradas tablas simples, pueden ser segmentadas en secciones y ser insertadas en

paquetes Transport Stream, algunas con PID predeterminados, y otras con PID

seleccionables por el usuario.

Tabla 3. Tablas PSI

Nombre Tipo de Stream Número de PID Descripción

Program

Association Table

(PAT)

ITU-T Rec. H.222.0

| ISO/IEC 13818-1 0x00

Asocia el número

de programa y el

PID de la Program

Map Table (PMT)

Program Map Table

(PMT)

ITU-T Rec. H.222.0

| ISO/IEC 13818-1

Asignación indicada

en la PAT

Especifica el valor

del PID para los

componentes de

uno o más

programas

Network Information

Program (NIT) Privado

Asignación indicada

en la PAT

Parámetros de la

red física como las

frecuencias FDM,

Números de

transpondedor…

Conditional Access

Table (CAT)

ITU-T Rec. H.222.0

| ISO/IEC 13818-1 0x01

Asocia uno o más

streams EEM

(privados), cada

uno con un PID

único.

Page 35: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

35

Transport Stream

Description Table

ITU-T Rec. H.222.0

| ISO/IEC 13818-1 0x02

Asocia uno o más

descriptores de la

tabla 8 a un

Transport Stream.

Las tablas PSI definidas de la ITU-T Rec. H.222.0 | ISO/IEC 13818-1 se segmentarán

en una o más secciones que serán transportadas dentro de los paquetes de transporte. Una

sección es una estructura sintáctica que será utilizada para mapear cada tabla PSI definida

en el Transport Stream. [13] [6]

4.5.4. Tabla de Asociación de Programas (PAT)

La tabla de asociación de programas, de ahora en adelante PAT, proporciona la

correspondencia entre un program_number y el valor PID de los paquetes de Transport

Stream que llevan la definición de programa. El program_number es la etiqueta numérica

asociada a un programa.

La PAT se estructura de la siguiente manera:

Tabla 4. Esquema PAT

Sintaxis Número de bits

Program_association_section () {

Table_id

Section_syntax_indicator

‘0’

reserved

section_length

transport_stream_id

reserved

version_number

current_next_indicator

section_number

last_section_number

for (i=0; i<N; i++) {

program_number

reserved

if (program_number == ‘0’) {

network_PID

} else {

Program_map_PID

8

1

1

2

12

16

2

5

1

8

8

16

3

13

13

Page 36: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

36

}

}

CRC_32

}

32

4.5.4.1. Valores de table_id

El campo table_id identifica el contenido de una sección PSI de un Transport Stream,

como se puede ver reflejado en la tabla 5:

Tabla 5. Valores del campo table_id

Valor Descripción

0x00 Program_association_section

0x01 Conditional_access_section

0x02 TS_program_map_section

0x03 TS_description_section

0x04 ISO_IEC_14496_scene_description_section

0x05 ISO_IEC_14496_object_descriptor_section

0x06-0x37 ITU-T Rec. H.222.0 | ISO/IEC 13818-1 reserved

0x38-0x3F Defined in ISO/IEC 13818-6 [14]

0x40-0xFE User private

0xFF Forbidden

4.5.4.2. Definición semántica de los campos en la PAT

• Table_id: Campo de 8 bits. Estará establecido a 0x00.

• Section_length: Campo de 12 bits, donde los dos primeros tienen un valor

de ‘00’. Los 10 bits restantes especifican el número de bytes de la sección,

empezando inmediatamente después del campo section_length, e incluye el

CRC.

• Transport_stream_id: Campo de 16 bits que sirve de etiqueta para identificar

este Transport Stream de otro múltiplex en la red. Su valor lo define el usuario.

• Program_number: Es un campo de 16 bits. Especifica el programa al que se

aplica el program_map_PID. Cuando se establece en 0x00, la siguiente

referencia será el PID de red (network PID). Para todos los demás casos, el

valor de este campo está definido por el usuario. Este campo no tomará

ningún valor único más de una vez dentro de la PAT.

Page 37: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

37

• Network_PID: El network_PID es un campo de 13 bits que se utiliza

solamente junto con el valor del program_number fijado a 0x00. Especifica el

PID de los paquetes del Transport Stream que contendrá la tabla de

información de red.

4.5.5. Tabla de Acceso Condicional (CAT)

La tabla de acceso condicional (CA) proporciona la asociación entre uno o más

sistemas de CA, sus secuencias EMM y cualquier parámetro especial asociado a ellos.

La tabla se encuentra en una o varias secciones con la sintaxis siguiente. Puede ser

segmentada para ocupar varias secciones.

Tabla 6. Esquema CAT

Sintaxis Número de bits

CA_section () {

Table_id

Section_syntax_indicator

‘0’

reserved

section_length

reserved

version_number

current_next_indicator

section_number

last_section_number

for (i=0; i<N; i++) {

descriptor ()

}

CRC_32

}

8

1

1

2

12

18

5

1

8

8

32

• Table_id: campo de 8 bits. Estará establecido a 0x01.

4.5.6. Tabla de Mapeo de Programas (PMT)

La tabla de mapeo de programas (PMT) proporciona las relaciones entre los números

de programa y los elementos de programa que los componen. Una sola instancia de dicha

asignación se conoce como una “definición de programa”. La PMT es la colección completa

de todas las definiciones de programa de un Transport Stream. Esta tabla se transmitirá en

Page 38: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

38

paquetes, cuyos valores PID son seleccionados por el codificador. Si se desea, se puede

utilizar más de un valor PID.

La tabla se encuentra en una o varias secciones con la sintaxis siguiente. Se puede

segmentar para ocupar varias secciones. En cada sección, el campo de section_number se

establecerá en 0. Las secciones se identifican mediante el campo program_number.

La definición de los campos del descriptor () se puede encontrar en la tabla 8.

Tabla 7. Esquema PMT

Sintaxis Número de bits

TS_program_map_section () {

Table_id

Section_syntax_indicator

‘0’

Reserved

section_length

program_number

reserved

version_number

current_next_indicator

section_number

last_section_number

reserved

PCR_PID

Reserved

Program_info_length

for (i=0; i<N; i++) {

descriptor ()

}

for (i=0; i<N1; i++) {

stream_type

reserved

elementary_PID

reserved

ES_info_length

for (i=0; i<N2; i++) {

descriptor ()

CRC_32

}

8

1

1

2

12

16

2

5

1

8

8

3

13

4

12

8

3

13

4

12

32

Page 39: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

39

4.5.6.1. Definición de los campos de la Tabla de Mapeo de Programas (PMT)

• Table_id: campo de 8 bits. En el caso de la PMT, éste tendrá siempre el valor

0x02.

• Program_number: campo de 16 bits. Especifica el programa al que se aplica

el program_map_PID. Una definición de programa se llevará dentro de una

sola PMT. Esto implica que una definición de programa nunca es mayor que

1016. El program_number puede ser utilizado como designación para un

canal de radiodifusión, por ejemplo. Al describir los diferentes elementos del

que programa que pertenecen a éste, los datos de diferentes fuentes (por

ejemplo, eventos secuenciales) se pueden concatenar para formar un

conjunto continuo de secuencias mediante un program_number.

• PCR_PID: Es un campo de 13 bits que indica el PID de los paquetes del

Transport Stream que contendrá los campos PCR, Program Clock Reference,

válidos para el programa especificado por program_number. Si no hay PCR

asociado a una definición de programa para secuencias privadas, este campo

tomará el valor 0x1FFF.

• Program_info_length: Campo de 8 bits, cuyos dos primeros bits tienen un

valor de ‘00’. Los restantes 10 bits especifican el número de bytes de los

descriptores que siguen al program_info_length_field.

• Stream_type: Campo de 8 bits que especifica el tipo de elemento de

programa que se transporta en los paquetes con el PID especificado en el

campo Elementary_PID.

• Elementary_PID: Campo de 13 bits que especifica el PID de los paquetes de

Transport Stream que transportan elementos de asociación de programa.

4.6. Definición semántica de campos en descriptores de elementos de

programa

La siguiente semántica se aplica a los descriptores definidos de 4.5.1 a 4.5.20.

• Descriptor_tag: campo de 8 bits que identifica el descriptor a utilizar.

• Descriptor_length: campo de 8 bits que especifica el número de bytes del

descriptor inmediatamente después del campo descriptor_length.

Tabla 8. Valores del campo descriptor_tag

Descriptor_tag Identificador

0 Reservado

Page 40: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

40

1 Reservado

2 Video_stream_descriptor

3 Audio_stream_descriptor

4 Hierarchy_descriptor

5 Registration_descriptor

6 Data_stream_alignment_descriptor

7 Target_backgroung_grid_descriptor

8 Video_window_descriptor

9 CA_descriptor

10 ISO_639_language_descriptor

11 System_clock_descriptor

12 Multiplex_buffer_utilization_descriptor

13 Copyright_descriptor

14 Maximum_bitrate_descriptor

15 Private_data_indicator_descriptor

16 Smoothing_buffer_descriptor

17 STD_descriptor

18 IBP_descriptor

19-26 Definidas en ISO/IEC 13818-6

27 MPEG-4_video_descriptor

28 MPEG-4_audio_descriptor

29 IOD_descriptor

30 SL_descriptor

31 FMC_descriptor

32 External_ES_ID_descriptor

33 MuxCode_descriptor

34 FmxBufferSize_descriptor

35 MultiplexBuffer_descriptor

4.6.1. Video Stream Descriptor

El descriptor de secuencia de vídeo proporciona información básica que identifica los

parámetros de codificación de una secuencia elemental de vídeo, tal y como se describe en

el ITU-T Rec. H.262 | ISO/IEC 13818-2 o ISO/IEC 11172-2. [8] [9] [10]

Page 41: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

41

Tabla 9. Esquema de Video Stream Descriptor

Sintaxis Número de bits

Video_stream_descriptor () {

Descriptor_tag

Descriptor_length

Multiple_frame_rate_flag

Frame_rate_code

MPEG_1_only_flag

Constrained_parameter_flag

Still_picture_flag

If (MPEG_1_only_flag == ‘0’) {

Profile_and_level_indication

Chroma_format

Frame_rate_extension_flag

Reserved

}

}

8

8

1

4

1

1

1

8

2

1

5

• MPEG_1_only_flag: Campo de 1 bit que cuando está a ‘1’ indica que la

secuencia de vídeo contiene solamente información de ISO/IEC 11172-2. Si

está a ‘0’ la secuencia de vídeo puede contener datos de ITU-T H.262 |

ISO/IEC 13818-2. [10] [8] [9]

4.6.2. Audio Stream Descriptor

El descriptor de secuencia de audio proporciona información básica que identifica la

versión de codificación de una secuencia elemental de audio como se describe en ISO/IEC

13818-3 o ISO/IEC 11172-3. [11] [12]

Tabla 10. Esquema de Audio Stream Descriptor

Sintaxis Número de bits

Audio_stream_descriptor () {

Descriptor_tag

Descriptor_length

Free_format_flag

ID

Layer

Variable_rate_audio_indicator

Reserved

}

8

8

1

1

2

1

3

Page 42: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

42

• Free_format_flag: Este campo de 1 bit cuando se establece en ‘1’ indica que

la secuencia de audio puede contener uno o más fotogramas de audio con el

bitrate_index establecido en ‘0000’. Si se establece en ‘0’, el bitrate_index no

es ‘0000’ en cualquier fotograma de audio de la secuencia de audio.

• ID: Este campo de 1 bit cuando está a ‘1’ indica que el campo ID está

establecido a ‘1’ en cada fotograma de audio de la secuencia de audio.

• Layer: Este campo de 2 bits está codificada del mismo modo que el campo

de capa en las secuencias de audio ISO/IEC 13818-3 o ISO/IEC 11172-3. La

capa indicada en este campo será igual o superior a la capa más alta

especificada en cualquier fotograma de audio de la secuencia de audio. [11]

[12]

4.6.3. Hierarchy Descriptor

El descriptor de jerarquía proporciona información para identificar los elementos del

programa que contienen componentes de vídeo y audio codificados jerárquicamente, y

secuencias privadas que se multiplexan en varias secuencias.

Tabla 11. Esquema de Hierarchy Descriptor

Sintaxis Número de bits

Hierarchy_descriptor () {

Descriptor_tag

Descriptor_length

Reserved

Hierarchy_type

Reserved

Hierarchy_layer_index

Reserved

Hierarchy_embedded_layer_index

Reserved

Hierarchy_channel

}

8

8

4

4

2

6

2

6

2

6

• Hierarchy_type: La relación jerárquica entre la capa de jerarquía asociada y

su capa incrustada de jerarquía que se define en la siguiente tabla:

Page 43: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

43

Tabla 12. Valores del campo hierarchy_type

Valor Descripción

0 Reserved

1 ITU-T Rec. H.262 | ISO/IEC 13818-2 Spatial Scalability

2 ITU-T Rec. H.262 | ISO/IEC 13818-2 SNR Scalability

3 ITU-T Rec. H.262 | ISO/IEC 13818-2 Temporal Scalability

4 ITU-T Rec. H.262 | ISO/IEC 13818-2 Data partitioning

5 ISO/IEC 13818-3 Extension bitstream

6 ITU-T Rec.H222.0 | ISO/IEC 13818-1 Private Stream

7 ITU-T Rec. H.262 | ISO/IEC 13818-2 Multi-view Profile

8-14 Reserved

15 Capa base

• Hierarchy_layer_index: Es un campo de 6 bits que define un índice único

asociado al elemento de programa de la tabla de jerarquías de capas de

codificación. Los índices serán únicos dentro de una definición de programa

único.

• Hierarchy_embedded_layer_index: Es un campo de 6 bits que define el

índice de tabla de jerarquía del elemento de programa al que se debe tener

acceso antes de la descodificación de la secuencia elemental asociada a este

descriptor. Este campo no está definido si el valor de hierarchy_type es 15.

• Hierarchy_channel: Es un campo de 6 bits que indica el número de canal

previsto para el elemento de programa asociado en un conjunto ordenado de

canales de transmisión. El canal de transmisión más robusto se define por el

valor más bajo de este campo con respecto a la definición general de la

jerarquía de transmisión.

4.6.4. Registration Descriptor

El descriptor de registro proporciona un método para identificar de forma única e

inequívoca los formatos de datos privados.

Tabla 13. Esquema de Registration Descriptor

Sintaxis Número de bits

Registration_descriptor () {

Descriptor_tag

Descriptor_length

8

8

Page 44: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

44

Format_identifier

For (i=0; i<N; i++) {

Additional_identification_info

}

}

32

8

• Format_identifier: Campo de 32 bits obtenido de una autoridad de registro

según lo designado por ISO/IEC JTC 1/SC 29. [15]

4.6.5. Data Stream Aligment Descriptor

El descriptor de alineación de flujo de datos describe qué tipo de alineación está

presente en la secuencia elemental asociada. Si el data_alignment_indicator en el

encabezado del paquete PES se establece en ‘1’ y el descriptor está presente, la alineación

– como se especifica en este descriptor – será necesaria.

Tabla 14. Esquema de Data Stream Alignment Descriptor

Sintaxis Número de bits

Data_stream_alignment_descriptor () {

Descriptor_tag

Descriptor_length

Alignment_type

}

8

8

8

• Alignment_type: El valor de este campo de 8 bits se describe en la tabla

siguiente:

o Tipo de alineación de vídeo.

Tabla 15. Valores del campo alignment_type para vídeo

Tipo de alineación Descripción

00 Reserved

01 Unidad de acceso a vídeo o segmentación

02 Unidad de acceso a vídeo

03 GOP o SEQ

04 SEQ

05-FF Reserved

o Tipo de alineación de audio.

Page 45: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

45

Tabla 16. Valores del campo alignment_type para audio

Tipo de alineación Descripción

00 Reservado

01 Palabra de sincronización

02-FF Reservado

4.6.6. Target Background Grid Descriptor

Es posible tener una o más secuencias de vídeo que, cuando se descodifican, no

están destinadas a ocupar el área de visualización completa (por ejemplo, un monitor). La

combinación de este descriptor y el Video Window Descriptor permite la visualización de

estas ventanas de vídeo en sus ubicaciones deseadas. Este descriptor se utiliza para

describir una cuadrícula de píxeles de unidad proyectados en el área de visualización. A

continuación, se utiliza el Video Window Descriptor para describir, para la secuencia

asociada, la ubicación en la cuadrícula en la que se debe mostrar el píxel superior izquierdo

de la ventana de visualización o el rectángulo de visualización de la unidad de presentación

de vídeo. Esto se representa en la figura 4.2.

Figura 4.5. Área de visualización del Target Background Grid Descriptor

Tabla 17. Esquema de Target Background Grid Descriptor

Sintaxis Número de bits

Target_backgroung_grid_descriptor () {

Descriptor_tag

Descriptor_length

Horizontal_size

Vertical_size

Aspect_ratio_information

8

8

14

14

4

Page 46: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

46

}

• Horizontal_size: El tamaño horizontal en píxeles.

• Vertical_size: El tamaño vertical en píxeles.

• Aspect_ratio_information: Especifica la relación de aspecto de la muestra

o la relación de aspecto de visualización.

4.6.7. Video Window Descriptor

El descriptor de la ventana de vídeo se utiliza para describir las características de la

ventana de la secuencia elemental de vídeo asociada. Sus valores hacen referencia al

Target Background Grid Descriptor (Descriptor de cuadrícula de fondo de destino) para la

misma secuencia.

Tabla 18. Esquema de Video Window Descriptor

Sintaxis Número de bits

Video_window_descriptor () {

Descriptor_tag

Descriptor_length

Horizontal_offset

Vertical_offset

Window_priority

}

8

8

14

14

4

• Horizontal_offset: El valor indica la posición horizontal del píxel superior

izquierdo de la ventada de visualización de vídeo actual o el rectángulo de

visualización si se indica en la extensión de visualización de imagen en la

cuadrícula de fondo de destino para su visualización tal y como se define en

el target_background_grid_descriptor. El píxel superior izquierdo de la

ventana de vídeo será uno de los píxeles de la cuadrícula de fondo de destino.

• Vertical_offset: El valor indica la posición vertical del píxel superior izquierdo

de la ventana de visualización de vídeo actual o el rectángulo de visualización

de imagen en la cuadrícula de fondo de destino para su visualización tal y

como se define en el target_background_grid_descriptor. El píxel superior

izquierdo de la ventana de vídeo será uno de los píxeles de la cuadrícula de

fondo de destino.

Page 47: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

47

• Window_priority: El valor indica cómo se superponen las ventanas. Un valor

de 0 es la prioridad más baja y un valor de 15 es la prioridad más alta, es

decir, las ventanas con prioridad 15 son siempre visibles.

4.6.8. Conditional Access Descriptor

El descriptor de acceso condicional se utiliza para especificar tanto la información de

administración de acceso condicional de todo el sistema como los EMM y la

información específica de la secuencia elemental, como los ECM. Se puede utilizar

tanto en el TS_program_map_section como en el program_stream_map. Si se

codifica cualquier secuencia elemental, habrá un descriptor de acceso condicional

para el programa que contiene esa secuencia elemental. Si existe alguna información

de administración de acceso condicional en todo el sistema dentro de una secuencia

de transporte, un descriptor de acceso condicional estará presente en la tabla de

acceso condicional

Cuando el descriptor de acceso condicional se encuentra en el

TS_program_map_section (table_id = 0x02), el CA_PID señala a los paquetes que contienen

la información de control de acceso relacionada con el programa, tal como ETM, Extended

Text Message. Su presencia como información del programa indica aplicabilidad a todo el

programa. En el mismo caso, su presencia como información ES extendida indica la

aplicabilidad al elemento de programa asociado. También se prevén datos privados.

Cuando el descriptor de acceso condicional se encuentra en el CA_section

(table_id=0x01), el CA_PID señala a los paquetes que contienen información de

administración del control de acceso y/o de todo el sistema como EMM.

Tabla 19. Esquema de Conditional Access Descriptor

Sintaxis Número de bits

CA_descriptor () {

Descriptor_tag

Descriptor_length

CA_system_ID

Reserved

CA_PID

For (i=0; i>N; i++) {

Private_data_byte

}

}

8

8

16

3

13

8

Page 48: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

48

• CA_system_ID: Campo de 16 bits que indica el tipo de sistema de acceso

condicional aplicable para las secuencias ECM, y/o EMM asociadas. La

codificación de esto se define de forma privada y no es especificada por el

UIT-T ISO/IEC.

• CA_PID: Campo de 13 bits que indica el PID de los paquetes de la secuencia

de transporte que contendrá la información ECM o EMM para los sistemas de

CA según lo especificado con el CA_System_ID asociado. El contenido (ECM

o EMM) de los paquetes indicados por el CA_PID se determina del contexto

en el que se encuentra el CA_PID, es decir, un TS_program_map_section o

la tabla de CA en la secuencia de transporte, o el campo stream_id en la

secuencia del Transport Stream.

4.6.9. ISO 639 Language Descriptor

El descriptor de idioma es utilizado para especificar el idioma de los elementos de

programa asociados.

Tabla 20. Esquema de ISO 639 Language Descriptor

Sintaxis Número de bits

ISO_639_language_descriptor () {

Descriptor_tag

Descriptor_length

For (i=0; i>N; i++) {

ISO_639_language_code

Audio_type

}

}

8

8

24

8

• ISO_639_language_code: Identifica el idioma o los idiomas utilizados por el

elemento de programa asociado. El ISO_639_language_code contiene un

código de 3 caracteres según lo especificado por ISO 639- 2. Cada carácter

se codifica en 8 bits según ISO 8859-1 y se inserta en orden en este campo

de 24 bits. En el caso de las secuencias de audio en varios idiomas, el campo

ISO_639_language_code reflejará el contenido de la secuencia de audio. [16]

[17]

• Audio_type: Campo de 8 bits que especifica el tipo de secuencia definido en

la siguiente tabla:

Page 49: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

49

Tabla 21. Valores del campo audio_type

Tipo de alineación Descripción

0x00 Indefinido

0x01 Efectos limpios (sin idioma)

0x02 Discapacidad auditiva

0x03 Comentarios para discapacidad visual

0x04-0xFF Reservado

4.6.10. System Clock Descriptor

Este descriptor transmite información sobre el reloj del sistema que se utilizó para

generar las marcas de tiempo.

Si se utiliza una referencia de reloj externa, el external_clock_reference_indicator se

puede establecer en ‘1’. El decodificador puede utilizar de manera opcional la misma

referencia externa si está disponible.

Tabla 22. Esquema de System Clock Descriptor

Sintaxis Número de bits

System_clock_descriptor () {

Descriptor_tag

Descriptor_length

External_clock_reference_indicator

Reserved

Clock_accuracy_integer

Clock_accuracy_exponent

Reserved

}

8

8

1

1

6

3

5

• External_clock_reference_indicator: Campo de 1 bit. Cuando está

establecido a ‘1’ indica que el reloj del sistema se ha derivado de una

referencia de frecuencia externa que puede estar disponible en el

decodificador.

• Clock_accuracy_integer: Campo de 6 bits. Junto con el

clock_accuracy_exponent, proporciona la precisión de frecuencia fraccionaria

del reloj del sistema en partes por millón.

Page 50: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

50

• Clock_accuracy_exponent: Es un entero de 3 bits. Junto con el

clock_accuracy_integer, proporciona la precisión de frecuencia fraccionaria

del reloj del sistema en partes por millón.

4.6.11. Multiplex Buffer Utilization Descriptor

Este descriptor proporciona límites en la ocupación del búfer múltiplex STD. Esta

información está destinada a dispositivos como remultiplexores, que pueden utilizar esta

información para admitir una estrategia de remultiplexación deseada.

Tabla 23. Esquema de Multiplex Buffer Utilization Descriptor

Sintaxis Número de bits

Multiplex_buffer_utilization_descriptor () {

Descriptor_tag

Descriptor_length

Bound_valid_flag

LTW_offset_lower_bound

Reserved

LTW_offset_upper_bound

}

8

8

1

15

1

14

• Bound_valid_flag: Cuando está establecido a ‘1’ indica que los campos

LTW_offset_lower_bound y LTW_offset_upper_bound son válidos.

• LTW_offset_lower_bound: Este campo de 15 bits tiene utilidades de (27

MHz / 300) períodos de reloj, según se define para el LTW_offset. El

LTW_offset_lower_bound representa el valor más bajo que tendría cualquier

campo de LTW_offset, si ese campo se codificara en cada paquete de la

secuencia/s a las que hace referencia este descriptor. Los campos de

LTW_offset reales pueden o no codificarse en la secuencia de bits cuando el

descriptor de utilización del búfer multiplex está presente. Este límite es válido

para la siguiente aparición de este descriptor.

• LTW_offset_upper_bound: Este campo de 15 bits representa el valor más

alto que tendría cualquier campo de LTW_offset.

4.6.12. Copyright Descriptor

Este descriptor provee un método para habilitar la identificación de trabajos

audiovisuales. Se aplica a programas o elementos de programa dentro de programas.

Tabla 24. Esquema de Copyright Descriptor

Sintaxis Número de bits

Page 51: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

51

Copyright_descriptor () {

Descriptor_tag

Descriptor_length

Copyright_identifier

For (i=0; i<N; i++) {

Additional_copyright_info

}

}

8

8

32

8

• Copyright_identifier: Campo de 32 bits que se obtiene de la Autoridad de

Registro.

• Additional_copyright_info: El contenido de este campo está definido por el

copyright_identifier y, una vez definidos, no cambiarán.

4.6.13. Maximum Bitrate Descriptor

Tabla 25. Esquema de Maximum Bitrate Descriptor

Sintaxis Número de bits

Maximum_bitrate_descriptor () {

Descriptor_tag

Descriptor_length

Reserved

Maximum_bitrate

}

8

8

2

22

• Maximum_bitrate: La velocidad de bits máxima se codificará como un entero

positivo de 22 bits en este campo. El valor indica el límite superior de la

velocidad de bits, incluida la sobrecarga de transporte, que se encontrará en

este elemento o programa. El valor del maximum_bitrate se expresa en

unidades de 50 bytes/segundo. Este descriptor se incluye en la PMT. Su

presencia como información ampliada del programa indica la aplicabilidad a

todo el programa. Su presencia como información ES indica la aplicabilidad

al elemento de programa asociado.

4.6.14. Private Data Indicator Descriptor

Tabla 26. Esquema de Private Data Indicator Descriptor

Sintaxis Número de bits

Private_data_indicator_descriptor () {

Page 52: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

52

Descriptor_tag

Descriptor_length

Private_data_indicator

}

8

8

2

22

4.6.15. MPEG-4 Video Descriptor

Para secuencias ISO/IEC 14496-2 individuales transportadas directamente en

paquetes PES, este descriptor proporciona información básica para identificar los

parámetros de codificación de dichas secuencias elementales visuales.

Tabla 27. Esquema de MPEG-4 Video Descriptor

Sintaxis Número de bits

MPEG-4_video_descriptor () {

Descriptor_tag

Descriptor_length

MPEG-4_visual_profile_and_level

}

8

8

8

• MPEG-4_visual_profile_and_level: Este campo de 8 bits identificará el perfil

y nivel de la secuencia de vídeo ISO/IEC 14496-2. [18]

4.6.16. MPEG-4 Audio Descriptor

Para secuencias ISO/IEC 14496-3 individuales transportadas directamente en

paquetes PES, este descriptor de audio MPEG-4 proporciona información básica para

identificar los parámetros de codificación de dichas secuencias elementales de audio. [19]

Tabla 28. Esquema de MPEG-4 Audio Descriptor

Sintaxis Número de bits

MPEG-4_audio_descriptor () {

Descriptor_tag

Descriptor_length

MPEG-4_audio_profile_and_level

}

8

8

8

4.6.17. SL Descriptor

Este descriptor se utilizará cuando una sola secuencia SL empaquetada ISO/IEC

14496-1 esté encapsulada en paquetes PES. Este descriptor asocia la ES_ID de esta

Page 53: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

53

secuencia a una Elementary_PID en caso de una secuencia de transporte o a un

elementary_stream_id en caso de una secuencia de programa. Dentro de una secuencia de

transporte, el descriptor SL se transmitirá para la secuencia elemental correspondiente en el

bucle descriptor inmediatamente después del campo ES_info_length en la tabla de mapas

de programa. Si un mapa de secuencia de programa está presente en una secuencia de

programa, el descriptor se transmitirá en el bucle descriptor inmediatamente después del

campo elementary_stream_info_length dentro del mapa de secuencia de programa. [20]

Tabla 29. Esquema de SL Descriptor

Sintaxis Número de bits

SL_descriptor () {

Descriptor_tag

Descriptor_length

ES_ID

}

8

8

16

4.6.18. FMC Descriptor

Este descriptor indica que la herramienta ISO/IEC 14496-1 FlexMux se ha utilizado

para multiplexar secuencias empaquetadas SL ISO/IEC 14496-1 en una secuencia FlexMux

antes de la encapsulación en paquetes o secciones ISO/IEC 14496. El descriptor asocia los

canales FlexMux a los calores ES_ID de las secuencias empaquetada SL en la secuencia

FlexMux. [20]

Se requiere un descriptor FMC para cada elemento de programa al que hace

referencia un valor de Elementary_PID en una secuencia de transporte y para cada

Elementary_stream_id de una secuencia de programa que transmite una secuencia

FlexMux. Dentro de una secuencia de transporte, el descriptor FMC se transmitirá para la

secuencia elemental correspondiente en el bucle descriptor inmediatamente después del

campo ES_info_length en la tabla de mapas de programa. Si un mapa de secuencia de

programa está presente en una secuencia de programa, el descriptor FMC se transmitirá en

el bucle descriptor inmediatamente después del campo elementary_stream_info_length en

el mapa de secuencia de programa.

Para cada secuencia empaquetada SL en una secuencia FlexMux, el canal FlexMux

se identificará mediante una sola entrada en el descriptor FMC.

Tabla 30. Esquema de FMC Descriptor

Sintaxis Número de bits

Page 54: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

54

FMC_descriptor () {

Descriptor_tag

Descriptor_length

For (i=0; i<descriptor_length; i+=3) {

ES_ID

FlexMuxChannel

}

}

8

8

16

8

• ES_ID: Este campo de 16 bits especifica el identificador ISO/IEC 14496-1 de

la secuencia SL empaquetada. [20]

• FlexMuxChannel: Campo de 8 bits que especifica el número de canales

FlexMux usados para esta secuencia SL empaquetada.

4.6.19. External_ES_ID Descriptor

El descriptor External_ES_ID asigna un ES_ID, tal como se define en ISO/IEC 14496-

1, a un elemento de programa al que no se ha asignado ningún valor de ES_ID por otros

medios. Esta ES_ID permite hacer referencia a un componente que no es ISO/IEC 14496

en la descripción de la escena o, por ejemplo, asociar un componente que no es ISO/IEC

14496 a una secuencia IPMP.

Dentro de una secuencia de transporte, la asignación de un ES_ID se realizará

mediante el transporte de un descriptor de External_ES_ID para la secuencia elemental

correspondiente en el bucle descriptor inmediatamente después del campo ES_info_length

de la tabla de mapas de programa. Si un mapa de secuencia de programa está presente en

una secuencia de programa, el descriptor de External_ES_ID se transmitirá en el bucle

descriptor inmediatamente después del campo elementary_stream_info_length en el mapa

de secuencia de programa.

Tabla 31. Esquema de External ES ID Descriptor

Sintaxis Número de bits

External_ES_ID_descriptor () {

Descriptor_tag

Descriptor_length

External_ES_ID

}

8

8

16

Page 55: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

55

4.6.20. Multiplex Buffer Descriptor

El descriptor Multiplex Buffer transmite el tamaño del búfer multiplex MBn, así como

la velocidad de fuga Rxn a la que los datos se transfieren del búfer de transporte TBn al búfer

MBn para un elemento de programa específico ITU-T Rec. H.222.0 | ISO/IEC 13818-1

referenciado por un valor de Elementary_PID en la Program Map Table (PMT). [13] [6]

Se asociará un descriptor Multiplex Buffer a cada Elementary_PID que contenga una

secuencia ISO/IEC 14496 FlexMux o una secuencia SL empaquetada, incluidas las que

contienen secciones ISO/IEC 14496.

Este descriptor se transmitirá en el bucle descriptor inmediatamente después del

campo ES_info_length de la Program Map Table.

Tabla 32. Esquema de Multiplex Buffer Descriptor

Sintaxis Número de bits

MultiplexBuffer_descriptor () {

Descriptor_tag

Descriptor_length

MB_buffer_size

TB_leak_rate

}

8

8

24

24

• MB_buffer_size: Campo de 24 bits especificará el tamaño en bytes del búfer

MBn de la secuencia elemental n asociada a este descriptor.

• TB_leak_rate: Este campo de 24 bits especificará en unidades de 400 bits

por segundo la velocidad a la que se transfieren los datos del búfer de

transporte TBn al búfer múltiplex MBn para la secuencia elemental n asociada

a este descriptor.

Page 56: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

56

5. REVISIÓN DEL ALGORITMO Y PROCESO DE DESARROLLO

A la hora de desarrollar la aplicación, se ha basado en la herramienta de trabajo PHP

debido a la versatilidad que tiene. PHP es un lenguaje multiplataforma que, junto a un

servidor web, en este caso se ha utilizado WAMP, puede utilizarse como una máquina virtual

de ejecución de un código o programa.

También se ha añadido el uso de una base de datos como es MySQL para poder

almacenar la información, modificarla e incluso, eliminarla.

5.1. Entorno de trabajo

Herramientas para el desarrollo y el análisis de un Transport Stream:

• Entorno de desarrollo

Se ha utilizado NetBeans IDE 8.2 con PHP, pero se podría realizar con

cualquier aplicación que tuviera editor de código PHP integrado. Se han

creado diferentes archivos de código PHP y PHP con HTML.

• Entorno de valoración:

Se ha utilizado la herramienta WAMPServer 3.2.0 para poder ejecutar el

código a través de localhost.

• Base de datos:

Se ha utilizado MySQL como herramienta de almacenamiento de los datos

analizados.

• Control de versiones:

Se ha hecho uso de GitHub para realizar un control de las versiones del

proyecto.

• Entorno de comprobación:

Se ha utilizado el programa HxD Hex Editor 2.3.0.0 para visualizar el

contenido de los Transport Stream e ir comprobando los resultados obtenidos.

Page 57: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

57

5.2. Revisión del algoritmo

Figura 5.1. Arquitectura de la aplicación en modo usuario

Page 58: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

58

Figura 5.2. Arquitectura de la aplicación en modo administrador

Una vez revisados los elementos que componen un Transport Stream, se va a

detallar la estructura que ha influenciado en la generación del algoritmo para el análisis de

un elemento Transport Stream.

5.2.1. Código de análisis de la cabecera de un Transport Stream

La multiplexación de un Transport Stream consiste en paquetes de una longitud

constante igual a 188 bytes, de los cuales 4 bytes forman la cabecera obligatoria tras la que

se puede tener un campo de adaptación opcional. El resto de 184 bytes contienen

información o carga útil, los cuales transportan diferentes tipos de información, como

información sobre servicios, datos e información de relleno (paquetes nulos) para poder

obtener una tasa de transmisión fija. El esquema se puede visualizar en la figura 5.1.

Page 59: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

59

El valor del byte de sincronización es utilizado como referencia de inicio del paquete

TS, tiene un valor fijo de 0x47 hexadecimal, de esta manera se tiene la certeza de cuándo

ha comenzado un paquete TS.

Figura 5.3. Esquema de un paquete Transport Stream

Para poder obtener los datos a analizar, primero se realizará una captura de esos

datos mediante un sistema de decodificación que nos permita obtener un fichero con datos

binarios del contenido de un Transport Stream. Puesto que los datos están en formato

binario, será necesario poder abrir el fichero de la manera correcta.

$transportstreamname=basename($fichero);

$count=0;

$lenfichero = filesize($fichero);

while ($count< $lenfichero) {

leerFichero ($fichero, $count);

$count+=11280;

}

echo "Fin de lectura.";

function leerFichero (string $fichero, int $count) {

$array = '';

$count0=0;

$data = file_get_contents ($fichero, false, null, $count,11280);

$pointer = 0;

$len= strlen($data);

while ($pointer < $len && $fichero == $fichero) {

leerDatos ($data, $pointer);

$pointer += 188;

}

}

El primer paso será la obtención del tamaño del fichero de entrada, $fichero, pues

habrá que hacer una lectura desde un inicio hasta un final. Una vez obtenemos $lenfichero,

se llamará a la función leerFichero () hasta que el indicador de vueltas $count llegue a la

longitud total. El valor de $count irá incrementando a cada vuelta en 188 pues es el tamaño

que tiene un paquete TS.

Page 60: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

60

La función leerFichero () llama a su vez a la función de PHP file_get_contents () a la

cual deberemos pasarle un fichero a analizar y la cantidad de datos que debe leer. En este

caso, se le ha indicado que lea un valor de 11280, 60 veces 188, de esta manera cada vez

que se llame a la función leerFichero () se leerá el contenido de 60 paquetes TS.

Dentro de la función leerFichero () se llama, a su vez a la función leerDatos () cuyos

parámetros de entrada serán los datos obtenidos de file_get_contents () y un puntero que

nos servirá de guía para poder consultar los datos y ver su posición en el fichero.

5.2.2. Diagrama de flujo de la lectura de bytes.

Para poder obtener los datos correctamente al utilizar la función leerDatos (), primero

se implementaron unas subfunciones capaces de leer el contenido en paquetes de bits.

• leerN (), es una función que tiene como parámetro de entrada el número de

bits que queremos leer y el parámetro de salida es el número decimal que se

obtiene de leer N bits.

• saltarN (), función similar a leerN () pero simplemente tiene un parámetro de

entrada, facilitando de esta manera, el desplazamiento de n bits.

• leerCadena (), cuyo parámetro de entrada será el número de bits que se

quiere leer y el parámetro de salida será una cadena de caracteres con

codificación UTF-8. Esta función, a su vez, hace uso de leerN ().

En la figura 5.2. se muestra el diagrama que se ha seguido para poder hacer una

lectura de los bytes en paquetes de 8 bits.

Page 61: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

61

Figura 5.4. Diagrama de flujo de leerN

5.2.3. Algoritmo de lectura de N bits.

function leerN (int $n) {

$valor = 0;

global $pos;

global $nbits;

global $array;

global $unos;

$unos = array (

0 => 0x00,

1 => 0x01,

2 => 0x03,

3 => 0x07,

4 => 0x0F,

5 => 0x1F,

6 => 0x3F,

7 => 0x7F,

leerN(N)

valor = 0

N>0

si Nbits = 0, leer byte nuevo y Nbits = 8

cuantos = min(N, Nbits)

máscara = unos (cuantos) << abs(Nbits -

cuantos)

valorc = (máscara[cuantos] &

byteactual ) >> abs(Nbits - cuantos)

valor = valor + valorc << (N-cuantos)

N = N - cuantos

Nbits = Nbits - cuantos

End

Page 62: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

62

8 => 0xFF

);

if($n>0) {

while ($n>0) {

if ($nbits == 0) {

$nbits = 8;

$pos+=1;

$byteActual=ord($array[$pos]);

$cuantos = min ($n, $nbits);

$mascara = $unos[$cuantos] << abs ($nbits -$cuantos);

$valorc = ($mascara & $byteActual) >> abs ($nbits -

$cuantos);

$valor=$valor + ($valorc << abs($n-$cuantos));

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

} else {

$byteActual=ord($array[$pos]);

$cuantos = min ($n, $nbits);

$mascara = $unos[$cuantos] << abs ($nbits -$cuantos);

$valorc = ($mascara & $byteActual) >> abs ($nbits -

$cuantos);

$valor=$valor + ($valorc << abs($n-$cuantos));

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

}

}

} else {

}

return $valor;

}

5.2.4. Algoritmo de salto de N bits.

function saltarN (int $n) {

$valor = 0;

global $pos;

global $nbits;

global $array;

global $unos;

$unos = array (

0 => 0x00,

1 => 0x01,

2 => 0x03,

3 => 0x07,

4 => 0x0F,

5 => 0x1F,

6 => 0x3F,

7 => 0x7F,

8 => 0xFF

);

if($n>0) {

while ($n>0) {

if ($nbits == 0) {

$nbits = 8;

$pos+=1;

$byteActual=ord($array[$pos]);

$cuantos = min ($n, $nbits);

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

} else {

Page 63: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

63

$byteActual=ord($array[$pos]);

$cuantos = min ($n, $nbits);

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

}

}

} else {

}

}

5.2.5. Algoritmo de lectura de una cadena de caracteres.

Para la generación del algoritmo de lectura de una cadena de caracteres se ha tenido

que tener en cuenta que el contenido a analizar tenía una codificación diferente dependiendo

del primer byte de lectura, tal y como se hace referencia en la norma ETSI EN 300 468,

anexo A. [7]

Se indica que si el primer byte de lectura tiene un valor dentro del rango [0x20 – 0xff],

entonces los siguientes bytes estarán codificados con el alfabeto latino no.1.

En nuestro caso, se ha utilizado la ISO-8859-1 e ISO-8859-9 para la decodificación

de los caracteres. [21] [22]

function leerCadena (int $length) {

$char = '';

$i=0;

$table_type = 'ISO-8859-1';

while($i<$length) {

$c = leerN (8);

if ($c == 0x05) {

$table_type = 'ISO-8859-9';

} else {

$c = iconv ($table_type,'utf-8', chr($c));

$char.=$c;

}

$i++;

}

return $char;

}

5.2.6. Código de análisis de la PAT.

Una vez se ha definido cómo empezar a obtener datos del fichero, el siguiente paso

es obtener los datos de la tabla PAT, pues ésta es la que nos indicará los siguientes datos

a buscar.

function leerDatos (string $data, int $pointer) {

$syncbyte = leerN (8);

$syncbytehex =dechex($syncbyte);

if ($syncbyte! == 0x47) {

throw new Exception ("Error en SYNCBYTE. No válido.");

}

$transportErrorIndicator = leerN (1);

if ($transportErrorIndicator === 0x01) {

echo "Error detectado.";

Page 64: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

64

throw new Exception ("Transport Error Indicator ON.");

}

$payloadUnitStartIndicator = leerN (1);

$transportPriority = leerN (1);

$pid = leerN (13);

$transportScramblingControl = leerN (2);

$adaptationFieldControl = leerN (2);

$continuityCounter= leerN (4);

$hasPayload= ($adaptationFieldControl & 0b01) === 0b01;

$hasAdaptationField = ($adaptationFieldControl & 0b10) === 0b10;

if($hasPayload) {

if(isset($pidtable[$pid])) {

if ($pid === Pid::PAT) {}

Dentro de la función leerDatos (), se leen los datos de la cabecera y el valor del $pid,

si éste, tiene un valor de 0x00 hexadecimal, procederemos a leer el contenido de la PAT.

$tableID = leerN (8);

$sectionSyntax = leerN (1);

$reserved=leerN(3);

$sectionLength = leerN(12);

$tsID = leerN(16);

$reserved3 = leerN(2);

$versionNumber = leerN(5);

$currentnextId = leerN(1);

$sectionNumber = leerN(8);

$lastSectionNumber = leerN(8);

$vueltapat = 0;

$countpat=0;

for($j=0; $j<$sectionLength; $j+=8){

$programNumber= leerN(16);

$reserved4 = leerN(3);

if($programNumber == 0){

$networkPID = leerN(13);

$pat[$networkPID] = $programNumber;

}else{

$pmtPID = leerN(13);

$pat[$pmtPID] = $programNumber;

}

}

$crc = leerN (32);

Este código ha tenido como guía el esquema de la PAT según la ISO/IEC 13818-1.

[6]

Page 65: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

65

Una vez tenemos el contenido de la PAT, se tiene una relación entre el número de

programa y el PID de los paquetes que transportan una tabla que indica los datos que

identifican el programa (PMT). De esta manera, todos los programas del multiplexor en el

Transport Stream son listados indicando cual es la PMT que transporta y su PID. El primer

programa de la PAT está reservado para datos de red, se distingue en el código como

$networkPID y contiene el PID de los paquetes de la NIT.

Este contenido se queda almacenado en la base de datos mediante una inserción de

datos que se explica de manera detallada en el Anexo A.

5.2.7. Código de análisis de la SDT.

Una vez se han obtenido los datos de los programas, se procede a analizar el

contenido del fichero en busca de la SDT que nos indicará el nombre del proveedor de

servicio y el nombre del servicio.

$tableID = leerN(8);

$sectionSyntax = leerN(1);

$reserved = leerN(3);

$sectionLength = leerN(12);

$slength = $sectionLength;

$sectionlengthBin = decbin($sectionLength);

$tsID = leerN(16);

$tsIDHEX = dechex($tsID);

$reserved2 = leerN(2);

$versionNumber = leerN(5);

$versionNumberBin = decbin($versionNumber);

$currentnextId = leerN(1);

$sectionNumber = leerN(8);

$lastSectionNumber = leerN(8);

$originalNetworkID = leerN(16);

$reserved3= leerN(8);

$vueltasdt = 0;

$countsdt=0;

while($sectionLength>=0){

$service_id= leerN(16);

$reserved4 = leerN(6);

$eit_scheduled_flag = leerN(1);

$countsdt +=1;

$eit_present_following_flag = leerN(1);

$running_status = leerN(3);

$free_CA_mnode = leerN(1);

$descriptor_loop_length = leerN(12);

Page 66: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

66

$descriptor_tag= leerN(8);

$descriptor_length = leerN(8);

$service_type = leerN(8);

$service_provider_name_length = leerN(8);

$service_provider_name = leerCadena($service_provider_name_length);

$service_name_length = leerN(8);

$service_name = leerCadena($service_name_length) ;

$vueltasdt+=1;

$sectionLength -=7+ ($descriptor_loop_length);

}

$crc = leerN (32);

Al igual que pasaba con el código de la PAT, para éste se ha utilizado de guía el

esquema de la norma ETSI EN 300 468 v1.15.1. [15]

5.2.8. Código de análisis de la PMT.

Una vez hemos leído el contenido de la PAT y de la SDT, se procede a buscar el

contenido de la PMT para los PID obtenidos en la SDT. Dentro de la PMT se obtienen

diferentes datos dependiendo del valor que tenga el descriptor_tag. Cada uno de los

descriptores nos indicará qué tipo de contenido lleva el programa en el paquete de

Elementary Stream de nuestro Transport Stream.

saltarN(8);

$tableID = leerN(8);

$sectionSyntax = leerN(1);

$reserved = leerN(3);

$sectionLength = leerN(12);

$programNumber = leerN(16);

$reserved2 = leerN(2);

$versionNumber=leerN(5);

$currentnextId = leerN(1);

$sectionNumber = leerN(8);

$lastSectionNumber = leerN(8);

$reserved3 = leerN(3);

$PCR_PID= leerN(13);

$reserved4 = leerN(4);

$programInfoLength = leerN(12);

$stream_type = leerN(8);

saltarN(3);

$elementary_PID = leerN(13);

saltarN(4);

$ES_info_length = leerN(12);

$descriptor_tag = leerN(8);

$descriptor_tag_hex = dechex($descriptor_tag);

$countpointer= $count + $pointer;

switch ($descriptor_tag_hex){

case 0x02:

video_stream_descriptor($countpointer, $programNumber);

break;

case 0x03:

audio_stream_descriptor($countpointer, $programNumber);

break;

case 0x04:

hierarchy_descriptor($countpointer, $programNumber);

break;

Page 67: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

67

case 0x06:

data_stream_alignment_descriptor($countpointer,

$programNumber);

break;

case 0x07:

target_background_grid_descriptor($countpointer,

$programNumber);

break;

case 0x08:

video_window_descriptor($countpointer, $programNumber);

break;

case 0x0a:

iso_639_language_descriptor($countpointer, $programNumber);

break;

case 0x0b:

system_clock_descriptor($countpointer, $programNumber);

break;

case 0x0c:

multiplex_buffer_utilization_descriptor($countpointer,

$programNumber);

break;

case 0x0d:

copyright_descriptor();

break;

case 0x0e:

maximum_bitrate_descriptor($countpointer, $programNumber);

break;

case 0x0f:

private_data_indicator_descriptor($countpointer,

$programNumber);

break;

case 0x10:

smoothing_buffer_descriptor($countpointer, $programNumber);

break;

case 0x11:

std_descriptor($countpointer, $programNumber);

break;

case 0x12:

ibp_descriptor($countpointer, $programNumber);

break;

case 0x1b:

mpeg4_video_descriptor($countpointer, $programNumber);

break;

case 0x1c:

mpeg4_audio_descriptor($countpointer, $programNumber);

break;

case 0x1e:

sl_descriptor($countpointer, $programNumber);

break;

case 0x1f:

fmc_descriptor($countpointer, $programNumber);

break;

case 0x20:

external_es_id_descriptor($countpointer, $programNumber);

break;

case 0x23:

multiplexbuffer_descriptor($countpointer, $programNumber);

break;

case 0x45:

vbi_data_descriptor($countpointer, $programNumber);

break;

Page 68: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

68

case 0x46:

vbi_teletext_descriptor($countpointer, $programNumber);

break;

case 0x52:

stream_identifier_descriptor($countpointer, $programNumber);

break;

case 0x56:

teletext_descriptor($countpointer, $programNumber);

break;

case 0x59:

subtitling_descriptor($countpointer, $programNumber);

break;

case 0x5f:

private_data_specifier_descriptor();

break;

case 0x60:

service_move_descriptor($countpointer, $programNumber);

break;

case 0x65:

scrambling_descriptor($countpointer, $programNumber);

break;

case 0x66:

data_broadcast_id_descriptor($countpointer, $programNumber);

break;

}

5.3. Inserción del contenido en una base de datos

Para almacenar el contenido se ha hecho uso de la herramienta que nos ofrece

WAMPServer. Se ha creado una base de datos de nombre dvbmpeg y se han creado las

correspondientes tablas que almacenarán los datos que se vayan leyendo desde el

analizador. Para la inserción de los datos se ha hecho uso de:

• Sentencias parametrizadas

Los datos se insertan mediante una preparación y una ejecución. En la etapa

de preparación se envía una plantilla de sentencia al servidor de bases de

datos. El servidor realizará una comprobación de la sintaxis e inicializará los

recursos internos del servidor para su uso posterior.

• Control de duplicidad

Antes de realizar cualquier inserción en la base de datos, se realiza una

consulta previa para comprobar si existe ese registro. Si existe no se

insertará.

• Identificación única

En la base de datos se insertará únicamente el nombre del fichero Transport

Stream a analizar, el resto de las tablas de la base de datos, identificarán su

contenido con un valor único que tendrá asociado el nombre del fichero.

Page 69: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

69

5.4. Visualización del contenido del Transport Stream

Para poder visualizar el contenido del Transport Stream analizado, se ha hecho uso

del lenguaje de programación HTML y HTML+PHP para poder mostrar el contenido

almacenado en la base de datos.

5.4.1. Página principal

La página principal, index.php, visualiza un listado de archivos que han sido

analizados por la herramienta. Además, se tiene un apartado de administración que

solamente será accesible si el usuario ingresa con la contraseña correcta y éste se encuentra

en la base de datos registrado.

5.4.2. Lista de programas

Si se selecciona un Transport Stream, se nos redirigirá a la página showSDT.php

cuyo parámetro de entrada será el identificador del Transport Stream. En esta página se

mostrará el listado de programas que existen en ese Transport Stream junto a su número

identificativo de la PAT, así como el nombre del proveedor de servicio.

5.4.3. Lista de componentes

Si se selecciona cualquier programa, se nos redirigirá ahora la página

showProgram.php, que muestra la lista de componentes que son transportados en ese

programa.

Se obtiene, el identificador del descriptor, el nombre del descriptor, el puntero que

facilitará la búsqueda de ese paquete en la aplicación HxD de lectura de datos

hexadecimales, el PCR_PID y el tipo de secuencia de transporte.

5.4.4. Página de administración

Al introducir las credenciales que darán acceso a la parte de administración, se

accede a la página de administración de Transport Stream, en la cual se podrá realizar una

de las siguientes acciones:

• Modificar un Transport Stream, modificando la descripción asociada.

• Eliminar un Transport Stream y todos los registros asociados.

• Insertar un Transport Stream.

5.4.5. Inserción de un Transport Stream

Para la inserción del contenido de un Transport Stream, se ha modificado el valor

máximo de subida de ficheros de php:

• Upload_max_filesize = 512MB

Page 70: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

70

• Post_max_size = 512MB

Una vez se realiza la inserción, se hace una llamada al código que se encarga del

análisis del Transport Stream con el parámetro de entrada el nombre del fichero que se

encontrará en la nueva ubicación.

Page 71: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

71

6. RESULTADOS OBTENIDOS

El resultado principal, el diseño de una herramienta que permita estudiar la

estructura de un Transport Stream DVB-T con fines didácticos, ha sido logrado. El

usuario que acceda a la herramienta será capaz de obtener, de un fichero, los datos que se

encuentran en él, y mostrarlos a través de un entorno de visualización, tal como Chrome,

simplemente teniendo WAMPServer iniciado.

Este proyecto cuenta a su vez con seguridad aplicada, con control de inicio de sesión

en el navegador, así como obtención de parámetros mediante un formulario GET, de esta

manera, se podrá visualizar contenido diferente accediendo a la misma ruta pero con

parámetros diferentes.

Para obtener un diseño orientado a todos los navegadores, se ha hecho uso de la

propiedad de CSS, flex, que permitirá una visibilidad de contenido adaptado al tamaño del

navegador. Se ha añadido también el logotipo corporativo de la Universidad de Jaén como

icono de la ventana de navegación. [23]

Page 72: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

72

6.1. Página principal

La página principal, http://localhost/proyecto/index.php, estará compuesta por una

barra de navegación superior que indicará en todo momento la situación actual y el recorrido

seguido, pudiendo volver hacia atrás en cualquier momento manteniendo los parámetros de

consulta.

Además, también se visualiza una tarjeta con los nombres de los Transport Stream

que se encuentran analizados en la base de datos y de cuyo contenido se puede disponer.

Al final de la página, se visualiza una tarjeta que dará acceso a la página de

administración, donde el usuario podrá ser capaz de insertar un nuevo fichero a analizar,

modificar un parámetro del Transport Stream o eliminar.

Figura 6.6.1. Página principal

Page 73: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

73

6.2. Lista de programas

Pulsando sobre cualquier Transport Stream, se accede a la lista de programas que

se encuentran en él.

En esta ventana, http://localhost/proyecto/showSDT.php?Id=1, se le introduce como

parámetro de entrada el identificador único del Transport Stream que existe en la base de

datos. Y se mostrará una tarjeta con un identificador de programa, obtenido de la PAT, y el

nombre del servicio, obtenido de la SDT.

Figura 6.6. Lista de programas de un Transport Stream

Page 74: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

74

6.3. Lista de componentes

Accediendo a un programa del Transport Stream analizado,

http://localhost/proyecto/showProgram.php?ProgramId=410 , se obtendrá una lista con los

diferentes descriptores que se han capturado durante el análisis.

Figura 6.3. Lista de componentes de un programa

Page 75: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

75

6.4. Página de administración

Introduciendo las credenciales correctas en la página principal, se accede a la página

de administración, http://localhost/proyecto/panel-control.php, donde aparecen dos tarjetas,

una de ellas con el listado de Transport Streams analizados, y una tarjeta para poder insertar

un fichero de formato .ts que, una vez comprobado que el formato es el correcto, redirigirá a

la página de la herramienta de análisis del Transport Stream,

http://localhost/proyecto/transportstreamparser.php?file=mireya5.ts.

Figura 6.4. Página de administración

Page 76: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

76

6.5. Administración de Transport Stream

Una vez se ha seleccionado el Transport Stream que se desea modificar, nos

aparece en la ventana, http://localhost/proyecto/select.php?select=1, una tarjeta con el

parámetro que tiene actualmente el Transport Stream habilitado para modificar, en este

caso, la descripción.

Como previamente se ha dicho, en esta ventana se puede guardar una nueva

descripción en la base de datos, eliminar el Transport Stream o cancelar y volver a la página

de administración.

Figura 6.5. Administración de Transport Stream

Page 77: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

77

7. DIFICULTADES ENCONTRADAS

A la hora de desarrollar esta herramienta han surgido una serie de dificultades que

han interferido en el desarrollo del proyecto:

• Encontrar información relativa a las normas ISO/IEC 13818. Ha resultado

complicado poder acceder al contenido de estas normas, claves para el

desarrollo de la herramienta, pues contienen toda la información relacionada

con las tablas implementadas en el código de proyecto.

• Limitación de PHP para poder realizar una subida de archivos. En un principio

se planteó realizar una subida de fichero en trozos, pero resultaba muy

complicado que funcionara correctamente con la configuración establecida en

WAMPServer, por lo que se optó finalmente, por aumentar el tamaño de la

subida de los ficheros en el archivo de configuración inicial de PHP, php.ini.

Page 78: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

78

8. CONCLUSIONES Y LÍNEAS DE FUTURO

Con todo lo anteriormente expuesto, la primera conclusión a la que podemos llegar

una vez realizadas todas las tareas descritas en esta memoria es la relativa al cumplimiento

de todos los objetivos propuestos en el apartado número 3:

Una herramienta capaz de analizar un Transport Stream DVB-T ha sido

implementada a lo largo de este trabajo, ofreciendo ciertas funcionalidades más allá del

simple análisis. La pequeña cantidad de recursos que necesita para funcionar son clave

frente a otras herramientas mucho más complejas y difíciles de adquirir.

Tras un estudio del estado del arte en el ámbito del análisis de Transport Stream, se

ha podido estudiar a fondo diversos métodos sobre los cuales nos hemos apoyado para

confeccionar nuestra herramienta de análisis.

Como consiguiente se han podido observar puntos fuertes y carencias de estos

métodos con el fin de mejorar en ciertos aspectos nuestra herramienta.

Se ha realizado un análisis de diversos Transport Stream, centrándonos en gran

medida en las partes características de éstos.

Tras este estudio, hemos sido capaces de obtener una configuración óptima para

nuestra herramienta mediante una serie de fases de evaluación.

Como se podrá observar en el apartado 6 de esta memoria, un GUI ha sido creado

de forma satisfactoria con el propósito de que el usuario final pueda aprovechar por completo

todas las funcionalidades que aporta la herramienta de forma fácil e intuitiva.

En cuanto al posible futuro de este trabajo, el hecho de seguir mejorando las

características de la herramienta sería una de las propiedades. Para ello, debemos mejorar

ciertas partes del proceso de análisis:

• Realizar capturas en tiempo real de un Transport Stream obtenido por un

receptor. Esta es una de las ideas que más apoyo puede tener a nivel

didáctico. Una mejora en el análisis de la herramienta que permita al usuario

conectar directamente el dispositivo capturador con el ordenador encargado

de lanzar la ejecución, ahorrará el paso de tener que almacenar ese contenido

previo a su análisis. Además, no habría limitación de tamaño de Transport

Stream pues el contenido se enviaría en partes.

• Comparar Transport Stream. Una vez analizados y almacenados en la base

de datos, sería interesante poder seleccionar varios elementos y comparar su

Page 79: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

79

contenido, por ejemplo, si se tratan de Transport Stream con contenido cifrado

y sin cifrar.

• Descodificar el contenido de otras tablas que pueden llegar a ser interesantes

a nivel didáctico, por ejemplo la tabla con información de red (Network

Information Table, o NIT) o la tabla con información de eventos (Event

Information table, o EIT).

Page 80: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

80

ANEXO A: CÓDIGO DE PROYECTO

1. Transportstreamparser.php

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<title> Analizador de Transport Stream</title>

</head>

<body>

<?php

$nombrefichero=$_GET['file'];

set_time_limit(8000);

print_r(getdate());

include 'Pid.php';

include './config.php';

$fichero = './media/' . $nombrefichero;

$transportstreamname=basename($fichero);

$count=0;

$i = 0;

$ts =0;

$pat = array();

$pmt = array();

$sdtlist = array();

$transportstreamlist = array();

$patlist = array();

$programs = array();

$lenfichero = filesize($fichero);

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

$db=mysqli_select_db($id,Config::$database);

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$query ="Select distinct name from transportstream";

$result = mysqli_query($id, $query);

while($row = mysqli_fetch_assoc($result)){

$transportstreamlist[$ts]=$row['name'];

$ts++;

}

if(!in_array($transportstreamname, $transportstreamlist)){

$stmt = mysqli_prepare($id,"INSERT INTO TransportStream(Name) VALUES

(?)");

mysqli_stmt_bind_param($stmt,'s',$transportstreamname);

$resultstmt = mysqli_stmt_execute($stmt);

if(!$resultstmt){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) . "48)

" ;

die("Error: no se pudo realizar la consulta.");

}

}

Page 81: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

81

$stmtid = mysqli_prepare($id, "SELECT Id from TransportStream where Name =

?");

mysqli_stmt_bind_param($stmtid, 's', $transportstreamname);

$resultstmtid = mysqli_stmt_execute($stmtid);

mysqli_stmt_bind_result($stmtid, $transportstreamid);

mysqli_stmt_fetch($stmtid);

if(!$resultstmtid){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) . ") "

;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmtid);

while($count< $lenfichero){

leerFichero($fichero,$count);

$i+=1;

$count+=11280;

echo "<br>Veces que entra en el bucle: " . $i . "<br>"

. "Count: $count<br>";

}

mysqli_close($id);

echo "Fin de lectura.";

function leerFichero(string $fichero,int $count){

$array = '';

$count0=0;

$data = file_get_contents($fichero,false, null, $count,11280);

$pointer = 0;

$i=0;

$len= strlen($data);

echo "<br>Tamaño: $len, Count: $count <br>";

while ( $pointer < $len && $fichero == $fichero){

leerDatos($data,$pointer);

$pointer += 188;

$i+=1;

}

}

function leerDatos(string $data,int $pointer){

global $pos;

global $nbits;

global $transportstreamid;

global $pat;

global $pmt;

global $array;

global $count;

global $patlist;

global $programs;

global $id;

global $db;

global $sdtlist;

global $programNumber;

global $transportstreamid;

$pos = 0;

$nbits = 8;

$showpid = 0;

$array = $data;

$pidtable = array(

Page 82: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

82

0x0000 => 'PAT',

0x0001 => 'CAT',

0x0002 => 'TSDT',

0x0010 => 'NIT_ST',

0x0011 => 'SDT_BAT_ST',

0x0012 => 'EIT_ST_CIT',

0x0013 => 'RST_ST',

0x0014 => 'TDT_TOT_ST',

0x0015 => 'NETWORK_SYNC',

0x0016 => 'RNT',

0x001c => 'INBAND_SIG',

0x001d => 'MEASUREMENT',

0x001e => 'DIT',

0x001f => 'SIT'

);

$servicetype= array(

0x01 => 'DIGITAL TELEVISION SERVICE',

0x02 => 'DIGITAL RADIO SOUND SERVICE',

0x03 => 'TELETEXT SERVICE' ,

0x04 => 'NVOD REFERENCE SERVICE',

0x05 => 'NVOD TIME SHIFTED SERVICE',

0x06 => 'MOSAIC SERVICE',

0x07 => 'FM RADIO SERVICE',

0x08 => 'DVB SRM SERVICE',

0x0a => 'ADVANCED CODEC DIGITAL RADIO SOUND SERVICE',

0x0b => 'H264 AVC MOSAIC SERVICE',

0x0c => 'DATA BROADCAST SERVICE',

0x0e => 'RCS MAP',

0x0f => 'RCS FLS',

0x10 => 'DVB_MHP_SERVICE',

0x11 => 'MPEG2_HD_DIGITAL_TELEVISION_SERVICE',

0x16 => 'H.264/AVC SD DIGITAL TELEVISION SERVICE',

0x17 => 'H.264/AVC SD NVOD TIME-SHIFTED SERVICE',

0x18 => 'H.264/AVC SD NVOD REFERENCE SERVICE',

0x19 => 'H.264/AVC HD DIGITAL TELEVISION SERVICE',

0x1A => 'H.264/AVC HD NVOD TIME-SHIFTED SERVICE',

0x1B => 'H.264/AVC HD NVOD REFERENCE SERVICE'

);

$syncbyte = leerN(8);

$syncbytehex =dechex($syncbyte);

if ($syncbyte !== 0x47){

throw new Exception("Error en SYNCBYTE. No válido.");

}

$transportErrorIndicator = leerN(1);

if($transportErrorIndicator === 0x01){

echo "Error detectado.";

throw new Exception("Transport Error Indicator ON.");

showTransportErrorIndicator($transportErrorIndicator);

}

$payloadUnitStartIndicator = leerN(1);

$transportPriority = leerN(1);

$pid = leerN(13);

$transportScramblingControl = leerN(2);

$adaptationFieldControl = leerN(2);

$continuityCounter= leerN(4);

global $pat;

Page 83: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

83

global $pmt;

$hasPayload=($adaptationFieldControl & 0b01) === 0b01;

$hasAdaptationField = ($adaptationFieldControl & 0b10) === 0b10;

if($hasPayload){

if(isset($pidtable[$pid])){

if($pid === Pid::PAT){

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

saltarN(8);

$tableID = leerN(8);

$sectionSyntax = leerN(1);

$reserved=leerN(3);

$sectionLength = leerN(12);

$sectionlengthBin = decbin($sectionLength);

$tsID = leerN(16);

$reserved3 = leerN(2);

$versionNumber = leerN(5);

$versionNumberBin = decbin($versionNumber);

$currentnextId = leerN(1);

$sectionNumber = leerN(8);

$lastSectionNumber = leerN(8);

$vueltapat = 0;

$countpat=0;

$query1 = "Select distinct pointer from pat";

$result1 = mysqli_query($id,$query1);

$i=0;

$j=0;

$n=0;

while($row1 = mysqli_fetch_assoc($result1)){

$patlist[$i]=$row1['pointer'];

$i++;

}

mysqli_free_result($result1);

$countpointer = $count+$pointer;

if(!in_array(($countpointer), $patlist)){

$stmt = mysqli_prepare($id,"INSERT INTO PAT VALUES

(?,?,?,?,?,?,?,?)");

mysqli_stmt_bind_param($stmt,'iiiiiiii',$transportstreamid,$countpointer,$

tableID, $sectionSyntax, $sectionLength, $tsID, $currentnextId,

$sectionNumber);

$result = mysqli_stmt_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 223) " ;

die("Error: no se pudo realizar la consulta.");

}

}

$query_2 = "Select distinct program_number from programs";

$result_2 = mysqli_query($id, $query_2);

while($row = mysqli_fetch_assoc($result_2)){

$programs[$n]=$row['program_number'];

$n++;

}

if(!$result_2){

Page 84: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

84

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 236) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_free_result($result_2);

for($j=0; $j<$sectionLength; $j+=8){

$programNumber= leerN(16);

$reserved4 = leerN(3);

IF($programNumber == 0){

$networkPID = leerN(13);

$pat[$networkPID] = $programNumber;

}else{

$pmtPID = leerN(13);

$pat[$pmtPID] = $programNumber;

}

$vueltapat+=1;

if (!in_array($programNumber, $programs)){

if($programNumber == 0 ){

$stmt2 = mysqli_prepare($id, "INSERT INTO

programs VALUES (?,?,?)");

mysqli_stmt_bind_param($stmt2,'iii',$transportstreamid, $programNumber,

$networkPID);

$result2 = mysqli_execute($stmt2);

if(!$result2){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . ") " ;

die("Error: no se pudo realizar la

consulta.");

}

}else if($programNumber < 1016){

$stmt2 = mysqli_prepare($id, "INSERT INTO

programs VALUES (?,?,?)");

mysqli_stmt_bind_param($stmt2,'iii',

$transportstreamid, $programNumber, $pmtPID);

$result2 = mysqli_execute($stmt2);

if(!$result2){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . ") " ;

die("Error: no se pudo realizar la

consulta.");

}

}

}

}

$crc = leerN(32);

}

if($pid === Pid::SDT_BAT_ST){

global $count;

global $transportstreamid;

if(!$id){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 297) " ;

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

saltarN(8);

$tableID = leerN(8);

$sectionSyntax = leerN(1);

Page 85: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

85

$reserved = leerN(3);

$sectionLength = leerN(12);

$slength = $sectionLength;

$sectionlengthBin = decbin($sectionLength);

$tsID = leerN(16);

$tsIDHEX = dechex($tsID);

$reserved2 = leerN(2);

$versionNumber = leerN(5);

$versionNumberBin = decbin($versionNumber);

$currentnextId = leerN(1);

$sectionNumber = leerN(8);

$lastSectionNumber = leerN(8);

$originalNetworkID = leerN(16);

$reserved3= leerN(8);

$vueltasdt = 0;

$countsdt=0;

while($sectionLength>=0){

$service_id= leerN(16);

$reserved4 = leerN(6);

$eit_scheduled_flag = leerN(1);

$countsdt +=1;

$eit_present_following_flag = leerN(1);

$running_status = leerN(3);

$free_CA_mnode = leerN(1);

$descriptor_loop_length = leerN(12);

$descriptor_tag= leerN(8);

$descriptor_length = leerN(8);

$service_type = leerN(8);

$service_provider_name_length = leerN(8);

$service_provider_name =

leerCadena($service_provider_name_length);

$service_name_length = leerN(8);

$service_name = leerCadena($service_name_length) ;

$vueltasdt+=1;

$sectionLength -=7+ ($descriptor_loop_length);

$query1 = "Select distinct service_id from sdt";

$result1 = mysqli_query($id,$query1);

$i=0;

$j=0;

$sdtlist = array();

while($row1 = mysqli_fetch_assoc($result1)){

$sdtlist[$i]=$row1['service_id'];

$i++;

}

$countpointer = $count+$pointer;

if(!in_array($service_id, $sdtlist) && $service_id <

1016){

$stmt3 = mysqli_prepare($id, "INSERT INTO sdt

values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,

?, ?)");

mysqli_stmt_bind_param($stmt3,'iiiiiiiiiiiiiiiiiiiiisis',

$transportstreamid, $countpointer, $tableID, $sectionSyntax, $slength,

$tsID, $versionNumber,$currentnextId,$sectionNumber, $lastSectionNumber,

$originalNetworkID,$service_id,

$eit_scheduled_flag,$eit_present_following_flag, $running_status,

$free_CA_mnode, $descriptor_loop_length, $descriptor_tag,

Page 86: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

86

$descriptor_length, $service_type, $service_provider_name_length,

$service_provider_name,$service_name_length,$service_name);

$result3 = mysqli_execute($stmt3);

if(!$result3){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . ") " ;

die("Error: no se pudo realizar la

consulta.");

}

}

}

$crc = leerN(32);

}else{

}

}else if(count($pat) !== 0){

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

saltarN(8);

$tableID = leerN(8);

$sectionSyntax = leerN(1);

$reserved = leerN(3);

$sectionLength = leerN(12);

$programNumber = leerN(16);

$reserved2 = leerN(2);

$versionNumber=leerN(5);

$currentnextId = leerN(1);

$sectionNumber = leerN(8);

$lastSectionNumber = leerN(8);

$reserved3 = leerN(3);

$PCR_PID= leerN(13);

$reserved4 = leerN(4);

$programInfoLength = leerN(12);

$stream_type = leerN(8);

saltarN(3);

$elementary_PID = leerN(13);

saltarN(4);

$ES_info_length = leerN(12);

$descriptor_tag = leerN(8);

$descriptor_tag_hex = dechex($descriptor_tag);

$countpointer= $count + $pointer;

if($pid <>8191 && $programNumber < 1016){

$query1 = "Select distinct pointer from pmt";

$result1 = mysqli_query($id,$query1);

$i=0;

$pmtlist = array();

while($row1 = mysqli_fetch_assoc($result1)){

$pmtlist[$i]=$row1['pointer'];

$i++;

}

mysqli_free_result($result1);

if(in_array($programNumber,$programs) && $programNumber

<>0 && $programNumber< 1016){

$stmt4 = mysqli_prepare($id, "INSERT INTO pmt values

(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

Page 87: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

87

mysqli_stmt_bind_param($stmt4,'iiiiiiiiiiiiiiiii',$transportstreamid,$coun

tpointer, $tableID,$sectionSyntax,$sectionLength, $programNumber,

$versionNumber, $currentnextId, $sectionNumber, $lastSectionNumber,

$PCR_PID, $programInfoLength, $stream_type, $elementary_PID,

$ES_info_length, $descriptor_tag, $descriptor_tag_hex);

$result4 = mysqli_execute($stmt4);

if(!$result4){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 470) " ;

die("Error: no se pudo realizar la consulta.");

}

switch ($descriptor_tag_hex){

case 0x02:

video_stream_descriptor($countpointer,

$programNumber);

break;

case 0x03:

audio_stream_descriptor($countpointer,

$programNumber);

break;

case 0x04:

hierarchy_descriptor($countpointer,

$programNumber);

break;

case 0x06:

data_stream_alignment_descriptor($countpointer, $programNumber);

break;

case 0x07:

target_background_grid_descriptor($countpointer, $programNumber);

break;

case 0x08:

video_window_descriptor($countpointer,

$programNumber);

break;

case 0x0a:

iso_639_language_descriptor($countpointer,

$programNumber);

break;

case 0x0b:

system_clock_descriptor($countpointer,

$programNumber);

break;

case 0x0c:

multiplex_buffer_utilization_descriptor($countpointer, $programNumber);

break;

case 0x0d:

copyright_descriptor();

break;

case 0x0e:

maximum_bitrate_descriptor($countpointer,

$programNumber);

break;

case 0x0f:

private_data_indicator_descriptor($countpointer, $programNumber);

break;

case 0x10:

Page 88: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

88

smoothing_buffer_descriptor($countpointer,

$programNumber);

break;

case 0x11:

std_descriptor($countpointer, $programNumber);

break;

case 0x12:

ibp_descriptor($countpointer, $programNumber);

break;

case 0x1b:

mpeg4_video_descriptor($countpointer,

$programNumber);

break;

case 0x1c:

mpeg4_audio_descriptor($countpointer,

$programNumber);

break;

case 0x1e:

sl_descriptor($countpointer, $programNumber);

break;

case 0x1f:

fmc_descriptor($countpointer, $programNumber);

break;

case 0x20:

external_es_id_descriptor($countpointer,

$programNumber);

break;

case 0x23:

multiplexbuffer_descriptor($countpointer,

$programNumber);

break;

case 0x45:

vbi_data_descriptor($countpointer,

$programNumber);

break;

case 0x46:

vbi_teletext_descriptor($countpointer,

$programNumber);

break;

case 0x52:

stream_identifier_descriptor($countpointer,

$programNumber);

break;

case 0x56:

teletext_descriptor($countpointer,

$programNumber);

break;

case 0x59:

subtitling_descriptor($countpointer,

$programNumber);

break;

case 0x5f:

private_data_specifier_descriptor();

break;

case 0x60:

service_move_descriptor($countpointer,

$programNumber);

break;

case 0x65:

scrambling_descriptor($countpointer,

$programNumber);

Page 89: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

89

break;

case 0x66:

data_broadcast_id_descriptor($countpointer,

$programNumber);

break;

}

}

}

}else{

saltarN(1472);

}

}

}

function leerN(int $n){

$valor = 0;

global $pos;

global $nbits;

global $array;

global $unos;

$unos = array(

0 => 0x00,

1 => 0x01,

2 => 0x03,

3 => 0x07,

4 => 0x0F,

5 => 0x1F,

6 => 0x3F,

7 => 0x7F,

8 => 0xFF

);

if($n>0){

while ($n>0){

if($nbits == 0){

$nbits = 8;

$pos+=1;

$byteActual=ord($array[$pos]);

$cuantos = min($n,$nbits);

$mascara = $unos[$cuantos] << abs($nbits -$cuantos);

$valorc = ($mascara & $byteActual) >> abs($nbits -

$cuantos);

$valor=$valor + ($valorc << abs($n-$cuantos));

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

}else{

$byteActual=ord($array[$pos]);

$cuantos = min($n,$nbits);

$mascara = $unos[$cuantos] << abs($nbits -$cuantos);

$valorc = ($mascara & $byteActual) >> abs($nbits -

$cuantos);

$valor=$valor + ($valorc << abs($n-$cuantos));

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

}

}

}else{

}

return $valor;

}

Page 90: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

90

function saltarN(int $n){

$valor = 0;

global $pos;

global $nbits;

global $array;

global $unos;

$unos = array(

0 => 0x00,

1 => 0x01,

2 => 0x03,

3 => 0x07,

4 => 0x0F,

5 => 0x1F,

6 => 0x3F,

7 => 0x7F,

8 => 0xFF

);

if($n>0){

while ($n>0){

if($nbits == 0){

$nbits = 8;

$pos+=1;

$byteActual=ord($array[$pos]);

$cuantos = min($n,$nbits);

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

}else{

$byteActual=ord($array[$pos]);

$cuantos = min($n,$nbits);

$n = $n - $cuantos;

$nbits = $nbits -$cuantos;

}

}

}else{

}

}

function leerCadena(int $length){

$char = '';

$i=0;

$table_type = 'ISO-8859-1';

while($i<$length){

$c = leerN(8);

if($c == 0x05){

$table_type = 'ISO-8859-9';

}else{

$c = iconv($table_type,'utf-8', chr($c));

$char .=$c;

}

$i++;

}

return $char;

}

function leerCadenaISO(int $length){

$char = '';

$i=0;

$table_type = 'ISO-8859-1';

while($i<$length){

$c = leerN(8);

Page 91: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

91

$c = iconv($table_type,'utf-8', chr($c));

$char .=$c;

$i++;

}

return $char;

}

function video_stream_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$multiple_frame_rate_flag = leerN(1);

$frame_rate_code = leerN(4);

$mpeg_1_only_flag = leerN(1);

$constrained_parameter_flag = leerN(1);

$still_picture_flag=leerN(1);

echo "VIDEO STREAM DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Multiple FR Flag: $multiple_frame_rate_flag //"

. "FR Code: $frame_rate_code //"

. "MPEG 1 only flag: $mpeg_1_only_flag //"

. "Constrained parameter flag : $constrained_parameter_flag

//"

. "Still picture flag : $still_picture_flag <br>";

if ($mpeg_1_only_flag == 0){

$profile_and_level_indication = leerN(8);

$chroma_format = leerN(2);

$frame_rate_extension_flag = leerN(1);

$reserved = leerN(5);

}

$query1 = "Select distinct pointer from videostreamdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO videostreamdescriptor

values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiiiiiiii', $transportstreamid,

$programNumber, $countpointer,

$descriptor_length,$multiple_frame_rate_flag,

$frame_rate_code,$mpeg_1_only_flag,$constrained_parameter_flag,$still_pict

ure_flag,$profile_and_level_indication,$chroma_format,$frame_rate_extensio

n_flag);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 776) " ;

die("Error: no se pudo realizar la consulta.");

Page 92: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

92

}

mysqli_stmt_free_result($stmt);

}

}

function audio_stream_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$free_format_flag = leerN(1);

$id2 = leerN(1);

$layer = leerN(2);

$variable_rate_audio_indicator = leerN(1);

$reserved = leerN(3);

echo "AUDIO STREAM DESCRIPTOR: <br>Descriptor length:

$descriptor_length //"

. "Free Format Flag: $free_format_flag //"

. "ID: $id2 //"

. "Layer: $layer //"

. "Variable Rate Audio Indicator:

$variable_rate_audio_indicator<br>";

$query1 = "Select distinct pointer from audiostreamdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO audiostreamdescriptor

values (?, ?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiiii',$transportstreamid,

$programNumber, $countpointer, $descriptor_length,$free_format_flag,$id2,

$layer, $variable_rate_audio_indicator);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 807) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

}

function hierarchy_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

$descriptor_length = leerN(8);

$reserved = leerN(4);

$hierarchy_type = leerN(4);

$reserved2 = leerN(2);

$hierarchy_layer_index = leerN(6);

Page 93: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

93

$reserved3 = leerN(2);

$hierarchy_embedded_layer_index = leerN(6);

$reserved4=leerN(2);

$hierarchy_channel = leerN(6);

echo "HIERARCHY DESCRIPTOR: <br>Descriptor length: $descriptor_length

//"

. "Hierarchy Type: $hierarchy_type //"

. "Hierarchy Layer: $hierarchy_layer_index //"

. "Hierarchy Embedded Layer Index:

$hierarchy_embedded_layer_index //"

. "Hierarchy Channel: $hierarchy_channel<br>";

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$query1 = "Select distinct pointer from hierarchydescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO hierarchydescriptor

values (?, ?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiiii',$countpointer,$transportstreamid,

$programNumber, $descriptor_length, $hierarchy_type,

$hierarchy_layer_index, $hierarchy_embedded_layer_index,

$hierarchy_channel);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

"839) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

}

function registration_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

$descriptor_length=leerN(8);

$format_identifier=leerN(32);

for($i=0;$i<$format_identifier;$i++){

$additional_identification_info = leerN(8);

}

echo "REGISTRATION DESCRIPTOR: <br>Descriptor length:

$descriptor_length //"

. "Format identifier: $format_identifier<br>";

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

Page 94: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

94

$query1 = "Select distinct pointer from registrationdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO registrationdescriptor

values (?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiii',$countpointer,$transportstreamid,

$programNumber, $descriptor_length, $format_identifier,

$additional_identification_info);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 864) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

}

function data_stream_alignment_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

$descriptor_length=leerN(8);

$alignment_type = leerN(8);

echo "DATA STREAM ALIGNMENT DESCRIPTOR: <br>Descriptor length:

$descriptor_length // "

. "Alignment Type: $alignment_type<br>";

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$query1 = "Select distinct pointer from

datastreamalignmentdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO

datastreamalignmentdescriptor values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,

$programNumber, $descriptor_length, $alignment_type);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 886) " ;

die("Error: no se pudo realizar la consulta.");

}

Page 95: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

95

mysqli_stmt_free_result($stmt);

}

}

function target_background_grid_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

$descriptor_length=leerN(8);

$horizontal_size =leerN(14);

$vertical_size = leerN(14);

$aspect_ratio_information = leerN(4);

echo "TARGET BACKGROUND GRID DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Horizontal size: $horizontal_size //"

. "Vertical size: $vertical_size //"

. "Aspect Ratio: $aspect_ratio_information<br>";

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$query1 = "Select distinct pointer from

targetbackgroundgriddescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$targetlist = array();

while($row1 = mysqli_fetch_assoc($result1)){

$targetlist[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $targetlist)){

$stmt = mysqli_prepare($id, "INSERT INTO

targetbackgroundgriddescriptor values (?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiii',$countpointer,$transportstreamid,

$programNumber, $descriptor_length, $horizontal_size, $vertical_size,

$aspect_ratio_information);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 912) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

}

function video_window_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

$descriptor_length=leerN(8);

$horizontal_offset = leerN(14);

$vertical_offset = leerN(14);

$window_priority = leerN(4);

echo "VIDEO WINDOW DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Horizontal offset: $horizontal_offset //"

. "Vertical offset: $vertical_offset //"

. "Window priority: $window_priority<br>";

Page 96: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

96

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$query1 = "Select distinct pointer from videowindowdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$videolist = array();

while($row1 = mysqli_fetch_assoc($result1)){

$videolist[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $videolist)){

$stmt = mysqli_prepare($id, "INSERT INTO videowindowdescriptor

values (?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiii',$countpointer,$transportstreamid,

$programNumber, $descriptor_length, $horizontal_offset, $vertical_offset,

$window_priority);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1048) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

}

function ca_descriptor(int $countpointer, int $programNumber){

$descriptor_length=leerN(8);

$ca_system_id = leerN(16);

$reserved = leerN(3);

$ca_PID=leerN(13);

}

function iso_639_language_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

for ($i=0;$i<$descriptor_length;$i++){

$iso_639_language_code = leerCadena(24);

$audio_type = leerN(8);

echo "ISO 639 DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "ISO 639 Language Code: $iso_639_language_code

//"

. "Audio Type: $audio_type<br>";

$query1 = "Select distinct pointer from

iso639languagedescriptor";

$result1 = mysqli_query($id,$query1);

Page 97: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

97

$n=0;

$isolist = array();

while($row1 = mysqli_fetch_assoc($result1)){

$isolist[$n]=$row1['pointer'];

$n++;

}

if(!in_array($countpointer, $isolist)){

$stmt = mysqli_prepare($id, "INSERT INTO

iso639languagedescriptor values(?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiisi',$transportstreamid,$programNum

ber, $countpointer,$descriptor_length, $iso_639_language_code,

$audio_type);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 983) " ;

die("Error: no se pudo realizar la consulta.");

}

}

}

mysqli_stmt_free_result($stmt);

}

function system_clock_descriptor(){

$descriptor_length=leerN(8);

$external_clock_reference_indicator = leerN(1);

$reserved = leerN(1);

$clock_accuracy_integer = leerN(6);

$clock_accuracy_exponent =leerN(3);

$reserved2 = leerN(5);

echo "SYSTEM CLOCK DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "External clock reference indicator:

$external_clock_reference_indicator //"

. "Clock accuracy integer: $clock_accuracy_integer //"

. "Clock accuracy exponent: $clock_accuracy_exponent<br>";

}

function multiplex_buffer_utilization_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$bound_valid_flag = leerN(1);

$ltw_offset_lower_bound = leerN(15);

$reserved = leerN(1);

$ltw_offset_upper_bound = leerN(14);

$query1 = "Select distinct pointer from

multiplexbufferutilizationdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

Page 98: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

98

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO

multiplexbufferutilizationdescriptor values (?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiii',$countpointer,$transportstreamid,

$descriptor_length, $bound_valid_flag, $ltw_offset_lower_bound,

$ltw_offset_upper_bound,$programNumber);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1145) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "MULTIPLEX BUFFER UTILIZATION DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Bound valid flag: $bound_valid_flag //"

. "LTW offset lower bound: $ltw_offset_lower_bound //"

. "LTW Offset Upper bound: $ltw_offset_upper_bound<br>";

}

function copyright_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length= leerN(8);

$copyright_identifier = leerN(32);

for ($i=0;$i<$descriptor_length;$i++){

$additional_copyright_data = leerN(8);

}

$query1 = "Select distinct pointer from copyrightdescriptor";

$result1 = mysqli_query($id,$query1);

$n=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$n]=$row1['pointer'];

$n++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO copyrightdescriptor

values (?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiii',$countpointer,$transportstreamid,

$programNumber, $descriptor_length, $copyright_identifier,

$additional_copyright_data);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1185) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

Page 99: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

99

}

echo "COPYRIGHT DESCRIPTOR: <br>Descriptor Length: $descriptor_length

<br>";

}

function maximum_bitrate_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length= leerN(8);

$reserved = leerN(2);

$maximum_bitrate = leerN(22);

$query1 = "Select distinct pointer from maximumbitratedescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO maximumbitratedescriptor

values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $maximum_bitrate);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1221) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "MAXIMUM BITRATE DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Maximum bitrate: $maximum_bitrate <br>";

}

function private_data_indicator_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$private_data_indicator = leerN(32);

$query1 = "Select distinct pointer from privatedatadescriptor";

$result1 = mysqli_query($id,$query1);

Page 100: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

100

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO privatedatadescriptor

values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $private_data_indicator);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1256) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "PRIVATE DATA DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Private Data indicator: $private_data_indicator <br>";

}

function smoothing_buffer_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length = leerN(8);

$reserved=leerN(2);

$sb_leak_rate = leerN(22);

$reserved2=leerN(2);

$sb_size = leerN(22);

$query1 = "Select distinct pointer from smoothingbufferdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO smoothingbufferdescriptor

values (?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiii',$countpointer,$transportstreamid,$pr

ogramNumber, $descriptor_length, $sb_leak_rate, $sb_size);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1294) " ;

die("Error: no se pudo realizar la consulta.");

}

Page 101: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

101

mysqli_stmt_free_result($stmt);

}

echo "SMOOTHING BUFFER DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "SB Leak Rate: $sb_leak_rate //"

. "SB Size: $sb_size<br>";

}

function std_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$reserved = leerN(7);

$leak_valid_flag=leerN(1);

$query1 = "Select distinct pointer from stddescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO stddescriptor values (?,

?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $leak_valid_flag);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1331) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "STD DESCRIPTOR: <br>Descriptor Length: $descriptor_length //"

. "Leak valid flag: $leak_valid_flag <br>";

}

function ibp_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$closed_gop_flag = leerN(1);

$identical_glop_flag = leerN(1);

$max_gop_length = leerN(14);

Page 102: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

102

$query1 = "Select distinct pointer from ibpdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO ibpdescriptor values (?,

?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiii',$countpointer,$transportstreamid,$p

rogramNumber, $descriptor_length, $closed_gop_flag, $identical_glop_flag,

$max_gop_length);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1368) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "IBP DESCRIPTOR: <br>Descriptor Length: $descriptor_length //"

. "Closed GOP Flag: $closed_gop_flag //"

. "Identical GOP Flag: $identical_glop_flag //"

. "Max GOP Length: $max_gop_length <br>";

}

function mpeg4_video_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$mpeg4_visual_profile_and_level = leerN(8);

$query1 = "Select distinct pointer from mpeg4videodescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO mpeg4videodescriptor

values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $mpeg4_visual_profile_and_level);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1405) " ;

die("Error: no se pudo realizar la consulta.");

}

Page 103: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

103

mysqli_stmt_free_result($stmt);

}

echo "MPEG4 VIDEO DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "MPEG4 Visual profile and level:

$mpeg4_visual_profile_and_level <br>";

}

function mpeg4_audio_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$mpeg4_audio_profile_and_level = leerN(8);

$query1 = "Select distinct pointer from mpeg4audiodescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO mpeg4audiodescriptor

values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $mpeg4_audio_profile_and_level);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1440) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "MPEG4 AUDIO DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "MPEG4 Audio profile and level:

$mpeg4_audio_profile_and_level <br>";

}

function sl_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$es_id = leerN(16);

$query1 = "Select distinct pointer from sldescriptor";

Page 104: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

104

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO sldescriptor values (?,

?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $es_id);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1475) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "SL DESCRIPTOR: <br>Descriptor Length: $descriptor_length //"

. "ES id: $es_id <br>";

}

function fmc_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

for ($i=0;$i<$descriptor_length;$i+=3){

$es_id = leerN(16);

$flexmuxchannel = leerN(8);

$query1 = "Select distinct pointer from fmcdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO fmcdescriptor values

(?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiii',$countpointer,$transportstreamid,$pr

ogramNumber, $descriptor_length, $es_id, $flexmuxchannel);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 1512) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

Page 105: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

105

echo "FMC DESCRIPTOR: <br>Descriptor Length: $descriptor_length

//"

. "ES id: $es_id //"

. "FlexMux Channel: $flexmuxchannel <br>";

}

}

function external_es_id_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$external_es_id = leerN(16);

$query1 = "Select distinct pointer from externalesiddescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO externalesiddescriptor

values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $external_es_id);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1549) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "EXTERNAL ES ID DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "ES id: $external_es_id <br>";

}

function multiplexbuffer_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$mb_buffer_size = leerN(24);

$tb_leak_rate = leerN(24);

$query1 = "Select distinct pointer from multiplexbufferdescriptor";

Page 106: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

106

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO multiplexbufferdescriptor

values (?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiii',$countpointer,$transportstreamid,$pr

ogramNumber, $descriptor_length, $mb_buffer_size, $tb_leak_rate);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 1585) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "MULTIPLEX BUFFER DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "MB Buffer Size: $mb_buffer_size //"

. "TB Leak rate: $tb_leak_rate <br>";

}

function vbi_data_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_lenght=leerN(8);

for ($i=0;$i<$descriptor_lenght;$i++){

$data_service_id = leerN(8);

$data_service_descriptor_length =leerN(8);

if($data_service_id == 0x01 ||

$data_service_id==0x02 ||

$data_service_id==0x04 ||

$data_service_id==0x05 ||

$data_service_id==0x06 ||

$data_service_id==0x07){

for($j=0;$j<$data_service_descriptor_length;$j++){

$reserved = leerN(2);

$field_parity=leerN(1);

$line_offset = leerN(5);

$query1 = "Select distinct pointer from

vbidatadescriptor";

$result1 = mysqli_query($id,$query1);

$n=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$n]=$row1['pointer'];

$n++;

}

Page 107: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

107

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO vbidatadescriptor

values (?, ?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiiii',$countpointer,$transportstreamid,$

programNumber, $descriptor_lenght, $data_service_id,

$data_service_descriptor_length, $field_parity, $line_offset);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 1634) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "VBI DATA DESCRIPTOR: <br>Descriptor Length:

$descriptor_lenght //"

. "data service id: $data_service_id //"

. "Data service descriptor length:

$data_service_descriptor_length //"

. "field parity: $field_parity //"

. "line offset: $line_offset <br>";

}

} else{

for ($j=0;$j<$data_service_descriptor_lenght;$j++){

$reserved =leerN(8);

}

}

}

}

function vbi_teletext_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

for($i=0;$i<$descriptor_length;$i++){

$iso_639_language_code = leerCadena(24);

$teletext_type = leerN(5);

$teletext_magazine_number = leerN(3);

$teletext_page_number = leerN(8);

$query1 = "Select distinct pointer from vbiteletextdescriptor";

$result1 = mysqli_query($id,$query1);

$n=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$n]=$row1['pointer'];

$n++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO vbiteletextdescriptor

values (?, ?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiisiii',$countpointer,$transportstreamid,$

Page 108: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

108

programNumber, $descriptor_length, $iso_639_language_code,

$teletext_type, $teletext_magazine_number, $teletext_page_number);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " ) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

}

echo "VBI TELETEXT DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "ISO 639 language code: $iso_639_language_code //"

. "Teletext type: $teletext_type<br>";

}

function mosaic_descriptor(){

}

function stream_identifier_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$component_tag = leerN(8);

$query1 = "Select distinct pointer from streamidentifierdescriptor";

$result1 = mysqli_query($id,$query1);

$n=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$n]=$row1['pointer'];

$n++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO vbiteletextdescriptor

values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $component_tag);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " ) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

}

function teletext_descriptor(int $countpointer, int $programNumber){

echo "TELETEXT DESCRIPTOR <br>";

global $transportstreamid;

Page 109: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

109

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

echo "Descriptor Lenght: $descriptor_length<br>";

for($i=0;$i<$descriptor_length;$i++){

$iso_639_language_code = leerCadena(24);

$teletext_type = leerN(5);

$teletext_magazine_number = leerN(3);

$teletext_page_number = leerN(8);

$query1 = "Select distinct pointer from teletextdescriptor";

$result1 = mysqli_query($id,$query1);

$n=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$n]=$row1['pointer'];

$n++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO teletextdescriptor

values (?, ?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiisiii',$countpointer,$transportstreamid,$

programNumber, $descriptor_length, $iso_639_language_code,

$teletext_type, $teletext_magazine_number, $teletext_page_number);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 938) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "TELETEXT DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "ISO 639 language code: $iso_639_language_code //"

. "Teletext type: $teletext_type//"

. "Teletext magazine number: $teletext_magazine_number //"

. "Teletext page number: $teletext_page_number<br>";

}

}

function subtitling_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

for($i=0;$i<$descriptor_length;$i++){

Page 110: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

110

$iso_639_language_code = leerCadena(24);

$subtitling_type = leerN(8);

$composition_page_id = leerN(16);

$ancillary_page_id = leerN(16);

$query1 = "Select distinct pointer from subtitlingdescriptor";

$result1 = mysqli_query($id,$query1);

$n=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$n]=$row1['pointer'];

$n++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO subtitlingdescriptor

values (?, ?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiisiii',$countpointer,$transportstreamid,$

programNumber, $descriptor_length, $iso_639_language_code,

$subtitling_type, $composition_page_id, $ancillary_page_id);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 938) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "SUBTITLING DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "ISO 639 language code: $iso_639_language_code //"

. "Subtitling type: $subtitling_type<br>";

}

}

function private_data_specifier_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$private_data_specifier=leerN(32);

$query1 = "Select distinct pointer from

privatedataspecifierdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

Page 111: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

111

$stmt = mysqli_prepare($id, "INSERT INTO

privatedataspecifierdescriptor values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $private_data_specifier);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 938) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "PRIVATE DATA SPECIFIER DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Private data specifier: $private_data_specifier<br>";

}

function service_move_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$new_original_network_id = leerN(16);

$new_transport_stream_id = leerN(16);

$new_service_id = leerN(16);

$query1 = "Select distinct pointer from servicemovedescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO servicemovedescriptor

values (?, ?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiiii',$countpointer,$transportstreamid,$p

rogramNumber, $descriptor_length, $new_original_network_id,

$new_transport_stream_id, $new_service_id);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 938) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "SERVICE MOVE DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "New original network id: $new_original_network_id //"

. "New transport stream id: $new_transport_stream_id //"

. "New service id: $new_service_id<br>";

}

Page 112: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

112

function scrambling_descriptor(int $countpointer, int $programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length = leerN(8);

$scrambling_mode = leerN(8);

$query1 = "Select distinct pointer from scramblingdescriptor";

$result1 = mysqli_query($id,$query1);

$i=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

$list[$i]=$row1['pointer'];

$i++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO scramblingdescriptor

values (?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiii',$countpointer,$transportstreamid,$pro

gramNumber, $descriptor_length, $scrambling_mode);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

" 938) " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

}

echo "SCRAMBLING DESCRIPTOR: <br>Descriptor Length: $descriptor_length

//"

. "Scrambling mode: $scrambling_mode<br>";

}

function data_broadcast_id_descriptor(int $countpointer, int

$programNumber){

global $transportstreamid;

global $id;

global $db;

if(!$id){

die("Error: No se pudo conectar");

}

if(!$db){

die("Error: No existe la base de datos.");

}

$descriptor_length=leerN(8);

$data_broadcast_id = leerN(16);

for ($i=0;$i<$descriptor_length;$i++){

$id_selector_byte = leerN(8);

$query1 = "Select distinct pointer from

databroadcastiddescriptor";

$result1 = mysqli_query($id,$query1);

$n=0;

$list = array();

while($row1 = mysqli_fetch_assoc($result1)){

Page 113: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

113

$list[$n]=$row1['pointer'];

$n++;

}

if(!in_array($countpointer, $list)){

$stmt = mysqli_prepare($id, "INSERT INTO

databroadcastiddescriptor values (?, ?, ?, ?, ?, ?)");

mysqli_stmt_bind_param($stmt,'iiiiii',$countpointer,$transportstreamid,$pr

ogramNumber, $descriptor_length, $data_broadcast_id, $id_selector_byte);

$result = mysqli_execute($stmt);

if(!$result){

echo "Fallo al ejecutar la consulta: (" .

mysqli_error($id) . " 938) " ;

die("Error: no se pudo realizar la consulta.");

}

}

mysqli_stmt_free_result($stmt);

echo "DATA BROADCAST ID DESCRIPTOR: <br>Descriptor Length:

$descriptor_length //"

. "Data Broadcast Id: $data_broadcast_id //"

. "Id selector byte: $id_selector_byte<br>";

}

}

function padding8(string $value){

$val = decbin($value);

$data= str_pad($val, 8, "0", STR_PAD_LEFT);

return $data;

}

function paddingN(string $value, int $n){

$val = decbin($value);

$data= str_pad($val, $n, "0", STR_PAD_LEFT);

return $data;

}

function arraytobin(string $value){

$out='';

for ($i=0; $i<strlen($value);$i++){

$out .= padding8(ord(substr($value, $i, 1)));

}

return $out;

}

?>

</body>

</html>

2. Index.php

<html>

<head>

<meta charset="utf-8">

Page 114: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

114

<meta name="viewport" content="width=device-width, initial-

scale=1.0">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<title> Herramienta de análisis de un Transport Stream DVB-

T</title>

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.min.css">

<link href="style.css" rel="stylesheet" type="text/css"/>

<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/yui_combo.php?rollup/3.17.2/yui-moodlesimple-min.css" />

<script id="firstthemesheet" type="text/css"></script>

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/styles.php/boost/1578900641_1578900773/all" />

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script src="semantic/dist/semantic.min.js"></script>

</head>

<body >

<?php

include './config.php';

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

if(!$id){

die("Error: No se pudo conectar");

}

if(!mysqli_select_db($id,Config::$database)){

die("Error: No existe la base de datos.");

}

?>

<div>

<header id="page-header" class="row">

<div class="col-12 pt-3 pb-3">

<div class="cardheader">

<div class="card-body">

<div class="d-flex">

<div class="mr-auto">

<div class="page-content-header">

<div class="page-header-headings">

<h1 style="padding-left:0px"> Página

Principal </h1>

</div>

</div>

</div>

</div>

<div class="d-flex flex-wrap">

<div id="page-navbar">

<nav role="navigation" aria-label="Barra de

navegación">

<ol class="breadcrumb">

<li class="breadcrumb-item">

<a href="index.php"> Página

Principal </a>

</li>

</ol>

</nav>

</div>

</div>

</div>

</div>

</div>

Page 115: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

115

</header>

</div>

<div>

<h1 align="center" style="padding:1rem; margin:1rem;"> Listado de

Transport Streams </h1>

</div>

<?php

$query="select distinct Name, Id from transportstream";

$result = mysqli_query($id, $query);

if(!$result){

die("Error: no se pudo realizar la consulta.");

}

echo '<div class="container2 style="width:0;" align="center">';

echo '<div class="card" style="background-color:white" align="center">';

echo '<form class="showpat" action="showSDT.php" method="get" >';

echo '<table align="center" border="0" style="letter-spacing: 1px;">';

while($row = mysqli_fetch_assoc($result)){

echo '<tr>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">' . $row['Name'] . '</td>';

echo'<td><button type="submit" class="styled2" name="Id" value="' .

$row['Id'] . '" style="margin-left: 3rem></td>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">Seleccionar</td>';

echo '</tr>';

}

echo '</table>';

echo '</form>';

echo '</div></div>';

mysqli_free_result($result);

mysqli_close($id);

?>

<div class="containeradmin">

<form action="checklogin.php" method="get">

<div class="card flex" align="center" style="background-

color:white">

<div class="flex " style="margin: 1rem; ">

<br>

<label for="username" style="left: 0">Usuario:</label>

<input type="text" style="border-radius: 5px;"

placeholder="Ingresar Usuario" id="username" name="username">

</div>

<div class="flex" style="margin: 1rem; ">

<br>

<label for="pass">Password :</label>

<input type="password" style="border-radius: 5px;"

placeholder="Ingresa tu contraseña" id="pass" name="password" required>

</div>

<div >

<button type="submit"class="input">Entrar</button>

</div>

<br>

</div>

</form>

</div>

</body>

Page 116: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

116

</html>

Page 117: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

117

3. ShowSDT.php

<html>

<head>

<meta charset="utf-8">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<title> Lista de Programas</title>

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.min.css">

<link href="style.css" rel="stylesheet" type="text/css"/>

<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/yui_combo.php?rollup/3.17.2/yui-moodlesimple-min.css" />

<script id="firstthemesheet" type="text/css"></script>

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/styles.php/boost/1578900641_1578900773/all" />

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script src="semantic/dist/semantic.min.js"></script>

</head>

<body>

<div>

<header id="page-header" class="row">

<div class="col-12 pt-3 pb-3">

<div class="cardheader">

<div class="card-body">

<div class="d-flex">

<div class="mr-auto">

<div class="page-content-header">

<div class="page-header-headings">

<h1> Lista de programas </h1>

</div>

<form action="index.php" method="get">

<div>

<div>

<button type="submit"

class="return"><i class="material-icons">home</i></button>

</div>

</div>

</form>

</div>

</div>

</div>

<div class="d-flex flex-wrap">

<div id="page-navbar">

<nav role="navigation" aria-label="Barra de

navegación">

<ol class="breadcrumb">

<li class="breadcrumb-item">

<a href="index.php"> Página

Principal </a>

</li>

<li class="breadcrumb-item">

<a > Lista de programas</a>

</li>

</ol>

</nav>

</div>

</div>

</div>

</div>

</div>

Page 118: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

118

</header>

</div>

<?php

include './config.php';

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

if(!$id){

die("Error: No se pudo conectar");

}

if(!mysqli_select_db($id,Config::$database)){

die("Error: No existe la base de datos.");

}

$query="select distinct Service_id, service_provider_name, service_name

from sdt where transportstream= '".$_GET['Id']."' and service_id<1016";

$result = mysqli_query($id, $query);

if(!$result){

die("Error: no se pudo realizar la consulta.");

}

$query2="select distinct service_provider_name from sdt where

transportstream= '".$_GET['Id']."' ";

$result2 = mysqli_query($id, $query2);

if(!$result2){

die("Error: no se pudo realizar la consulta.");

}

$row2 = mysqli_fetch_assoc($result2);

$serviceprovidername = $row2['service_provider_name'];

echo '<div class="container2 " style="margin-top:0; padding-top:0;">';

echo '<form action="showProgram.php" method="get" >';

echo '<h1 align="center" style="padding:1rem; margin:1rem;"> Lista de

programas de ' . $serviceprovidername . '</h1>';

echo '<div class="cardsdt flex" style="padding:1rem; margin:1rem; align-

content:center;" >';

echo '<br><br><table class="showprogram" border="0">';

while($row = mysqli_fetch_assoc($result)){

echo '<tr>';

echo '<td style="border: 0px ;padding: 10px;"><input type="submit"

class="favorite styled" name="ProgramId" value="' . $row['Service_id'] .

'" style="padding: 0.5rem; "></td>';

echo '<td style="border: 0px ;padding: 10px;">' . $row['service_name']

. '</td>';

echo '</tr>';

}

echo '</table><br><br></div></form></div>';

mysqli_free_result($result);

mysqli_close($id);

?>

</body>

</html>

Page 119: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

119

4. ShowProgram.php

<html>

<head>

<meta charset="utf-8">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<title> Lista de componentes</title>

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.min.css">

<link href="style.css" rel="stylesheet" type="text/css"/>

<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/yui_combo.php?rollup/3.17.2/yui-moodlesimple-min.css" />

<script id="firstthemesheet" type="text/css"></script>

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/styles.php/boost/1578900641_1578900773/all" />

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script src="semantic/dist/semantic.min.js"></script>

</head>

<body >

<?php

include './config.php';

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

if(!$id){

die("Error: No se pudo conectar");

}

if(!mysqli_select_db($id,Config::$database)){

die("Error: No existe la base de datos.");

}

$programid= $_GET['ProgramId'] ;

$sdtid = 0;

$stmt = mysqli_prepare($id,"select TransportStream from sdt where

service_id = ?");

mysqli_stmt_bind_param($stmt,'i',$programid);

$resultstmt = mysqli_stmt_execute($stmt);

mysqli_stmt_bind_result($stmt, $sdtid);

mysqli_stmt_fetch($stmt);

if(!$resultstmt){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) .

") " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

?>

<div>

<header id="page-header" class="row">

<div class="col-12 pt-3 pb-3">

<div class="cardheader">

<div class="card-body">

<div class="d-flex">

<div class="mr-auto">

<div class="page-content-header">

<div class="page-header-headings">

<h1> Lista de componentes </h1>

</div>

<form action="index.php" method="get">

<div>

<div>

Page 120: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

120

<button type="submit"

class="return"><i class="material-icons">home</i></button>

</div>

</div>

</form>

</div>

</div>

</div>

<div class="d-flex flex-wrap">

<div id="page-navbar">

<nav role="navigation" aria-label="Barra de

navegación">

<ol class="breadcrumb">

<li class="breadcrumb-item">

<a href="index.php"> Página

Principal </a>

</li>

<li class="breadcrumb-item">

<?php echo '<a

href="showSDT.php?Id='. $sdtid .'"> Lista de programas</a>'; ?>

</li>

<li class="breadcrumb-item">

<a> Lista de componentes</a>

</li>

</ol>

</nav>

</div>

</div>

</div>

</div>

</div>

</header>

</div>

<?php

echo '<div><h1 align="center" style="padding:2rem; margin:2rem;"> Listado

de componentes del programa ' . $programid . ' </h1></div>';

$stmtprograms = mysqli_prepare($id,"select programnumber,

descriptor_tag_hex, Pointer, pcr_pid, stream_type, description from (

select distinct a.programnumber,

a.descriptor_tag_hex,

a.Pointer,

a.pcr_pid,

case a.stream_type when 0 then 'Contenido reservado ITU-T | ISO/IEC'

when 1 then 'Vídeo ISO/IEC 11172'

when 2 then 'Vídeo ITU-T Rec. H.262 |ISO/IEC 13818-2 o Secuencia

de vídeo ISO/IEX 11172-2'

when 3 then 'Audio ISO/IEC 11172'

when 4 then 'Audio ISO/IEC 13818-3'

when 5 then 'Sección privada ITU-T Rec. H.222.0 | ISO/IEC 13818-1'

when 6 then 'Paquetes PES con contenido privado ITU-T Rec. H.222.0

| ISO/IEC 13818-1'

when 7 then 'MHEG ISO/IEC 13522'

when 8 then 'DSM-CC ITU-T Rec. H.222.0 | ISO/IEC 13818-1'

when 9 then 'ITU-T Rec. H.222.1'

when 10 then 'ISO/IEC 13818-6 tipo A'

when 11 then 'ISO/IEC 13818-6 tipo B'

when 12 then 'ISO/IEC 13818-6 tipo C'

when 13 then 'ISO/IEC 13818-6 tipo D'

when 14 then 'Datos auxiliares ITU-T Rec. H.222.0 | ISO/IEC 13818-

1'

Page 121: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

121

when 15 then 'Audio con sintaxis de transporte ADTS ISO/IEC 13818-

7'

when 16 then 'Visual ISO/IEC 14496-2'

when 17 then 'Audio con sintaxis de transporte LATM definida en

ISO/IEC 14496-3 / AMD 1'

when 18 then 'Secuencia de paquetes SL ISO/IEC 14496-1 o

secuencias FlexMux transportadas en paquetes PES'

when 19 then 'Secuencia de paquetes SL ISO/IEC 14496-1 o

secuencias FlexMux transportadas secciones ISO/IEC 14496_'

when 20 then 'Protocolo de descarga sincronizada ISO/IEC 13818-6'

end as stream_type,

b.description

from pmt a

inner join bealltables b

on a.descriptor_tag_hex=b.value

where type='descriptor' and a.programnumber=?

union

select distinct c.programnumber,

c.descriptor_tag_hex,

c.Pointer,

c.pcr_pid,

case c.stream_type when 0 then 'Contenido reservado ITU-T | ISO/IEC'

when 1 then 'Vídeo ISO/IEC 11172'

when 2 then 'Vídeo ITU-T Rec. H.262 |ISO/IEC 13818-2 o Secuencia

de vídeo ISO/IEX 11172-2'

when 3 then 'Audio ISO/IEC 11172'

when 4 then 'Audio ISO/IEC 13818-3'

when 5 then 'Sección privada ITU-T Rec. H.222.0 | ISO/IEC 13818-1'

when 6 then 'Paquetes PES con contenido privado ITU-T Rec. H.222.0

| ISO/IEC 13818-1'

when 7 then 'MHEG ISO/IEC 13522'

when 8 then 'DSM-CC ITU-T Rec. H.222.0 | ISO/IEC 13818-1'

when 9 then 'ITU-T Rec. H.222.1'

when 10 then 'ISO/IEC 13818-6 tipo A'

when 11 then 'ISO/IEC 13818-6 tipo B'

when 12 then 'ISO/IEC 13818-6 tipo C'

when 13 then 'ISO/IEC 13818-6 tipo D'

when 14 then 'Datos auxiliares ITU-T Rec. H.222.0 | ISO/IEC 13818-

1'

when 15 then 'Audio con sintaxis de transporte ADTS ISO/IEC 13818-

7'

when 16 then 'Visual ISO/IEC 14496-2'

when 17 then 'Audio con sintaxis de transporte LATM definida en

ISO/IEC 14496-3 / AMD 1'

when 18 then 'Secuencia de paquetes SL ISO/IEC 14496-1 o

secuencias FlexMux transportadas en paquetes PES'

when 19 then 'Secuencia de paquetes SL ISO/IEC 14496-1 o

secuencias FlexMux transportadas secciones ISO/IEC 14496_'

when 20 then 'Protocolo de descarga sincronizada ISO/IEC 13818-6'

end as stream_type,

d.description

from pmt c

left OUTER join bealltables d

on c.descriptor_tag_hex=d.value

where programnumber=? order by Pointer) as a");

mysqli_stmt_bind_param($stmtprograms, 'ii', $programid, $programid);

$resultprograms = mysqli_stmt_execute($stmtprograms);

mysqli_stmt_bind_result($stmtprograms, $programnumber,

$descriptor_tag_hex, $pointer, $pcr_pid, $stream_type, $description);

echo '<div class="cardprograms" >';

Page 122: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

122

echo '<table align="center" border="0" style="letter-spacing: 1px;">';

echo '<thead>'

. '<tr>

<th>Descriptor tag</th>

<th> Description </th>

<th> Pointer </th>

<th>PCR_PID</th>

<th>Stream type </th>

</td>

</thead>';

while(mysqli_stmt_fetch($stmtprograms)){

echo '<tr>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">' . $descriptor_tag_hex . '</td>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">' . $description . '</td>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">' . $pointer . '</td>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">' . $pcr_pid . '</td>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">' . $stream_type . '</td>';

echo '</tr>';

}

if(!$resultprograms){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) . ") "

;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmtprograms);

echo '</table></div>';

mysqli_close($id);

?>

</body>

</html>

Page 123: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

123

5. Panel-control.php

<?php

session_start();

if(isset($_SESSION['loggedin']) && $_SESSION['loggedin']==true){

}else{

echo "Inicia sesión para acceder a este contenido. <br>";

echo "<br><a href='index.php'>Login</a>";

header('Location: http://localhost/proyecto/index.php');

exit;

}

$now = time();

if($now > $_SESSION['expire']){

session_destroy();

header('Location: http://localhost/proyecto/index.php');

echo "Tu sesión ha expirado,"

. "<a href='index.php'> Inicia Sesión </a>";

exit;

}

?>

<!DOCTYPE html>

<html lang="es">

<head>

<title>Página de administración de Trasport Stream</title>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-

scale=1">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.min.css">

<link href="style.css" rel="stylesheet" type="text/css"/>

<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/yui_combo.php?rollup/3.17.2/yui-moodlesimple-min.css" />

<script id="firstthemesheet" type="text/css"></script>

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/styles.php/boost/1578900641_1578900773/all" />

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script src="semantic/dist/semantic.min.js"></script>

<style type="text/css">

a:link{

text-decoration: none;

}

</style>

</head>

<body>

<div>

<header id="page-header" class="row">

<div class="col-12 pt-3 pb-3">

<div class="cardheader">

<div class="card-body">

<div class="d-flex">

<div class="mr-auto">

<div class="page-content-header">

<div>

<form action="index.php"

method="get">

<div>

<div>

Page 124: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

124

<button type="submit"

class="return" ><i class="material-icons">home</i></button>

</div>

</div>

</form>

<form action="logout.php"

method="get">

<div>

<div>

<button type="submit"

class="logout" ><i class="material-icons">cancel</i></button>

</div>

</div>

</form>

</div>

<div class="page-header-headings">

<h1> Página de administración de

Transport Stream </h1>

</div>

</div>

</div>

</div>

<div class="d-flex flex-wrap">

<div id="page-navbar">

<nav role="navigation" aria-label="Barra

de navegación">

<ol class="breadcrumb">

<li class="breadcrumb-item">

<a href="index.php"> Página

Principal </a>

</li>

<li class="breadcrumb-item">

<a> Página de administración

de Transport Stream </a>

</li>

</ol>

</nav>

</div>

</div>

</div>

</div>

</div>

</header>

</div>

<?php

include './config.php';

ini_set('upload_max_filesize', '500M');

ini_set('post_max_size', '500M');

ini_set('max_input_time', 80000);

ini_set('max_execution_time', 80000);

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

if(!$id){

die("Error: No se pudo conectar");

}

if(!mysqli_select_db($id,Config::$database)){

die("Error: No existe la base de datos.");

}

$query="select * from transportstream";

Page 125: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

125

$result = mysqli_query($id, $query);

if(!$result){

die("Error: no se pudo realizar la consulta.");

}

echo '<div class="container2" style="margin:2rem; padding: 2rem;">';

echo '<form action="select.php" method="get">'

. '<div class="card3" align="center">';

echo '<h2 align="center" style="padding:2rem; margin:2rem;">Seleccionar

Transport Stream a modificar</h2>';

echo '<table align="center" border="0" style="letter-spacing: 1px;">';

while($row = mysqli_fetch_assoc($result)){

echo '<tr>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">' . $row['Name'] . '</td>';

echo'<td><button type="submit" class="styled2" name="select" value="'

. $row['Id'] . '" style="margin-left: 3rem></td>';

echo '<td style="border: 0px solid rgb(190, 190, 190);padding:

10px;">Seleccionar</td>';

echo '</tr>';

}

mysqli_free_result($result);

echo '</table><br><br></div></form></div>';

mysqli_close($id);

?>

<div class="container2">

<div class="card3" align="center">

<h2 align="center" style="padding:2rem;

margin:2rem;">Insertar un Transport Stream</h2>

<form action="InsertFile.php" method="post"

enctype="multipart/form-data" style="padding: 2rem;margin: 2rem;">

<input type="file" id="file" name="file" >

<button type="submit" class="styledinput"

name="insert" value="insert">Insertar</button>

</form>

</div>

</div>

</body>

</html>

Page 126: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

126

6. Checklogin.php

<html> <head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-

scale=1.0">

<title> TransportStreams</title>

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.css">

<link href="style.css" rel="stylesheet" type="text/css"/>

<script src="https://code.jquery.com/jquery-

3.1.1.min.js"></script>

<script src="semantic/dist/semantic.js"></script>

</head>

<body>

<?php

session_start();

?>

<?php

include './config.php';

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

if(!$id){

die("Error: No se pudo conectar");

}

if(!mysqli_select_db($id,Config::$database)){

die("Error: No existe la base de datos." . mysqli_error($id));

}

$username = $_GET['username'];

$password = $_GET['password'];

$sql = "SELECT * FROM admin WHERE username = '$username'";

$result = mysqli_query($id, $sql);

if(mysqli_num_rows($result)>0){}

$row = mysqli_fetch_array($result);

if($password == $row['password']){

$_SESSION['loggedin']=true;

$_SESSION['username']=$username;

$_SESSION['start']=time();

$_SESSION['expire']= $_SESSION['start'] + (5*60);

echo "Bienvenido! " . $_GET['username'];

echo '<br><br><a href=panel-control.php>Panel de control </a>';

header('Location: http://localhost/proyecto/panel-control.php');

//redirecciona a la páfina del usuario

}else{

echo "Username o Password incorrectos.";

echo "<br><a href='index.php'> Volver a intentarlo </a>";

}

mysqli_close($id);

?>

</body>

</html>

Page 127: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

127

7. Logout.php

<?php

session_start();

unset ($SESSION['username']);

session_destroy();

header('Location: http://localhost/proyecto/index.php');

?>

Page 128: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

128

8. Select.php

<html>

<head>

<meta charset="utf-8">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<meta name="viewport" content="width=device-width, initial-

scale=1">

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.min.css">

<link href="style.css" rel="stylesheet" type="text/css"/>

<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/yui_combo.php?rollup/3.17.2/yui-moodlesimple-min.css" />

<script id="firstthemesheet" type="text/css"></script>

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/styles.php/boost/1578900641_1578900773/all" />

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script src="semantic/dist/semantic.min.js"></script>

<style type="text/css">

a:link{

text-decoration: none;

}

</style>

<title>Administración de Transport Stream</title>

</head>

<body>

<?php

session_start();

if(isset($_SESSION['loggedin']) && $_SESSION['loggedin']==true){

}else{

echo "Inicia sesión para acceder a este contenido. <br>";

echo "<br><a href='index.php'>Login</a>";

header('Location: http://localhost/proyecto/index.php');

exit;

}

$now = time();

if($now > $_SESSION['expire']){

session_destroy();

header('Location: http://localhost/proyecto/index.php');

echo "Tu sesión ha expirado,"

. "<a href='index.php'> Inicia Sesión </a>";

exit;

}

?>

<?php

include './config.php';

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

if(!$id){

die("Error: No se pudo conectar");

}

if(!mysqli_select_db($id,Config::$database)){

die("Error: No existe la base de datos.");

}

$idts = $_GET['select'];

?>

Page 129: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

129

<div>

<header id="page-header" class="row">

<div class="col-12 pt-3 pb-3">

<div class="cardheader">

<div class="card-body">

<div class="d-flex">

<div class="mr-auto">

<div class="page-content-header">

<div>

<form action="index.php" method="get">

<div>

<div>

<button type="submit"

class="return"><i class="material-icons">home</i></button>

</div>

</div>

</form>

<form action="logout.php"

method="get">

<div>

<div>

<button type="submit"

class="logout" ><i class="material-icons">cancel</i></button>

</div>

</div>

</form>

</div>

<div class="page-header-headings">

<h1> Administración de Transport

Stream </h1>

</div>

</div>

</div>

</div>

<div class="d-flex flex-wrap">

<div id="page-navbar">

<nav role="navigation" aria-label="Barra de

navegación">

<ol class="breadcrumb">

<li class="breadcrumb-item">

<a href="index.php"> Página

Principal </a>

</li>

<li class="breadcrumb-item">

<a href="panel-control.php">

Página de administración de Transport Stream </a>

</li>

<li class="breadcrumb-item">

<a> Administración Transport

Stream </a>

</li>

</ol>

</nav>

</div>

</div>

</div>

</div>

</div>

</header>

</div>

Page 130: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

130

<?php

$stmt = mysqli_prepare($id,"select * from transportstream where Id = ?");

mysqli_stmt_bind_param($stmt,'i',$idts);

$resultstmt = mysqli_stmt_execute($stmt);

mysqli_stmt_bind_result($stmt, $transportstreamname, $transportstreamid,

$description);

mysqli_stmt_fetch($stmt);

if(!$resultstmt){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) . ") " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmt);

echo '<div class="container2 " style="margin:2rem; padding: 2rem;">'

. '<div class="card3" align="center">'

. '<h2 align="center" style="padding:2rem;

margin:2rem;">Administración del Transport Stream ' . $transportstreamname

. '</h2>';

$stmtmodify = mysqli_prepare($id,"select description from transportstream

where Id = ?");

mysqli_stmt_bind_param($stmtmodify, 'i', $transportstreamid);

$resultmodify = mysqli_stmt_execute($stmtmodify);

mysqli_stmt_bind_result($stmtmodify, $descriptionoriginal);

mysqli_stmt_fetch($stmtmodify);

if(!$resultmodify){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) . ") " ;

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmtmodify);

?>

<div>

<div class="flexdescription " style="justify-content:flex-

start;align-items: center;">

<label for="description" style="margin-right: 0.5rem;"

>Descripción:</label>

<?php echo '<form action="deletemodify.php" method="get">'

.'<input type="text" style="border-radius: 5px;"

id="description" name="description" value="'.$descriptionoriginal.'">';?>

</div>

</div>

<?php echo '</div>';?>

<br>

<div class ="flexdescription" style="justify-content: center;" >

<div>

<?php echo '<form action="deletemodify.php" method="get">'

. '<button type="submit" class="styledinput" style="background-

color:green;" name="modify" value="' . $transportstreamid . '">Guardar'

. '</button>'

. '</form>';?>

</div>

<div>

<?php echo'<button type="submit" class="styledinput" name="delete"

value="' . $transportstreamid . '">'

. '<a

href="deletemodify.php?delete='.$transportstreamid.'" style="color:

white">Eliminar</a>'

. '</button>';?>

</div>

Page 131: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

131

<div>

<button type="submit" class="styledinput" style="background-color:

red;"><a href="panel-control.php" style="color:

white">Cancelar</a></button>

</div>

</div>

<?php

mysqli_close($id);

?>

</body>

</html>

Page 132: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

132

9. Deletemodify.php

<html>

<head>

<meta charset="utf-8">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<meta name="viewport" content="width=device-width, initial-

scale=1">

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.min.css">

<link href="style.css" rel="stylesheet" type="text/css"/>

<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/yui_combo.php?rollup/3.17.2/yui-moodlesimple-min.css" />

<script id="firstthemesheet" type="text/css"></script>

<link rel="stylesheet" type="text/css" href="https://aula.iesoretania.es/theme/styles.php/boost/1578900641_1578900773/all" />

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script src="semantic/dist/semantic.min.js"></script>

<style type="text/css">

a:link{

text-decoration: none;

}

</style>

<title> Administración de Transport Stream</title>

</head>

<body>

<?php

session_start();

if(isset($_SESSION['loggedin']) && $_SESSION['loggedin']==true){

}else{

echo "Inicia sesión para acceder a este contenido. <br>";

echo "<br><a href='index.php'>Login</a>";

header('Location: http://localhost/proyecto/index.php');

exit;

}

$now = time();

if($now > $_SESSION['expire']){

session_destroy();

header('Location: http://localhost/proyecto/index.php');

echo "Tu sesión ha expirado,"

. "<a href='index.php'> Inicia Sesión </a>";

exit;

}

?>

<?php

include './config.php';

$id = mysqli_connect(Config::$servername, Config::$username,

Config::$password);

if(!$id){

die("Error: No se pudo conectar");

}

if(!mysqli_select_db($id,Config::$database)){

die("Error: No existe la base de datos.");

}

if(isset($_GET['delete'])){

$iddelete = $_GET['delete'];

?>

<div>

<header id="page-header" class="row">

Page 133: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

133

<div class="col-12 pt-3 pb-3">

<div class="cardheader">

<div class="card-body">

<div class="d-flex">

<div class="mr-auto">

<div class="page-content-header">

<div class="page-header-headings">

<h1> Administración de Transport

Stream </h1>

</div>

<form action="index.php" method="get">

<div>

<div>

<button type="submit"

class="return"><i class="material-icons">home</i></button>

</div>

</div>

</form>

</div>

</div>

</div>

<div class="d-flex flex-wrap">

<div id="page-navbar">

<nav role="navigation" aria-label="Barra de

navegación">

<ol class="breadcrumb">

<li class="breadcrumb-item">

<a href="index.php"> Página

Principal </a>

</li>

<li class="breadcrumb-item">

<a href="panel-control.php">

Página de administración de Transport Stream </a>

</li>

<li class="breadcrumb-item">

<?php echo '<a

href="select.php?select='. $iddelete.' "> Administración Transport Stream

</a>'; ?>

</li>

<li class="breadcrumb-item">

<a> Eliminar Transport Stream

</a>

</li>

</ol>

</nav>

</div>

</div>

</div>

</div>

</div>

</header>

</div>

<?php

$stmtdelete = mysqli_prepare($id,"DELETE FROM transportstream where Id

= ?");

mysqli_stmt_bind_param($stmtdelete, 'i', $iddelete);

$resultdelete = mysqli_stmt_execute($stmtdelete);

if(!$resultdelete){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) . ") "

;

Page 134: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

134

die("Error: no se pudo realizar la consulta.");

}

mysqli_stmt_free_result($stmtdelete);

echo '<div>'

. '<p> Se han eliminado correctamente los datos del registro con id:

"'. $iddelete . '"</p>'

. '</div>';

}else if(isset($_GET['modify'])){

$idmodify = $_GET['modify'];

?>

<div>

<header id="page-header" class="row">

<div class="col-12 pt-3 pb-3">

<div class="cardheader">

<div class="card-body">

<div class="d-flex">

<div class="mr-auto">

<div class="page-content-header">

<div class="page-header-headings">

<h1> Administración de Transport

Stream </h1>

</div>

<form action="index.php" method="get">

<div>

<div>

<button type="submit"

class="return"><i class="material-icons">home</i></button>

</div>

</div>

</form>

</div>

</div>

</div>

<div class="d-flex flex-wrap">

<div id="page-navbar">

<nav role="navigation" aria-label="Barra de

navegación">

<ol class="breadcrumb">

<li class="breadcrumb-item">

<a href="index.php"> Página

Principal </a>

</li>

<li class="breadcrumb-item">

<a href="panel-control.php">

Página de administración de Transport Stream </a>

</li>

<li class="breadcrumb-item">

<?php echo '<a

href="select.php?select='. $idmodify.' "> Administración Transport Stream

</a>'; ?>

</li>

<li class="breadcrumb-item">

<a> Modificar Transport Stream

</a>

</li>

</ol>

</nav>

</div>

</div>

</div>

Page 135: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

135

</div>

</div>

</header>

</div>

<?php

$description = $_GET['description'];

$stmtmodify = mysqli_prepare($id,"update transportstream set

description = ? where Id = ?");

mysqli_stmt_bind_param($stmtmodify, 'si', $description,$idmodify);

$resultmodify = mysqli_stmt_execute($stmtmodify);

if(!$resultmodify){

echo "Fallo al ejecutar la consulta: (" . mysqli_error($id) . ") "

;

die("Error: no se pudo realizar la consulta.");

}

echo '<div class="container">'

. '<p> Se han modificado correctamente la descripción del registro con

id: "'. $idmodify . '"</p>'

. '</div>';

}

?>

</body>

</html>

Page 136: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

136

10. Pid.php

<?php

class Pid {

const PAT = 0x0000;

const CAT = 0x0001;

const TSDT = 0x0002;

const NIT_ST = 0x0010;

const SDT_BAT_ST = 0x0011;

const EIT_ST_CIT = 0x0012;

const RST_ST = 0x0013;

const TDT_TOT_ST = 0x0014;

const NETWORK_SYNC = 0x0015;

const RNT = 0x0016;

const INBAND_SIG = 0x001c;

const MEASUREMENT = 0x001d;

const DIT = 0x001e;

const SIT = 0x001f;

const NULL_PACKET = 0x1fff;

public function __construct(int $value) {

$this->value = $value;

}

}

?>

Page 137: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

137

11. InsertFile.php

<html>

<head>

<meta charset="utf-8">

<link rel="icon" href="ujalogo.jpg" type="image/x-icon"/>

<title> Service Description Table</title>

<link rel="stylesheet" type="text/css"

href="semantic/dist/semantic.min.css">

<link rel="stylesheet"

href="https://fonts.googleapis.com/icon?family=Material+Icons">

<script

src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<script src="semantic/dist/semantic.min.js"></script>

</head>

<body>

<?php

ini_set('upload_max_filesize', '500M');

ini_set('post_max_size', '500M');

ini_set('max_input_time', 80000);

ini_set('max_execution_time', 80000);

var_dump($_POST);

var_dump($_FILES);

if(isset($_POST["insert"])){

$file = $_FILES['file'];

$dir_subida = './media/';

// get details of the uploaded file

$fileTmpPath = $_FILES['file']['tmp_name'];

$fileName = $_FILES['file']['name'];

$fileSize = $_FILES['file']['size'];

$fileType = $_FILES['file']['type'];

$fileNameCmps = explode(".", $fileName);

$fileExtension = strtolower(end($fileNameCmps));

echo "Nombre del archivo: ";

print_r($fileName);

echo "<br> Nombre de fichero temporal: ";

print_r($fileTmpPath);

echo "<br> Tamaño del archivo: ";

print_r($fileSize);

echo "<br> Tipo de archivo: ";

print_r($fileType);

echo "<br> <br>";

$newFileName = $fileName;

$allowedfileExtensions = array('ts');

if (in_array($fileExtension, $allowedfileExtensions)) {

$dest_path = $dir_subida . $newFileName;

if (isset($_POST['button'])){

$tsname = $fileName;

echo $tsname . '<br>';

}

if(move_uploaded_file($fileTmpPath, $dest_path)){

$message ='File is successfully uploaded.';

header("Location: transportstreamparser.php?file=$newFileName

");

}else{

$message = 'There was some error moving the file to upload

directory. Please make sure the upload directory is writable by web

server.';

Page 138: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

138

echo $message . '<br>';

}

}else{

echo "Extensión incorrecta. ";

echo '<br><br><a href=panel-control.php>Panel de control </a>';

header('Location: http://localhost/proyecto/panel-control.php');

}

}

?>

<div style="margin:2rem; padding: 2rem;">

<form action="index.php" method="get">

<div>

<div>

<button type="submit" class="return"><i

class="material-icons">home</i></button>

</div>

</div>

</form>

</div>

</body>

</html>

Page 139: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

139

12. Config.php

<?php

class Config {

static $servername = "localhost";

static $username = "agumarmi";

static $database = "dvbmpeg";

static $password = "";

public function __construct(int $value) {

$this->value = $value;

}

}

?>

Page 140: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

140

ANEXO B. ACCESO A LA BASE DE DATOS

Para poder visualizar el contenido que se ha almacenado en la base de datos creada

una vez se ha analizado el Transport Stream se debe seguir las siguientes pautas:

• Tener instalado WAMPServer e iniciar los servicios.

Figura B.0.1. Estado de WAMPServer

• Acceder a phpMyAdmin, bien seleccionando ‘phpMyAdmin’ en la figura B.1.

o introduciendo en la barra de navegación del navegador la siguiente ruta:

http://localhost/phpmyadmin/

Figura B.0.2. Página de acceso a phpMyAdmin

Page 141: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

141

• Se introducen las credenciales por defecto para entrar como:

o Administrador:

▪ Usuario: root

▪ Contraseña:’’

o Usuario con acceso de lectura, eliminación e inserción:

▪ Usuario: admin

▪ Contraseña: admin

o Usuario para la conexión con PHP:

▪ Usuario: agumarmi

▪ Contraseña: ‘’

• Una vez se accede a la Página Principal de phpMyAdmin, se selecciona la

base de datos dvbmpeg y podremos acceder al contenido del Transport

Stream analizado.

Figura B.0.3. Vista general de la base de datos dvbmpeg

Page 142: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

142

ANEXO C. TABLA DE ISO/IEC 8859-1. ALFABETO LATINO N.1

0 1 2 3 4 5 6 7 8 9 A B C D E F

0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT NL VT NP CR SO SI

1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

2 SP ! " # $ % & ’ ( ) * + , - . /

3 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

4 @ A B C D E F G H I J K L M N O

5 P Q R S T U V W X Y Z [ / ] ^ _

6 ˋ a b c d e f g h i j k l m n o

7 p q r s t u v w x y z { | } ~ DEL

8

9

A NBS ¡ ¢ £ ¤ ¥ - § ¨ © » Ç Â - ® ‾

B ° • ¸ ´ ¶ • ¸ ¶ ° È ° ¿

C À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï

D Ã Ñ Ò Ó Ô Õ Ö ° Ø Ù Ú Û Ü Å Ê ß

E à á â ã ä å æ ç è é ê ë ì í î ï

F ñ ò ó ô õ ö Ö ø ù ú û ü Æ Ê ÿ

Page 143: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

143

BIBLIOGRAFÍA

[1] Wikipedia, «Televisión Digital Terrestre en España,» [En línea]. Available:

https://es.wikipedia.org/wiki/Televisi%C3%B3n_digital_terrestre_en_Espa%C3%B1a.

[2] Wikipedia, «Historia de la Televisión,» [En línea]. Available:

https://es.wikipedia.org/wiki/Historia_de_la_televisi%C3%B3n.

[3] «¿Qué es un iconoscopio?,» [En línea]. Available:

https://soloesciencia.com/2017/12/19/que-es-un-iconoscopio/.

[4] «Entrelazado / Progresivo, Vídeo,» [En línea]. Available:

http://www.zonadvd.com/modules.php?name=Encyclopedia&op=content&tid=36 .

[5] M. d. Educación, «MEDIA- Televisión,» [En línea]. Available:

http://recursos.cnice.mec.es/media/television/bloque2/pag2.html#.

[6] ISO/IEC, «ISO/IEC 13818-1. Information technology - Generic coding of moving

pictures and associated audio information: Systems,» ISO/IEC 2000, 2000.

[7] ETSI, «ETSI EN 300 468 v1.15.1. Digital Video Briadcasting (DVB):

Specification for Service Information (SI) un DVB Systems,» ETSI, 2016.

[8] ITU, «H.262 : Information technology - Generic coding of moving pictures and

associated audio information: Video,» ITU, 2012.

[9] ISO/IEC, «ISO/IEC 13818-2: Information technology — Generic coding of

moving pictures and associated audio information — Part 2: Video,» 2013.

[10] ISO/IEC, «ISO/IEC 11172-2: Information technology — Coding of moving

pictures and associated audio for digital storage media at up to about 1,5 Mbit/s — Part

2: Video,» 1993.

[11] U.-E. ISO/IEC, «Tecnología de la información. Codificación genérica de

imágenes animadas y de la información sonora asociada. Parte 3: Audio. (ISO/IEC

13818-3:1995),» 1996.

Page 144: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

144

[12] ISO/IEC, «ISO/IEC: 11172-3:1993: Information technology — Coding of moving

pictures and associated audio for digital storage media at up to about 1,5 Mbit/s — Part

3: Audio».

[13] ITU, «H.222.0 : Tecnología de la información - Codificación genérica de

imágenes en movimiento e información de audio asociada: Sistemas,» 2018.

[14] ISO/IEC, «ISO/IEC 13818-6: Information technology- Generic coding of moving

pictures and associated audio information. Extensions for DSM-CC,» ISO/IEC, 1998.

[15] I. JTC, «ISO/IEC JTC 1/SC 29: Coding of audio, picture, multimedia and

hypermedia information,» 1991.

[16] ISO, «ISO 639-2:1998: Codes for the representation of names of languages —

Part 2: Alpha-3 code».

[17] ISO/IEC, «ISO/IEC 8859-1: Information technology — 8-bit single-byte coded

graphic character sets — Part 1: Latin alphabet No. 1,» 1998.

[18] ISO/IEC, «ISO/IEC 14496-2: Information technology - Coding of audio-visual

objects -Part 2: Visual,» 2004.

[19] ISO/IEC, «ISO/IEC 14496-3: Information technology — Coding of audio-visual

objects — Part 3: Audio,» 2019.

[20] ISO/IEC, «ISO/IEC 14496-1: Information technology — Coding of audio-visual

objects — Part 1: Systems,» 2010.

[21] ISO/IEC, «ISO/IEC 8859-1: Information technology — 8-bit single-byte coded

graphic character sets — Part 1: Latin alphabet No. 1,» 1998.

[22] ISO/IEC, «ISO/IEC 8859-9: Information technology — 8-bit single-byte coded

graphic character sets — Part 9: Latin alphabet No. 5,» 1999.

[23] U. d. Jaén, «Identidad Corporativa,» [En línea]. Available:

https://www.ujaen.es/gobierno/viccom/proyeccion-institucional/identidad-

corporativa/identidad-corporativa.

Page 145: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Escu

ela

Po

lité

cn

ica

Su

pe

rio

r d

e L

ina

res

MANUAL DE INSTALACIÓN PARA

EL USO DE HERRAMIENTA DE

ANÁLISIS DE UN TRANSPORT

STREAM DVB-T

ESCUELA POLITÉCNICA

SUPERIOR DE LINARES

HERRAMIENTA DE ANÁLISIS DE

UN TRANSPORT STREAM DVB-T

Alumno: Mireya Aguilera Martos

Febrero, 2020

UNIVERSIDAD DE JAÉN

Escuela Politécnica Superior de Linares

Trabajo Fin de Grado

Page 146: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de instalación para el uso de Manual de instalación para el uso de

Herramienta de Análisis de un transport Stream DVB-T | Mireya Aguilera Martos

2

Índice de contenido

1. PASOS ........................................................................................................ 3

1.1. Iniciar la aplicación WampServer ............................................................. 3

1.2. Añadir carpeta de proyecto a WampServer .............................................. 3

1.3. Acceso a la aplicación .............................................................................. 3

Page 147: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de instalación para el uso de Manual de instalación para el uso de

Herramienta de Análisis de un transport Stream DVB-T | Mireya Aguilera Martos

3

1. PASOS

Para poder hacer uso de la Herramienta de Análisis de Transport Stream DVB-T es

necesario seguir una serie de pautas:

1.1. Iniciar la aplicación WampServer

Basta con ejecutar la aplicación instalada en el equipo e iniciar los servicios.

En el caso de que no estuviera instalada la aplicación, se deberá descargar e

instalar de la página web http://www.wampserver.com/en/ en el apartado de descargas,

https://sourceforge.net/projects/wampserver/files/WampServer%203/WampServer%203.0

.0/wampserver3.2.0_x64.exe/download

1.2. Añadir carpeta de proyecto a WampServer

Para poder acceder a la ejecución de la aplicación, se deberá descomprimir el

contenido del TransportStreamAnalyser.zip en la carpeta donde se haya instalado

WampServer y en la subcarpeta www.

1.3. Acceso a la aplicación

Una vez se haya descomprimido el archivo, accediendo a la página web

http://localhost/proyecto/index.php, será posible ejecutar la Herramienta de Análisis de

TransportStream.

Page 148: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Escu

ela

Po

lité

cn

ica

Su

pe

rio

r d

e L

ina

res

MANUAL DE USUARIO PARA EL

USO DE HERRAMIENTA DE

ANÁLISIS DE UN TRANSPORT

STREAM DVB-T

ESCUELA POLITÉCNICA

SUPERIOR DE LINARES

HERRAMIENTA DE ANÁLISIS DE

UN TRANSPORT STREAM DVB-T

Alumno: Mireya Aguilera Martos

Febrero, 2020

UNIVERSIDAD DE JAÉN

Escuela Politécnica Superior de Linares

Trabajo Fin de Grado

Page 149: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de usuario para el uso de Manual de usuario para el uso de Herramienta

de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

2

Índice de contenido

1. Página principal ......................................................................................... 3

2. Lista de programas .................................................................................... 4

3. Lista de componentes ............................................................................... 5

4. Página de administración ......................................................................... 6

5. Administración de Transport Stream ....................................................... 7

Page 150: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de usuario para el uso de Manual de usuario para el uso de Herramienta

de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

3

1. Página principal

La página principal, http://localhost/proyecto/index.php, estará compuesta por una

barra de navegación superior que indicará en todo momento la situación actual y el

recorrido seguido, pudiendo volver hacia atrás en cualquier momento manteniendo los

parámetros de consulta.

Además, también se visualiza una tarjeta con los nombres de los Transport Stream

que se encuentran analizados en la base de datos y de cuyo contenido se puede disponer.

Al final de la página, se visualiza una tarjeta que dará acceso a la página de

administración, donde el usuario podrá ser capaz de insertar un nuevo fichero a analizar,

modificar un parámetro del Transport Stream o eliminar.

Figura 1.1. Página principal

Page 151: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de usuario para el uso de Manual de usuario para el uso de Herramienta

de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

4

2. Lista de programas

Pulsando sobre cualquier Transport Stream, se accede a la lista de programas que

se encuentran en él.

En esta ventana, http://localhost/proyecto/showSDT.php?Id=1, se le introduce

como parámetro de entrada el identificador único del Transport Stream que existe en la

base de datos. Y se mostrará una tarjeta con un identificador de programa, obtenido de la

PAT, y el nombre del servicio, obtenido de la SDT.

Figura 2.1. Lista de programas de un Transport Stream

Page 152: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de usuario para el uso de Manual de usuario para el uso de Herramienta

de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

5

3. Lista de componentes

Accediendo a un programa del Transport Stream analizado,

http://localhost/proyecto/showProgram.php?ProgramId=410 , se obtendrá una lista con los

diferentes descriptores que se han capturado durante el análisis.

Figura 3.1. Lista de componentes de un programa

Page 153: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de usuario para el uso de Manual de usuario para el uso de Herramienta

de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

6

4. Página de administración

Introduciendo las credenciales correctas en la página principal, se accede a la

página de administración, http://localhost/proyecto/panel-control.php, donde aparecen dos

tarjetas, una de ellas con el listado de Transport Streams analizados, y una tarjeta para

poder insertar un fichero de formato .ts que, una vez comprobado que el formato es el

correcto, redirigirá a la página de la herramienta de análisis del Transport Stream,

http://localhost/proyecto/transportstreamparser.php?file=mireya5.ts.

Figura 4.1. Página de administración

Page 154: tauja.ujaen.estauja.ujaen.es/bitstream/10953.1/11283/1/TFG... · Herramienta de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos 3 Índice de contenido ÍNDICE DE ILUSTRACIONES

Manual de usuario para el uso de Manual de usuario para el uso de Herramienta

de Análisis de Transport Stream DVB-T | Mireya Aguilera Martos

7

5. Administración de Transport Stream

Una vez se ha seleccionado el Transport Stream que se desea modificar, nos

aparece en la ventana, http://localhost/proyecto/select.php?select=1, una tarjeta con el

parámetro que tiene actualmente el Transport Stream habilitado para modificar, en este

caso, la descripción.

Como previamente se ha dicho, en esta ventana se puede guardar una nueva

descripción en la base de datos, eliminar el Transport Stream o cancelar y volver a la página

de administración.

Figura 5.1. Administración de Transport Stream