digitale kabeltelevisie

DVB

MPEG is een standaard om één programma (één of meer kanalen video en één of meer kanalen geluid die bij elkaar horen) door te sturen. Voor digitale TV willen we meer kanalen tegelijk doorgeven, en daar ook nog extra informatie als EPG (electronische programma gids) aan toe voegen. Bovenop de MPEG2 standaard zijn daarom DVB standaarden gedefinieerd door de ETSI. Na registratie kan je ze hier ook downloaden. Er zijn een aantal smaken de belangrijkste zijn , DVB-C (cable), DVB-S (satellite) en DVB-T (terrestrial). Daar zitten weer allerlei standaarden onder, die vaak wel hetzelfde zijn voor zowel kabel als satelliet en ether. Daarom lijken soms decoders voor kabel, satelliet en ether zoveel op elkaar, hoewel ze niet uitwisselbaar zijn.

Transport Stream

Bij analoge TV krijgt elke zender zijn eigen frequentie, en neemt altijd evenveel ruimte in. Voor digitale TV werkt het anders. De signalen (bits) van diverse zenders worden gecombineerd tot een transport stream. In principe zou een heel grote transportstream daarvoor gebruikt kunnen worden, maar dat werkt niet handig. Bij BVD-C zijn er transportstreams van 38.1 Mbit/sec. Op één zo'n stream is ruimte voor ongeveer 6 tot 8 TV zenders.

Plaatje www.mhp-interactive.org/


Een voorbeeld van het samenstellen van één multiplex (transport stream) uit verschillende zenders.

Een MPEG-2 Encoder maakt van een analoog signaal een MPEG-2 digitaal signaal. Een multiplexer combineert al die TV-signalen met toegangs informatie (CA= Conditional Access). Omdat de bitrate van de signalen kan varieren is er soms niet genoeg ruimte in de stream. De multiplexer moet dan bepalen wie er voor gaat. De andere zenders krijgen dan wat minder data, en daardoor een iets lagere kwaliteit.

Bij kabel is het vaak zo dat signalen al digitaal in MPEG aangeleverd worden (via glasvezel of satelliet). Die hoeven dan niet opnieuw gecodeerd te worden.

Wat zit er in een Transportstream?

Deze analyse heb ik gemaakt van transportstream 27 (op 271.00 MHz) van @Home, zoals die werd doorgegeven op zaterdagmiddag 22 april 2006. Deze stream bevat de zenders ZDF (met gewoon, en Dolby Digitaal geluid), BBC1, 2, 3 en 4 (3 en 4 zijn 'off-air' in de middag, daar is alleen een stilstaand beeld te zien) en BBC Prime (met meertalige ondertiteling). Lijkt me een interessante stream om eens uit te pluizen. Met hulp van vooral standaard ETSI EN 300 468, Digital Video Broadcasting (DVB); Specification for Service Information (SI) in DVB systems, wat gericht zoeken op internet, en een klein beetje raden denk ik een redelijk overzicht te hebben van hoe een DVB stream in elkaar steekt. @Home gebruikt een aantal aanvullingen/extensies die niet in de standaard staan, maar we komen een heel eind. Opmerkingen, aanvullingen en verbeteringen zijn natuurlijk welkom.

Modulatie QAM

Een digitaal signaal kan niet direct via een draadje verstuurd worden, daarvoor moet het eerst gemoduleerd worden. De bits worden vertaald in een combinatie van sinus- en cosinus-golven. Door daar verschillende combinaties in amplitude mee te maken kunnen bits verstuurd worden. Deze techniek heet Quadrature amplitude modulation (QAM). Het aantal combinaties dat met een sinus en cosinus gemaakt kunnen worden bepaalt hoeveel waardes per golf (symbool) verstuurd kunnen worden. Bij QAM64 kunnen 64 waardes (6 bits) per symbol verstuurd worden. Bij @Home wordt een symbolrate van 6875 kSym/sec gebruikt. Met 6 bits per symbol levert dat 41.250.000 bits/seconde op. Om storing in de data te kunnen corrigeren wordt er een foutcorrectie toegepast. Daarvoor wordt Reed-Solomon (204/188) gebruikt. Heel kort gezegd komt het er op neer dat om 188 'echte' databytes te versturen 204 bytes verstuurd moeten worden. Dan kunnen maximaal 8 foute bytes van de 204 hersteld worden. De effectieve bitrate van een transport stream is dus iets kleiner, 41.250.000 * 188 /204 = 38.014.705 bits/sec, oftewel 38 Mbit/sec.

DVB

DVB is een uitbreiding van MPEG2. Behalve een heel slimme compressie techniek bevat MPEG2 ook een standaard om audio, video en andere streams te combineren in een grote stream.

