Transponderstatistik erstellen bei Verwendung von BDA Karten

Obwohl das im folgenden beschrieben Feature Standard in anderen Anwendungen ist und dort im Allgemeinen auch optisch ansprechend präsentiert wird, ist es doch neu in DVB.NET 3.0 und könnte den einen oder anderen trotz der mageren Darstellung als Textprotokoll interessieren – wohl kaum den Normalanwender, aber es gibt ja auch noch andere Neugierige da draussen.

Wenn DVB.NET 3.0 auf eine DVB Hardware über einen BDA Treiber zugreift (etwa bei der Hauppauge Nova-S Plus oder der TechnoTrend S2-3200), dann geschieht dies über so genannte DirectShow Filter. Für seine Kernaufgaben klinkt sich DVB.NET mit einem eigenen Filter in den Rohdatenstrom (Transport Stream des Senders), zerlegt diesen in seine Bestandteile und verteilt die einzelnen Datenströme gemäß der aktuellen Anforderung.

Wichtig ist, dass der gesamte Datenstrom durch DVB.NET läuft und während der Zerlegung intern einige Zähler mitgeführt werden. Diese Zähler können beim Beenden einer DVB.NET Anwendung in eine Datei geschrieben werden, wodurch man einen interessanten Einblick in die interne Struktur des Rohdatenstroms erhalten kann. Wird die Protokollierung in einer regulären DVB.NET Anwendung (Stream Manager, Quick Record, …) aktiviert, so wird das Protokoll im temporären Verzeichnis des Anwenders angelegt (C:\Documents and Settings\USER\Local Settings\Temp oder ähnliches). Bei einer Aktivierung für VCR.NET wird das temporäre Verzeichnis von Windows verwendet (%SystemRoot%\temp oder ähnliches), da VCR.NET als Windows Dienst unter dem LocalSystem Konto abgearbeitet wird und dieses kein Benutzerprofil besitzt. Man beachte, dass ein Protokolleintrag immer von Anfang bis Ende der Nutzung erfolgt und blind gegenüber Senderwechsel ist. Quick Record ist daher ein eher unüblicher Kandidat zur Erstellung eines Protokolls, VCR.NET schon fast ideal.

Die Aktivierung des Features erfolgt über einen Eintrag in der .NET Konfiguration des DVB.NET Programms, das ein Protokoll anlegen soll (etwa DVBStreamManager.exe.config oder auch JMS.DVBVCR.RecordingService.exe.config). Bei einer Eintragung bitte eine Sicherheitskopie anlegen und sorgfältig vorgehen – ein Fehleintrag kann dazu führen, dass das Programm nicht mehr startet, was beim VCR.NET besonders ärgerlich ist. Nach der Änderung muss das jeweilige Programm neu gestartet werden – auch das gilt besonders für den VCR.NET Windows Dienst. Der Eintrag selbst ist einfach:

<add key=“TSStatistics“ value=“True“ />

Ist das Erzeugen eines Protokolls aktiv, so wird eine Protokolldatei namens DVBNETTSStatistics.log fortlaufend gefüllt. Grundsätzlich werden die im Folgenden beschriebenen Eintragungen vorgenommen.

Immer, wenn ein Datenstromfilter (Bild, Ton, VideoText, EPG/Programmzeitschrift, PMT/PAT/Sendersuchlauf, …) nicht mehr benötigt wird, wird dessen Nutzung eingetragen:

2007.02.01 22:41:15 [00163] #290081 2376343552 ([8192..8192] 8192)

In eckigen Klammern steht der PID, hinter dem # die Anzahl der übertragenen Pakete (keine TS Pakete) und die Anzahl der übertragenen Bytes. Dahinter in Klammern minimale, maximale und mittlere Paketgröße. DVB.NET 3.0 überträgt Nutzdaten (PES Datenströme) in festen Blöcken von 8 kBytes ohne Rücksicht auf die Paketierung des Datenstroms. Die Weiterverarbeitung innerhalb von DVB.NET ist darauf vorbereitet. Bei Steuerdaten (SI Tabellen) werden tatsächlich immer ganze Tabellen übertragen, da sieht das schon interessanter aus, hier ein paar Zeilen aus meiner letzten Aktualisierung der Programmzeitschrift (PID 18 ist das EPG):

