Verwijderd schreef op zaterdag 22 november 2008 @ 23:04:
Ja, maar dat ligt niet bij de smartcard. De reden dat andere ontvangers zoals die in TV's niet alle zenders in kunnen inlezen ligt aan bepaalde timings van de SDT (Service Description Table) en LCN (Logical Channel Numbering).
De LCN wordt niet los verzonden, maar als een onderdeel van de Network Information Table (NIT). Zie onderstaand voorbeeld van het deel van de NIT voor Transport Stream 100:
├─■ NIT { Network Information Table }
│ └─■ network ID 1, version 3
│ ├─■ network_id = 1
│ ├─■ version_number = 3
│ └─■ sections: { Required sections: 2, available sections: 2 }
│ ├─■ section { 0/1 }
│ │ ├─■ section_number = 0
│ │ ├─■ last_section_number = 1
│ │ ├─■ descriptors:
│ │ │ └─■ network_name_descriptor
│ │ │ └─■ network_name
│ │ │ ├─■ character_coding = Latin alphabet
│ │ │ └─■ text = Hertzinger
│ │ └─■ transport streams:
│ │ ├─■ stream
│ │ │ ├─■ transport_stream_id = 100
│ │ │ ├─■ original_network_id = 1
│ │ │ └─■ descriptors:
│ │ │ ├─■ service_list_descriptor
│ │ │ │ └─■ services:
│ │ │ │ ├─■ service
│ │ │ │ │ ├─■ service_id = 1
│ │ │ │ │ └─■ service_type = Digital television service
│ │ │ │ ├─■ service
│ │ │ │ │ ├─■ service_id = 2
│ │ │ │ │ └─■ service_type = Digital television service
│ │ │ │ ├─■ service
│ │ │ │ │ ├─■ service_id = 3
│ │ │ │ │ └─■ service_type = Digital television service
│ │ │ │ ├─■ service
│ │ │ │ │ ├─■ service_id = 4
│ │ │ │ │ └─■ service_type = Digital television service
│ │ │ │ └─■ service
│ │ │ │ ├─■ service_id = 5
│ │ │ │ └─■ service_type = Digital television service
│ │ │ ├─■ cable_delivery_system_descriptor
│ │ │ │ ├─■ frequency = 303.0
│ │ │ │ ├─■ FEC_outer = No outer FEC coding
│ │ │ │ ├─■ modulation = 256-QAM
│ │ │ │ ├─■ symbol_rate = 6.9565
│ │ │ │ └─■ FEC_inner = No conv. coding
│ │ │ ├─■ user_private_descriptor
│ │ │ │ └─■ data = 0000 FE 03 03 00 00 03 11 00 00 03 19 00 00 03 27 00 ..............'.
│ │ │ │ 0010 00 03 35 00 00 03 43 00 00 03 51 00 00 03 59 00 ..5...C...Q...Y.
│ │ │ │ 0020 00 03 67 00 00 03 75 00 00 ..g...u..
│ │ │ └─■ user_private_descriptor
│ │ │ └─■ data = 0000 01 06 48 45 20 44 55 54 44 55 54 14 00 01 C0 01 ..HE DUTDUT.....
│ │ │ 0010 00 02 C0 02 00 03 C0 03 00 04 C0 04 00 05 C0 05 ................
De tweede user_private_descriptor is de LCN. De eerste user_private_descriptor is eigenlijk een frequency_list_descriptor die door mijn tooltje nog niet herkend wordt. Met een andere tool blijkt echter dat Hertzinger overbodig die frequency_list_descriptor in de NIT stopt omdat hij toch niet netjes ingevuld is.
Een kabel ontvanger die alleen de standaard DVB sepcifcaties implementeert zal overigens de LCN in de NIT niet ondersteunen omdat de LCN niet is vastgelegd in de DVB specificaties. Het is digitale TV operators toegestaan om eigen uitbreidingen te maken op het DVB protocol zolang ze dat maar doen via user_private_descriptors en private_data. Een ontvanger fabrikant moet namelijk tags en data in het signaal negeren die volgens die als private data worden verzonden. Herkent de ontvanger die tags wel, zoals de Sagem ontvanger van Hertzinger, dan mag die ontvanger die tags en data uiteraard wel gebruiken. Daarvoor heeft die ontvanger fabrikant dan wel een aanvullende specificatie nodig van de digitale TV provider. Sony e.d. zullen die LCN specificatie van Hertzinger niet hebben omdat Hertzinger probeert om het systeem gesloten te houden.
Een ontvanger kan een aantal verschillende kanalen zoekmethodes toepassen. De eerste mehode is een volledige scan van de gehele frequentie band die voor DVB-C gebruikt mag worden (zo'n 47 t/m 860 MHz). Een goede ontvanger zal dan die frequentie band afspeuren met stappen van ongeveer 0,25 MHz en iedere frequentie stap voor alle mogelijke QAM waarden een keer proberen voor de veel toegepaste symbolrates bij DVB-C operators, namelijk 6875 en 6900. Dat is een zeer landurige zoekmethode, maar ontvangers met een dergelijke zoekmethode weten meestal alles te vinden inclusief eventuele test Transport Streams. Ik heb TV's van Loewe en TechniSat kunnen testen met het Multikabel signaal die dan meer dan een half uur bezig waren met zoeken. Sony heeft ook een "Full Scan" methode, maar die werkt niet volgens de hierboven beschreven volledige frequentie band scan methode omdat de Full Scan van Sony binnen 5 minuten klaar is en dus nooit alles volledig gescand kan hebben voor alle mogelijke combinaties van QAM's en symbolrates. Wat Sony dan wel doet tijdens die Full Scan methode is mij niet duidelijk en over het algemeen weten ze met die Full Scan juist het minste aantal kanalen te vinden.
De tweede methode is een zogenaamde netwerk zoek methode. De ontvanger wordt dan geïnstrueerd om tijdens het scannen van frequenties op de NIT's te letten waarbij een ontvanger die volgens de DVB specificaties werkt normaal alleen zoekt naar de zogenaamde actual NIT. Zoals je in bovenstaand voorbeeld kan zien bevat een NIT voor iedere gebruikte Transport Stream de frequentie, QAM en symbol rate. Is de NIT eenmaal gevonden dan hoeft de ontvanger alleen nog maar alle frequenties die in de NIT genoemd worden te verifiëren. Meestal kan bij een dergelijke zoekmethode ook nog door de gebruiker de zogenaamde netwerk frequentie, symbolrate en QAM worden opgegeven waardoor het kanalen zoeken in principe binnen een paar seconden kan zijn afgerond aangezien de ontvanger niet eerst frequenties moet gaan scannen totdat de eerste frequentie gevonden wordt waarop een NIT wordt doorgegeven. Hoe meer gegeven de gebruiker opgeeft hoe sneller de scan afgerond kan zijn. Bij Sony wordt dat de Quick Scan genoemd waarbij i.p.v. de QAM echter de Netwerk ID kan worden opgegeven. Normaal zou het niet nodig moeten zijn om de Netwerk ID op te geven, maar bij een aantal kabelbedrijven worden de frequenties voor sub netwerken via other NIT's verstuurd die normaal door een ontvanger genegeerd mogen worden. Door het opgeven van de Netwerk ID van zo'n other NIT kan een ontvanger toch verplicht worden om die other NIT te gebruiken i.p.v. de actual NIT. Dit werkt zo bij de meeste kabel bedrijven in Nederland die Irdeto als Condional Access System (CAS) toepassen, maar is niet volgens de DVB specificatie. Bij Hertzinger is er alleen sprake van een actual NIT, dus het opgeven van een netwerk ID is overbodig.
De derde methode is meestal een mengvorm van beide genoemde zoekmethode, dus zowel een volledige frequentie band scan als een NIT scan waarbij de ontvanger voor iedere in de NIT genoemde frequentie een deel van de volledige frequentie band scan kan overslaan omdat DVB-C kanalen een bandbreedte van 8 MHz hebben. Als er bijvoorbeeld een Transport Stream op 308 MHz wordt doorgegeven volgens de NIT, dan hoeft het hele gebied van 304 tot 312 MHz niet meer gescand te worden. Deze zoekmethode is vooral handig om naast het normale digitale TV netwerk ook test netwerken van de kabel operator te vinden als die daarvan gebruik maakt. De frequenties van de test Transport Streams worden namelijk niet opgenomen in de NIT van het publieke digitale TV netwerk. Sony ondersteunt niet een dergelijke gecombineerde zoek methode.
In de NIT staat voor iedere Transport Stream niet alleen de frequentie, QAM en symbol rate, maar ook welke services via de betreffende Transport Stream allemaal verzonden worden. Die services worden ook wel de digitale kanalen genoemd. Aan alleen een NIT heeft de ontvanger niet voldoende omdat daar geen kanalen namen in staan. Daarvoor is de Service Description Table (SDT) nodig. Zie onderstaand voorbeeld van de SDT voor Transport Stream 100 bij Hertzinger:
├─■ SDT { Service Description Table }
│ ├─■ transport stream ID 100, version 0
│ │ ├─■ transport_stream_id = 100
│ │ ├─■ version_number = 0
│ │ ├─■ original_network_id = 1
│ │ └─■ sections: { Required sections: 1, available sections: 1 }
│ │ └─■ section { 0/0 }
│ │ ├─■ section_number = 0
│ │ ├─■ last_section_number = 0
│ │ └─■ services:
│ │ ├─■ service
│ │ │ ├─■ service_id = 1
│ │ │ ├─■ EIT_schedule_flag = true
│ │ │ ├─■ EIT_present_following_flag = true
│ │ │ ├─■ running_status = running
│ │ │ ├─■ free_CA_mode = all elementary streams unscrambled
│ │ │ └─■ descriptors:
│ │ │ └─■ service_descriptor
│ │ │ ├─■ service_type = Digital television service
│ │ │ ├─■ service_provider_name
│ │ │ │ ├─■ character_coding = Latin alphabet
│ │ │ │ └─■ text = Hertzinger
│ │ │ └─■ service_name
│ │ │ ├─■ character_coding = Latin alphabet
│ │ │ └─■ text = Nederland 1
│ │ ├─■ service
│ │ │ ├─■ service_id = 2
│ │ │ ├─■ EIT_schedule_flag = true
│ │ │ ├─■ EIT_present_following_flag = true
│ │ │ ├─■ running_status = running
│ │ │ ├─■ free_CA_mode = all elementary streams unscrambled
│ │ │ └─■ descriptors:
│ │ │ └─■ service_descriptor
│ │ │ ├─■ service_type = Digital television service
│ │ │ ├─■ service_provider_name
│ │ │ │ ├─■ character_coding = Latin alphabet
│ │ │ │ └─■ text = Hertzinger
│ │ │ └─■ service_name
│ │ │ ├─■ character_coding = Latin alphabet
│ │ │ └─■ text = Nederland 2
│ │ ├─■ service
│ │ │ ├─■ service_id = 3
│ │ │ ├─■ EIT_schedule_flag = true
│ │ │ ├─■ EIT_present_following_flag = true
│ │ │ ├─■ running_status = running
│ │ │ ├─■ free_CA_mode = all elementary streams unscrambled
│ │ │ └─■ descriptors:
│ │ │ └─■ service_descriptor
│ │ │ ├─■ service_type = Digital television service
│ │ │ ├─■ service_provider_name
│ │ │ │ ├─■ character_coding = Latin alphabet
│ │ │ │ └─■ text = Hertzinger
│ │ │ └─■ service_name
│ │ │ ├─■ character_coding = Latin alphabet
│ │ │ └─■ text = Nederland 3
│ │ ├─■ service
│ │ │ ├─■ service_id = 4
│ │ │ ├─■ EIT_schedule_flag = true
│ │ │ ├─■ EIT_present_following_flag = true
│ │ │ ├─■ running_status = running
│ │ │ ├─■ free_CA_mode = all elementary streams unscrambled
│ │ │ └─■ descriptors:
│ │ │ └─■ service_descriptor
│ │ │ ├─■ service_type = Digital television service
│ │ │ ├─■ service_provider_name
│ │ │ │ ├─■ character_coding = Latin alphabet
│ │ │ │ └─■ text = Hertzinger
│ │ │ └─■ service_name
│ │ │ ├─■ character_coding = Latin alphabet
│ │ │ └─■ text = RTL4
│ │ └─■ service
│ │ ├─■ service_id = 5
│ │ ├─■ EIT_schedule_flag = true
│ │ ├─■ EIT_present_following_flag = true
│ │ ├─■ running_status = running
│ │ ├─■ free_CA_mode = all elementary streams unscrambled
│ │ └─■ descriptors:
│ │ └─■ service_descriptor
│ │ ├─■ service_type = Digital television service
│ │ ├─■ service_provider_name
│ │ │ ├─■ character_coding = Latin alphabet
│ │ │ └─■ text = Hertzinger
│ │ └─■ service_name
│ │ ├─■ character_coding = Latin alphabet
│ │ └─■ text = RTL5
De service name (= kanaal naam) wordt dus uit de SDT gehaald en dan heeft de ontvanger voldoende informatie om de kanalenlijst op te bouwen. In iedere Transport Stream wordt normaal één actual SDT voor service informatie van de afgestemde frequentie doorgegeven en voor alle overige Transport Streams die via andere frequenties worden doorgegeven een other SDT. Hier gaat Hertzinger echter in de fout. Zij zenden namelijk ook voor iedere andere Transport Stream niet alleen een other SDT maar ook een actual SDT mee in de Transport Stream waarop is afgestemd. En dat is in strijd met de DVB specificaties. De ontvanger verwacht namelijk één actual SDT als beschrijving van de huidige Transport Streams en nul of meerdere other SDT's als beschijving voor de overige Transport Streams.
Die ingestelde waarden op het Hertzinger netwerk wijken af van wat de meeste ontvangers gebruiken (hebben ze op hun eigen ontvanger afsgestemd). Dus dat ze zeggen dat andere decoders niet werken is dus puur en alleen omdat ze zenderlijst niet fatsoendelijk kunnen inladen door die 2 afwijkende waarden.
Het heeft volgens mij gezien bovenstaande uitleg dus niets te maken met de timing, maar gewoon met een foute toepassing van de SDT door Hertzinger. Tijdens het zoeken wordt de door de ontvanger gevonden actual SDT namelijk steeds overschreven door de "actual" SDT die thuis hoort in een andere Transport Stream en niet in huidige afgestemde Transport Stream. Dat verklaart ook het gedrag waar je het over had met de verschillende gevonden setjes kanalen die soms wel en soms niet te bekijken waren op je Sony TV al naar gelang of ze wel of niet op de juiste plek in de kanalen lijst staan.
Het is dus geen probleem van een afwijkende encryptie. Het is ook geen probleem van een afwijkend DVB-C signaal.
Een bug in de SDT implementatie van Hertzinger, dus wel een afwijkend DVB-C signaal. Er kloppen meer dingen niet in de SDT. Zo staat bijvoorbeeld in iedere service beschrijving de free_CA_mode op "all elementary streams unscrambled" en zoals je gemerkt hebt komt dat niet overeen met de werkelijkheid. Als de ontvanger de SDT zou mogen geloven dan geeft Hertzinger ook op ieder kanaal Present/Following EPG en Schedule EPG informatie door aangezien de EIT_present_following_flag en EIT_schedule_flag overal op true staat en dat klopt ook niet. De invulling van de DVB informatie is dus ook een rommeltje.
Zodra de zender eenmaal correct in de TV staat wordt die prima weergegeven. Ik kan je zeggen dat ik zelf aan het testen ben met een FloppyDTV. En zowel met de bijgeleverde FireDTV viewer als met DVBviewer heb ik alle 70 zenders die momenteel op het Hertzinger netwerk staan bij OnsNet Eindhoven prima ingelezen. Dit doordat FireDTV viewer / DVBviewer op een andere manier scant dan hoe de meeste ontvangers dat doen (officiele manier). Door die afwijkende manier van scannen vind ik alle 70 services maar wel zonder naam erbij.
Ook de DVB software van DVBviewer e.d. gaan uiteraard uit van de correcte werking van de SDT, dus ook hier is het niet vreemd dat de kanaal namen niet goed gevonden worden.