Elke Elementary Stream verzorgt een type date, bijv het geluid van een zender, of het beeld, of de teletext. Ook zijn er een aantal ES voor besturing, service-inforatie (SI) en de versleuteling (Conditional Access, CA). Om deze streams te kunnen combineren in een grote transport stream worden ze eerst in stukjes gehakt (packetized), en het resultaat zijn packetized elementary stream's (PES).

Elke elementary stream binnen een transport-stream heeft een unieke identiefier (nummer), en deze heet PID (packet identifier)

Sommige streams hebben een vast PID (de CAT heeft altijd id 0x0001), andere moeten opgezocht worden via een of meer uitgezonden tabellen. Voor deze PID's worden vaak hexadecimale nummers gebruikt (deze beginnen met 0x).

DVB SI structuur
Dit figuur uit ETSI EN 300 468, Digital Video Broadcasting (DVB); Specification for Service Information (SI) in DVB systems geeft aan welke soorten informatie in MPEG gedefinieerd zijn, en welke tabellen uit de DVB specificatie komen.

Software

Met het programma TransEditMMC dat bij DVBViewer te downloaden is kan je real-time met een DVB-C kaart in een transportstream kijken welke Elementary Streams er in zitten. TransEditMMC laat de streams zien alsof er een hierarchie bestaat, dat streams binnen andere streams zitten. Zo lijkt het alsof PMT's binnen de PAT zitten. Dat klopt niet, de PAT verwijst alleen naar de PMT's.

Helaas laat TransEditMMC niet alle beschikbare informatie zien, daarom heb ik ook gebruik gemaakt van TS Reader Lite om een opgenomen transport-stream te analyseren. Waar nodig worden de plaatjes van TransEditMMC aangevuld met informatie uit TS Reader.

En wie precies elke bit wil bestuderen die in een opgenomen stream zit (en cygwin ge-installeerd heeft) kan daarvoor dvbsnoop gebruiken.

Service Informatie

Hieronder een overzicht van de verschillende soorten SI (Service Informatie) die in een DVB-C transport stream zitten. Wat niet in de SI staat zijn zaken zoals gebruikte resolutie van het beeld, de samplerate van het geluid, etc. Dat zijn eigenschappen van de diverse MPEG-substreams, en staan in de MPEG standaards beschreven.

CAT

