Transport Stream analyiseren

Ich habe mal die (zugegeben etwas beschränkten) Möglichkeiten der aktuellen DVB.NET 3.9 SP1 genutzt, um in einem einfachen Beispiel zu demonstrieren, wie man sich einen Überblick über den Inhalt eines Transport Streams (eines ganzen Transponders) verschaffen kann. Das funktioniert allerdings nur mit BDA Treibern (also insbsondere nicht mit der Nexus / Premium Line).

Der DVB.NET TS Parser bietet im Moment leider nicht die Möglichkeit, dynamisch Teilströme an einen Client zu melden. Aber mit einem kleinen Trick geht es doch. Das Beispielprogramm aktiviert eine beliebige Quellgruppe (Transponder), die durch eine Quelle (Sender) als Repräsentant gekennzeichnet wird. Dann wird der Statistikmodus aktiviert, der dafür sorgt, dass für alle Datenströme Buch über die empfangenen Daten geführt wird. Wartet man nun etwas (so 30 Sekunden, damit auch TOT und TDT eingetroffen sind) und fragt diese Statistik dann ab, so erhält man im Allgemeinen alle Datenstromkennungen (PID) der Quellgruppe. Nun ist es ein Einfaches, Verbraucher an die einzelnen Ströme anzumelden und diese auszuwerten – das Beispiel ist allerdings extrem einfach gestrickt, reicht aber, um die meisten SI Tabellenströme von Nutzdaten zu trennen und bei PES Datenströmen die Breitstellung des PCR zu erkennen. Läßt man das Beispiel kurz laufen, kann man sich dann das Ergebnis der Analyse anschauen. Klar, dass da noch viel mehr drin wäre, aber das war hier erst einmal nicht das Thema.

Wie man am Beispiel sieht, bietet DVB.NET (aus gutem Grund) keinen direkten Zugriff auf die Interna des DVB Empfangs an. Mit ein bißchen .NET Reflection im Full Trust Modus ist das aber alles schnell gemacht. Mal schauen, ob zukünftige Versionen da einen einfacheren Zugang erlauben.

Auf diesem Wege auch einen guten Rutsch ins nächste Jahr

Jochen

Protokoll des Sendersuchlaufs

Obwohl ich das eigentlich vor hatte gibt es in DVB.NET nur wenige Stellen, an denen die Standardmechanismen von .NET zur Protokollierung verwendet werden. Eine dieser Stellen ist die Aktualisierung der Quellen (Sendersuchlauf), sofern sie von dem Administrations & Konfigurationswerkzeug angestossen wird. Hier setzt der Algorithmus auf .NET Tracer. Die Einrichtung erfolgt über die Datei DVBNETAdmin.exe.config in etwa wie folgt (ich denke, man sieht am existierenden Inhalt, worum es geht):

...
<system.diagnostics>
<switches>
<add name="ConsumerTrace" value="0"/>
<add name="TunerTrace" value="4"/>
<add name="StreamOptimizerTrace" value="0"/>
<add name="ScannerTrace" value="4"/>
</switches>
<trace useGlobalLock="false" autoflush="true" indentsize="0">
<listeners>
<add
name="adminListener"
type="System.Diagnostics.TextWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
initializeData="c:\temp\adminlog.txt" />
</listeners>
</trace>
</system.diagnostics>
...

Die erzeugt Ausgabedatei enthält unter anderem folgende Informationen:

  • Untersuchte Quellgruppe (Transponder) und deren Anwahl
  • Inhalt der Netzwerkinformationen
  • Liste der Quellen (Sender) auf jeder Quellgruppe

Wie in letzter Zeit gelernt können diese Informationen sehr nützlich bei der Suche nach Fehlern beim Sendersuchlauf sein – seien es tatsächliche Fehler in DVB.NET oder Fehlkonfigurationen vor Ort.

Viel Spaß

Jochen

VideoText in DVB.NET 3.9 für Entwickler

Da ich für das Service Pack 1 gerade ein bißchen am Code herumspielen musst, hier eine grobe Zusammenfassung der Möglichkeiten, die DVB.NET einem Entwickler zur Auswertung von VideoText bietet.

Kern ist die Klasse TTXParser, deren AddPayload Methode mit dem Rohdatenstrom (ES) beschickt wird. Sobald eine Seite (TTXPage) vollständig bereit steht, wird ein entsprechendes Ereignis ausgelöst (OnPage). Ergänzend bietet DVB.NET mit der Klasse PageManager die Möglichkeit, einmal empfangene Seiten vorzuhalten. Diese können dann gezielt angefordert werden (CurrentPage) und werden dann unmittelbar oder nach Empfang der ersten Version über ein Ereignis gemeldet (OnPageAvailable) – dito bei jeder folgenden Aktualisierung der Seite [unabhängig davon, ob sich der Inhalt verändert hat]. Sollten kein Rohdatenstrom vorliegen (so wie es beim DVB Empfang oft der Fall ist), kann dieser durch Kombination mit einer TTXStream Instanz aus einem PES erzeugt werden.

