DVB.NET 3.9 Service Pack 2 Beta

Leider ist es mir noch immer nicht gelungen, die Zeit für eine nächste Version 4.0 zusammen zu kratzen. Da es aber inzwischen einige kleinere Erweiterungen (primär für Entwickler) und zumindest einen echten Fix gibt, bin ich dabei, ein zweites Service Pack für die aktuellen Version zusammen zu stellen. Das ist aber noch in der Testphase.

Bei der Umstellung auf Visual Studio 2010 hatte ich dabei ein interessantes (ärgerliches?) Problem, dass ich bisher noch nicht verstanden (nachrecherchiert) habe: bei der Konvertierung der Setup (MSI) Projekte wurden für viele Komponenten neue Kennungen (ComponentId) vergeben. Diese sind bisher auch nach Neuübersetzen mit vorherigem Löschen der MSI immer gleich geblieben. Das hatte ich ausgenutzt, damit die Installationspakete sich gegenseitig erkennen und als Installationsvoraussetzung nutzen können. Durch die Änderung musste ich alle Pakete in den SP2 mit aufnehmen, auch VCR.NET und den Viewer, die sich gar nicht verändert haben.

Trotz Allem viel Spaß beim Testen

Jochen

ADO.NET – Einfach nur Rechnen…

Ich wollte in einem .NET Programm einen vom Anwender als Zeichenkette eingegebene einfachen mathematischen Ausdruck ausrechnen, etwa so was wie (13 * 29 + 123) / (12 *9 ) – 316 / (11 / 7). Ich denke mal, dass es mehrere Möglichkeiten gibt, das relativ einfach zu tun, aber dieser Mißbrauch von ADO.NET hat mich in der Einfachheit doch positiv überrascht:

var table = new DataTable();
...
var result = table.Compute( userInput, null );

Happy Coding

Jochen

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