De CAT (Conditional access Table) zit altijd op PID 0x0001. Voor elke gebruikte coderingstechniek is er een entry in de CAT. TV Home gebruikt op dit moment alleen Irdeto, dus er is maar een entry. De CA_ID (1540, 0x0604) verwijst naar Irdeto (vastgelegd in ETR 162; Allocation of Service Information (SI) codes for Digital Video Broadcasting (DVB) systems. De range 0x0600 to 0x06FF is gereserveerde voor Irdeto.

De ECMPID 1052 verwijst naar stream 1052 (0x041C) waarin de ECM's (Entitlement Control Message) zitten. Daarin zitten

  • Control Word CW (which is the content encryption key)
  • Content_Id
  • Description of the rights required to access content

Lijkt me duidelijk....

PAT

PATDe Program Association Table is altijd te vinden op PID 0x0000. Deze bevat een TRANSPORT-STREAM-ID (hier 27) en een lijstje met nummers van de 'services' die in deze transport-stream zitten, en koppelt daaraan het PID van de bijbehorende PMT (Program Map Table). Een service is bijv. een radio of TV kanaal. Deze nummers worden gebruikt in de PMT's (Program Map Table), en in de SDT (Service Description Table).

PMT's

Een PMT (Program Map Table) bevat beschrijvende informatie over een televisie of radio-kanaal. Er zijn dus evenveel PMT's in een transport-stream als dat er zenders in zitten. Het PID van een PMT wordt gevonden via de PAT.

ZDF

pmt zdf
De ZDF is meteen een 'moeilijk' voorbeeld, er zit veel extra data in de stream voor Dolby Digital en voor de PDC data.

Het PCRPID (Program Clock Reference) heeft te maken met synchroniseren van de 'sub-streams' zodat geluid en beeld gelijk afgespeeld worden. De waarde hier is 110, en hexadecimaal is dat 0x006E, en dat is de volgende stream;

De stream 0x006E bevat de video volgens ISO 13818-2 (MPEG2). De Stream Identifier en STD Descriptor komen bij andere zenders niet voor, en zijn waarschijnlijk onderdeel van de MPEG standaard.

De volgende stream is 0x0082, en het type daarvan is private data volgens ISO 13818-1. Daarbinnen zitten een aantal descriptors, zoals descriptor 0x56 die aangeeft dat het teletext data is. Descriptor 0x45 geeft VBI (vertical Blanking Interval) data, en dat is de plek waar data zoals teletext, PDC-data e.d. vertuurd worden. De ZDF service heeft vrij veel van dit soort descriptors, dus ik laat de meeste maar weg.


pmt zdf
Dan komt stream 0x0078, en dat is audio volgens ISO/IEC 11172 (Coding of moving pictures and associated audio for digital storage media at up to about 1,5 Mbit/s), oftewel MPEG-1. Ook al is de hele service MPEG-2, voor diverse streams daarbinnen kunnen andere standaards gebruikt worden, en voor geluid is hier voor MPEG-1 gekozen. Dit is het gewone stereo geluid van de ZDF.

in de PMT zit voor het geluid een descriptor 0x0A (ISO 639 language). Deze geeft informatie over het geluid, zodat de decoder o.a. de taal van het geluid kan laten zien. Ook het soort geluid is hier beschreven, en dat staat hier als 'Clean Effects'. Volgens MPEG betekent dat "This field indicates that the referenced program element has no language.". Volgens het 'E-Book' geldt 'The audio_type ‘undefined’ shall be used to designate normal program audio.' .

Stream 0x007D bevat het Dolby Digital geluid. Het type daarvan is private data volgens ISO 13818-1, hetzelfde type als gebruikt wordt voor teletext! Betekent elleen maar dat deze stream niet gedefinieerd is binnen de MPEG-2 standaard, en extra descriptors moeten duidelijkheid geven over de echte inhoud. In dit geval is dit een descriptor 0x6A (AC-3_descriptor). Ook deze stream is voorzien van een ISO 639 language descriptor, en daarin staat 'dd'. Nu is 'dd' geen afkorting die voorkomt in de 639 standaard. Bij alle andere duitstalige zenders die met Dolby uitzenden staat als taal bij het Dolby geluid 'ger' of 'deu', dat mag beide volgens ISO 639.

Dan bevat de PMT nog een descriptor met CA information. Het CA_ID 1540 staat weer voor Irdeto, het ECMPID 5006 verwijst naar een stream 0x138E waarin encryptie informatie voor dit kanaal wordt verstuurd.

BBC Prime

pmt bbc prime
De PMT van BBC Prime heeft hier PID 0x05DC. De videostream die daar bij hoort heeft PID 0x0100 (256, gelijk het PCRPID).

De het geluid is in dit geval gecodeerd volgens ISO 13818-3, oftwel de MPEG-2 audio-standaard. Ook hier is het geluid foutief beschreven als 'clean effects'.

pmt bbc prime
De stream 0x0102 is weer private data, in dit geval gebruikt voor teletext en ondertiteling in verschillende talen. Met een teletext descriptor kunnen functies van verschillende pagina's aangegeven worden. Het wordt in het plaatje niet duidelijk weergegeven, maar pagina 100 is de 'initial Teletext page' voor de engelse taal, en pagina 880 is de 'Teletext subtitle page' voor het 'hun' (Hongaars). Hier staan twee extra velden; Magazinenumber (0) en Pagenumber (128). Teletext bestaan niet uit gewone paginanummers, maar is opgedeeld in 8 magazines. Magazine 0 bevat de pagina's 800-899, magazine 1 pagina's 100-199, enzovoort. In elk magazine kunne maximaal 256 pagina's voorkomen, hexadecimaal van 0x00 t/m 0xff. Dat levert paginanummers op als 8fa. Deze kunnen echt bestaan, en soms zie je die wel voorbij komen op TV. Deze kunnen niet allemaal gekozen worden met de gewone cijfertoetsen. Met de afstandsbediening moeten dus eigenlijk hexadecimale nummers ingetikt worden met alleen de cijfers 0 t/m 9. Zie EN 300 706 voor de gore details.

Behalve de hongaarse titles zijn er veel meer, maar die heb ik maar weggelaten.

En tot slot heeft ook BBC Prime een CA_descriptor, met een verwijzing naar stream 5005 (0x138D) voor ECM gegevens.

BBC 1

pmt bbc1
Het principe is nu wel duidelijk, dus zonder al te veel commentaar de PMT informatie voor BBC 1. Het audio-type staat hier terecht op 'undefined'.

De informatie voor BBC 2, 3 en 4 is vergelijkbaar, dus die laat ik hier weg.

SDT

SDTDe SDT (Service Description Table) beschrijft de services in deze transport-stream. Er lijkt wat overlap te zijn met de informatie in de PMT's.

Voor elke service heeft deze tabel de runningstatus (not running, starts in a few seconds (e.g. for video recording), pausing, running), EITScheduleFlag (als deze '1' is is er EPG informatie voor deze service beschikbaar), EITPresentFollowingFlag (als deze '1' is is er nu/straks informatie voor deze service beschikbaar), FreeCAMMode (als deze '1' is zijn onderdelen van de service gecodeerd), en een descriptor met de naam van de service en de provider).