Im Zentrum der eigentlichen Darstellung stehen Instanzen der TTXPage Klasse. Diese verwaltet eine voranalyiserte Darstellung der Seite, die allerdings für die direkte Auswertung nicht zwingend geeignet ist. Hier sind noch Steuersequenzen für Zeichengröße, Zeichensatz, Vorder- und Hintergrundfarbe etc. eingebettet. Mit einem Aufruf von CreatePage erfolgt die Umsetzung in eine .NET Bitmap Instanz, die direkt zur Anzeige verwendet werden kann. Die Unterstützung des VideoText Standards ist zwar recht rudimentär (international Zeichensätze werden nicht korrekt dargestellt, was etwa ARTE oder BBC etwas komisch aussehen lässt), für die deutschen Sender reicht es aber. Ebenso vorhanden sind transparente Seiten etwa für Untertitel.

Ergänzend zur Bitmap und den Rohdaten bietet CreatePage die Option, eine Information über alle auf der Seite ausgegebenen Ziffern zu erfragen. Diese werden über eine Klasse DigitManager verwaltet. Mit der Methode GetTTXDigitAt kann zu einer relativen Position auf der Seite (in den Koordinaten 0.0 bis 1.0, wobei 0.0 / 0.0 wie gewohnt oben links ist) ermittelt werden, ob dort eine Ziffer ausgegeben wurde. Ist das der Fall, so wird auch der Rahmen des Zeichens in relativen Koordinaten gemeldet. Ergänzend prüft GetPageAt zu einer Position, ob dort eine dreistellige Seitennummer im Bereich 100 bis 899 (jeweils einschließlich) vorhanden ist – dazu wird natürlich GetTTXDigitAt eingesetzt. Bedingung ist eine Sequenz aus genau drei Ziffern gleicher Größe – Höhe und Breite.

Viel Spaß

Jochen

Noch ein kleines Tool: BBC / ITV Programmzeitschrift

Ich habe aus Eigennutz mal ein kleines Tool geschrieben, das die FreeSat Programmzeitschrift in eine Excel fähige Datei auslesen kann. Nix Dolles und sicher noch mit Bugs und Schönheitsfehlern, aber vielleicht nützlich für den den einen oder anderen. Es wird eine funktionsfähige (i.e. mindestens ein Geräteprofil mit durchgeführtem Suchlauf auf Astra 2 / EuroBird) DVB.NET 3.9 Installation vorausgesetzt. Die Quelltexte sind als Beispiel dabei (es ist eine ganz einfache Page basierte WPF Anwendung).

Viel Spaß

Jochen

Zum Beispiel

Lesepause :-)

Ich habe meine freie Zeit mal böswillig nicht genutzt, um etwas an VCR.NET zu tun, sondern vielmehr, um mein Hintergrundwissen im Bereich Betriebssysteme aufzufrischen – im aktuellen Arbeitskontext ist das natürlich Windows. Die dazu verwendete Literatur war die nun fünfte Auflage von Windows Internals – ein oder zwei ältere Versionen hatte ich mir schon vor langer Zeit einmal angetan.

Auch wenn das Buch in der Gesamtheit einen etwas gemischten Eindruck hinterläßt, halte ich es für die angesprochene Zielgruppe für unbedingt empfehlenswert. Die meisten Kapitel sind didaktisch gut aufgebaut, logisch und meiner Ansicht nach genau in der richtigen Tiefe. Es geht nicht in die absoluten Details (elendige Diskussionen aller Felder von Kernel Strukturen sind extremst selten), sondern vermittelt vielmehr Hintergründe, Zusammenhänge und zum Teil auch Designentscheidungen. Wer wirklich direkt anfangen will, einen Treiber zu schreiben, wird sicher mehr brauchen – aber das war auch nicht meine Erwartungshaltung. Bei mir hinterläßt es zumindest das Gefühl, einige Grundprinzipien verstanden zu haben – und es hat mich zu einigen Experimenten mit Vista rund um UAC und VSS motiviert, bei denen diese Prinzipen auch für den Endanwender fühlbar werden.

Allerdings gibt es auch einige (zwei oder so) Kapitel, die eher verwirrend waren – vielleicht, weil das nicht wirklich mein Thema war, vielleicht, weil der Umfang der zu vermittelnden Daten einfach den Rahmen sprengte. Die Netzwerkarchitektur scheint mir eher ein ‚alles mal erwähnen‘ zu sein als sich an der angenehmen Tiefe des Rest zu orientieren – wie gesagt, kann auch an mir liegen.

Auch vielleicht nicht ganz ohne Schuld auf meiner Seite habe ich das Gefühl, dass zwischen den (zweifellos berechtigten) Querreferenzen nach vorne und hinten doch mal etwas auf der Strecke blieb. So meine ich das eine oder andere mal ein ‚wie bereits in Kapitel X ausführlich beschrieben‘ bei Nachschlagen auf einen Absatz mit zwei Sätzen reduziert gesehen zu haben. Da ich aber keine Zeit hatte, alles mehrfach zu lesen und nachzuschlagen (immerhin 1150 Seiten), kann ich das nicht für alle Stellen oder gar für Vorwärtsreferenzen bestätigen.

Alles in Allem meine ich, das Buch ist mit der richtigen Erwartungshaltung unbedingt sein Geld wert (Tipp: mal bei Amazon UK statt hier nachzuschauen, das kann sich je nach Situation trotz Porto lohnen).

Nun versuche ich etwas braver mit meiner Zeit umzugehen und mal nach dem DVB.NET / VCR.NET 3.9 Service Pack 1 zu schauen.

Viel Spaß

Jochen