2007.02.03 18:01:07 [00018] #4641 4261011 ([18..4096] 918)
2007.02.03 18:02:09 [00018] #23587 9554622 ([18..3847] 405)
2007.02.03 18:03:10 [00018] #2236 2671201 ([18..4066] 1194)
2007.02.03 18:04:12 [00018] #4091 4208208 ([18..4063] 1028)

Nur am Ende einer DVB.NET Anwendung wird ein Gesamtprotokoll der durch DVB.NET analysierten Daten erstellt. Dieses beginnt immer mit einer Übersicht:

2007.02.01 22:41:17 cb=287822 b=27704594432 s=257372 p=147363495 enc=25321062
2007.02.01 22:41:17 strm=0 tbl=0 sync=5 err=10

Dabei bedeuten: cb=Anzahl der Aufrufe des DVB.NET DirectShow Filters durch das jeweilige BDA Gerät; b=Gesamtzahl der untersuchen Bytes; s=Durch Resynchronisation des Datenstroms (sync) verlorene Bytes; p=Anzahl der TS Pakete (à 188 Bytes); enc=Anzahl der verschlüsselten dadurch verworfenen TS Pakete; strm=Fehler bei der Analyse von PES Datenströmen; tbl=Fehler bei der Analyse von SI Tabellen; sync=Resynchronisationen durch nicht interpretierbare Daten; err=Anzahl der als fehlerhaft markierten und deswegen verworfenen TS Pakete.

Nun folgt für jeden Datenstrom dessen Datenvolumen:

2007.02.01 22:41:17 02047 #44
2007.02.01 22:41:17 00033 #12
2007.02.01 22:41:17 00255 #91
2007.02.01 22:41:17 00035 #9
2007.02.01 22:41:17 01791 #175
2007.02.01 22:41:17 01023 #136
2007.02.01 22:41:17 08191 #16160227

Die Zahl hinter der Uhrzeit ist der PID (dezimal), hinter dem # die Anzahl der zugehörigen TS Pakete. Interessant ist etwa der PID 8191, der nur Fülldaten enthält und letztlich eine Aussage über die verbleibende Datenkapazität im Rohdatenstrom ist.

Ich persönlich war überrascht zu sehen, dass die Rohdatenströme Bitraten von mehr als 30 MBit/s aufweisen (DVB-S). Und dass ich den Eindruck habe, als wenn DVB.NET die Zerlegung mindestens genauso gut kann, wie die Microsoft BDA Komponenten – zumindest was die Laufzeit angeht, funktional wurde diese Lösung gewählt, weil gerade die PSI zerlegung von Microsoft über den MPEG2 Demultiplexer unzureichend funktioniert.

Viel Spaß

Jochen

Wenn man denkt, man wäre fertig…

Eben mal noch schnell testen, ob der VCR.NET mit dem Schlafzustand (Hibernate, S4) und dem Aufwachen auch richtig umgehen kann und dann ist die Beta fertig. Sieht auf den ersten Blick gut aus, auf den zweiten aber nicht: nach dem Aufwachen findet die TechnoTrend S2-3200 keine Sender – leider ein bekanntes Problem der BDA Treiber. Das hat zwar nichts mit VCR.NET zu tun, kann ich aber so auch nicht herausgeben.

Dafür ist in DVB.NET 3.0 ein interessantes Zusatzfeature entstanden: für die BDA Hardware Abstraktion kann nun eine Einstellung ResetAfterWakeup gesetzt werden (für alle TechnoTrend Budget Karten inklusive der S2-3200 passiert das erst einmal automatisch). Diese führt dazu, dass in der neuen Methode WakeUp der Abstraktion der Tuner deaktiviert (Disable im Gerätemanager) und wieder aktiviert (Enable) wird. Der VCR.NET ruft diese Methode nun immer vor der ersten Aufzeichnung nach dem Aufwachen aus dem Schlafzustand auf und erreicht so auch mit der S2-3200 zuverlässige Aufzeichnungen.