Verder wordt hier het service-type aangegeven, 1 is digital television service (Standaard Definition), 2 is radio, 17 is HD MPEG2, 25 is 'reserved for future use', en wordt gebruikt voor HD MPEG4.

In de meeste streams heeft de SDT alleen een omschrijving van de services in die stream, maar in de stream die gebruikt wordt om de decoder te installeren zitten alle beschikbare services in de SDT.

BAT

BATDe Bouquet Association Table (BAT) 'provides information regarding bouquets.'. Dat zou normaal een verzameling bij elkaar horende zenders zijn (een pluspakket ofzo), maar daarvoor lijkt het hier niet gebruikt te worden. De service-list bevat services 8014, 8013, etc. Dat zijn de services die de software voor de decoders bevatten.

Het bouqet_ID is 13858 (0x3622), en ETR 162 zegt daarvoor; 'Irdeto Bouquet of Download data Services'.

Descriptor 0x5F is een 'private data specifier'. Voor elke uitbreiding/afwijking op de standaard is er een private data specifier die aangeeft wie de aanpassing gedefinieerd heeft. Deze zijn te vinden in ETR 162. De code in descriptor 0x5F is dus gedefinieerd zijn in ETR 162, en inderdaad, 0x00362275 (3547765) staat voor Irdeto.

De link-age types zijn dus user-defined door Irdeto, en dus niet te achterhalen. Het lijkt een verwijzing te zijn naar de stream waar de software voor de decoders te downloaden is, en evt. versie info.

Ze lijken wel veel op elkaar.

EIT

EITDe Event Information Table (EIT) bevat de EPG informatie. Elk programma heet hier een 'event'. Dit plaatje laat het niet duidelijk zien, maar voor alle zenders wordt de EPG info doorgestuurd in elke transport-stream.

Volgens EN 300 468 worden er verschillende table-id's gebruikt voor nu/straks informatie, en voor informatie over andere transport-streams. Dat laten helaas TransEditMMC en TS Reader Lite niet zien.

Voor elke event is er een Short event descriptor (0x4D), waarin in totaal ruimte is voor maximaal 255 tekens. Daarin moeten een languagecode, de naam en de omschrijving gezet worden. Als er een langere omschrijving nodig is worden er ook een of meer extended event descriptors gebruikt.

De content descriptor (0x54) geeft informatie over het type programma.

De parental rating (0x55) geeft aan voor welke leeftijd dit programma geschikt is.

Omdat er vrij veel informatie nodig is om alle EPG data door te geven voor alle zenders, neemt de EPG stream (PID=0x0012) vrij veel ruimte in in een transport-stream; in dit voorbeeld 295 kbits/sec, ongeveer evenveel als een geluidskanaal. Dit zal alleen maar toenemen als de EPG uitgebreidt wordt naar een week (is nu 2 dagen) en de laadtijd gelijk moet blijven.

NIT

nitDe Network Information Table (NIT) geeft een volledig overzicht van welke transportstreams op welke frequentie te vinden zijn.

Als de decoder het stream-ID weet, en het network-ID dat bij installatie opgegeven is, kan in deze tabel gevonden worden op welke frequentie de transport-stream te vinden is, en welke services er in zitten.

De descriptor 0x83 staat hier als unknown, maar in combinatie met de private_data_specifier 40 (0x28) komen we via google op LCN Specs Final Draft v.1.1.doc, een standaard die blijkbaar bij de italiaanse DVB-T gebruikt wordt, maar hier precies lijkt te passen. De specifier staat voor EACEM (European Association of Consumer Electronics Manufacturers), tegenwoordig de EICTA (European Information & Communications Technology Industry Association).

Het blijkt te gaan om een 'Logical Channel Descriptor', een manier om de servicenummers (zoals 27003 voor BBC1) te koppelen aan logische kanaalnummers (Bij @Home zit BBC1 op kanaal 71). Ook zit hier een vlag in die de service 'onzichtbaar' kan maken voor gewone gebruikers. Het kanaal komt dan niet te voorschijn in de gewone zenderlijst.

TOT/TDT

tot/tdtDe Time and Date Table (TDT) bevat alleen de UTC tijd. De Time Offset Table (TOT) bevat de UTC tijd, informatie over het verschil tussen lokale tijd en UTC, en het moment waarop de volgende zomer/wintertijd wisseling is, zodat deze overgang vanzelf goed moet gaan. Hier staat dus al dat de zomertijd eindigt op 29 okt.

De TDT lijkt hiermee compleet overbodig, maar volgens de spec is de TDT verplicht, en de TOT is optioneel.


Zie bitrates voor een overzicht hoeveel bits er nodig zijn om deze service informatie door te sturen.