Neue Option in der Profilverwaltung

Im Gegensatz zu früher (der VCR.NET hatte mal so eine ähnliche Funktionalität für die TechnoTrend Premium Line 2.19 Beta Treiber) passiert das aber nur, wenn der VCR.NET es braucht. Andere Anwendungen hätten nach dem Aufwachen weiterhin das Problem und können die Karte nicht nutzen. Ich denke, für VCR.NET 3.0 werde ich das nicht einbauen aber man kann sich relativ einfach vorstellen, dass in einer zukünftigen Version der VCR.NET diese Reaktivierung einfach für alle eingebundenen Geräteprofile direkt nach dem Aufwachen macht. Hier muss man nur etwas mit dem Timing aufpassen: früher war das einfach, da am VCR.NET nur eine Karte hing!

Jochen

Endspurt

Gerade jetzt lade ich den Release Candidate von DVB.NET 3.0 hoch, ich werde in den nächsten Tage die Release Notes aktualisieren und einen Post dazu im Forum machen. Auch wenn (mal wieder) nicht alle gewünschten Features realisiert wurden, hat DVB.NET doch einen guten Schritt nach vorne gemacht. Ich denke, dass der aktuelle Download wirklich funktional vollständig ist. An einer Freigabe fehlen eigentlich noch die Synchronisation mit VCR.NET 3.0 (vielleicht fehlt ja doch noch was – glaube ich nicht) und die Aktualisierung der Dokumentation / Homepage (sehr lästig, kostet wieder einen Tag oder 3 – 4 Abende).

Jochen

BDA – ein kleiner Meilenstein

So, nun rückt DVB.NET 3.0 endlich näher. Ich habe ein wesentliches Stück der BDA Implementierung verändert. Wie die meisten anderen DVB / BDA Anwendungen auch (!) verläßt sich DVB.NET und damit VCR.NET nun wesentlich weniger auf die Microsoft Komponenten und zerlegt den nackten TS Strom selbst. Im Zusammenspiel mit der TechnoTrend S2-3200 (die Nova-S Plus muss ich noch testen, ist ein anderes System) sind nun Sendersuchläufe zuverlässig wie bei der Nexus und auch fast so schnell (ich schätze rund 4-5mal schneller als früher).

Für Entwickler ist eine Klasse TSParser abgefallen, die einen TS Datenstrom nimmt und in seine Bestandteile zerlegt. Nicht aktiviert aber möglich und getestet ist die Option, dabei eine Statistik über die empfangenen Daten zu erstellen (welche PIDs sind wirklich im Strom [manche werden auch bewußt versteckt] und welche Raten hat welcher PID).

Ich bin zuversichtlich, dass damit die letzte große Hürde auf dem Weg zu DVB.NET / VCR.NET 3.0 gefallen ist. Mal sehen…

Jochen

QuickRecord – BDA und kein Ende

Und mal wieder einen Abend verloren: wie hier bereits beschrieben bin ich auf die BDA Treiber der S2-3200 umgestiegen. Gestern wollte ich eigentlich am VCR.NET was tun und öffne mal eben für einen winzigen Test QuickRecord (Standard). Beim Starten der Aufzeichnung stürzt das Tool gnadenlos irgendwo im DirectShow ab. Ohne auf Details einzugehen: die Ursache ist wohl irgendwie der Audio Decoder Filter von CyperLink / PowerDVD – nimmt man den von Nero, fluppt es (dieser Artikel positiv übertitelt würde daher lauten: in QuickRecord (Standard) von DVB.NET wird es nun möglich sein, die zu verwendenden DirectShow Filter für Bild und Ton vorzugeben).

Wie dem auch sei, hier ein Zwischenfazit: DVB.NET wird vermutlich zur Anzeige (!) einen neuen BDA Kern bekommen. Aber erst, nachdem VCR.NET fertig ist – das bedeutet nämlich wieder viel Probiererei und hält wirklich auf.

Jochen

PS: Ach ja: heute Nacht ist mir der Rechner beim Starten einer Aufzeichnung eingefroren! Irgendwie traue ich den BDA Treibern doch nicht so richtig…