Geräteauswahl über die BDA Filter Tuner und Capture

Im Service Pack 2 von DVB.NET / VCR.NET 3.9 wird es einige eigentlich kleinere Erweiterungen im Bereich der Geräteauswahl geben – ich habe gerade einen Release Candidate 10 in den Beta Bereich geladen, in dem diese am Anfang des Testzyklus schon einmal drin sind. Ich will in einigen Folgeartikeln diese Erweiterungen kurz beschreiben, dachte mir aber, ein bisschen Hintergrundinformationen wären nützlich. Tja, das wäre dann das, was nun kommt.

Als DVB.NET vor langer Zeit um die Möglichkeit erweitert wurde, grundsätzlich beliebige BDA DVB Geräte zu nutzen, wurde zur Festlegung der zu verwendende Hardware bestimmt, dass eine Kombination von Tuner und Capture Filter ausgewählt werden musste. Ohne auf die volle Historie einzugehen, hier die aktuelle Implementierung in der Grundfassung – auf einige Feinheiten und -einstellungen gehe ich in den späteren Artikeln ein.

Dem Anwender werden die Filter jeweils einer Art als Liste angeboten. Diese Liste zeigt die Namen, wie sie in der BDA Registrierung hinterlegt wurden. Zusätzlich merkt sich DVB.NET bei einer Auswahl aber auch den eindeutigen Namen (BDA Moniker) – der Grund für dieses Verhalten wird später in dem Artikel deutlicher, in dem es um den Einsatz mehrerer gleichartiger Geräte in einem Rechner geht.

Wenn das Gerät später einmal benötigt wird, versucht DVB.NET dieses zuerst über den kryptischen (i.e. maschinen- aber weniger menschenlesbar) eindeutigen Namen zu ermitteln. Bei PCI Geräten ändert sich dieser im Allgemeinen erst, wenn eine neue Treiberversion installiert wird – dann auch nicht immer. DVB.NET erkennt diese Situation und fällt dann auf die Suche nach dem Anzeigenamen zurück. Dieser Mechanismus funktioniert eigentlich sehr gut, wenn man nur eine Karte einsetzt. Lediglich wenn eine neue Treiberversion auch einen neuen Anzeigenamen vergibt ist DVB.NET verloren – auch diese Situation habe ich schon erlebt. Hier hilft nur, im Geräteprofil die Auswahl des Gerätes zu erneuern.

Grundsätzlich empfehle ich, nach einer Aktualisierung der Gerätetreiber im Adminwerkzeug vorbeizuschauen und die Filter einmal neu auszuwählen – erst verwerfen und dann neu aus der Liste auswählen. Aber wie gesagt: eine vollständige Änderung ist selten und so oft gibt es ja auch keine neuen Treiberversionen.

So, das waren die Grundlagen. Jetzt geht es in den nächsten Kapiteln an die besonderen Spielchen der Hersteller – ich versuche, mich dabei immer auf ein Thema zu beschränken, also lieber einen Artikel mehr als zu viel Text in einem.

Jochen

VCR.NET goes Silverlight?

Nein, nicht wirklich. Aber da ich mich in Silverlight 4 einarbeiten wollte, um einige Konzepte zu verstehen, habe ich mir als lebendes Beispiel VCR.NET ausgesucht. Nutzbar ist das Ergebnis wohl nur in einem sehr engen Rahmen, da es wirklich nur eine technische Studie vor dem Hintergrund eines knappen Zeitbudgets ist. Aber wer mal reinschauen möchte, kann sich die beiden Dateien von hier in sein VCR.NET Installationsverzeichnis kopieren, der Aufruf erfolgt mittels http://localhost/VCR.NET/Silverlight.html – Silverlight 4 muss natürlich lokal installiert sein. Die Quellen sind wie gewohnt öffentlich verfügbar. Die Nutzung erfolgt ohne Gewähr, ich hatte keine Zeit, alle technischen VCR.NET Aspekte bis auf’s Letzte zu prüfen – ich werde den Client jetzt mal für das nutzen, was er kann und evtl. einen Update nachschieben. Die Studie versteht sich als solche und wird nicht Teil der nächsten VCR.NET Version sein.

Hier einfach so ein paar Aspekte des Clients in bunt gewürfelter Reihenfolge – Silverlight, VCR.NET, Technik, …

  • * Ein definiertes Ziel war es, im Oberflächenbereich soviel wie möglich auf XAML zu setzen und so wenig wie möglich Code zu schreiben. Das ist nur zum Teil gelungen, da vor allem die Programmzeitschrift doch einiges an Logik erfordert.
  • * Als nützlich hat sich die gemischte Nutzung von vordefinierten (App.xaml) und programmatischen (App.Resources) Ressourcen erwiesen. Es scheint allerdings etwas kniffeliger zu sein, letztere in der Startphase zur Nutzung in XAML zur Verfügung zu stellen
  • * Bei den Einstellungen habe ich ein wenig mit den Formularmöglichkeiten herumgespielt, etwa mit der Validierungsinfrastruktur oder dem praktischen Label Control.
  • * Grundsätzlich sollte alles für eine einfache Übersetzung in andere Sprachen (Lokalisierung) vorbereitet sein.
  • * Auf Deployment Techniken wie Bibliotheken bin ich bewußt nicht eingegangen.
  • * Einer der zwei wichtigen Aspekte der Studie ist die Programmzeitschrift mit ihren Filtermöglichkeiten. Hier gab es einige Ärgernisse von Silverlight vs. WPF zu ignorieren (in einer ComboBox kann man ohne weiteren Code nicht über Tasteneingaben auswählen) oder zu umgehen (die Gruppierung der Ergebnisliste nach Tag und Stunde – Gruppierungen kennt in Silverlight erst einmal nur das DataGrid). Ganz nett war es zu sehen, wie einfach man aus einem ItemsControl eine Art ListBox machen kann, die ein Auswahlfeedback bietet.
  • * Die Liste der geplanten Aufzeichnungen ist eher langweilig, hier habe ich ein bißchen mit dem DataGrid experimentiert. Ganz interessant ist die Detailanzeige von Mehrkanalaufzeichnungen, die sich auf die Ausawhl einer Aufzeichnung öffnet. Hier sind man genau, welche anderen Aufzeichnungen verhindert oder parallel aufgezeichnet werden.
  • * Meine erste Aktion war der Navigationsknopf zum Blättern, der optisch ein wenig (nicht mehr) hermachen sollte. Er blendet sich auch fast vollständig aus, wenn die Maus nicht gerade auf ihm steht.
  • * Die Animation beim Blättern ist ein reiner Test – vermutlich in der Praxis eher nervig.
  • * Es werden auch die laufenden Aufzeichnungen angezeigt. Hier war aber die Zeit zu Ende und außer genau der Anzeige kann man nicht viel machen.
  • * Im XAML wird an vielen Stellen mit Konvertern (IValueConverter) gearbeitet, vor allem zur Anzeige von Uhrzeiten (VCR.NET verwendet grundsätzlich GMT / UTC und nicht die lokale Zeitzone) oder der Auswahl von Symbolen. Richtig eingesetzt sind Konverter trotz einfachster Codierung offenbar eine starke Waffe zur Unterstützung der Dynamik – man siehe auch diesen Artikel.
  • * Die Trennung zwischen Layout und Inhalt ist sicher noch unzureichend. Zwar habe ich viel auf Styles gesetzt, aber enthalten diese dann doch zum Teil wieder Bezüge zu ihrer Umgebung – unschön, das geht sicher auch professioneller.
  • * Beim Anbindung des SOAP Web Services vom VCR.NET hat es sich als nützlich erwiesen, dass alle generierten Klassen partial sind. So konnte etwa das EPGEvent so erweitert werden, dass neu hinzugefügte Eigenschaften direkt in XAML Bindings referenzierbar sind.

Ok, das war sicher nicht alles, muss aber für jetzt reichen!

Viel Spaß

Jochen

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

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

WPF Evaluation: Ressourcen

Ich stelle mir XAML Ressourcen als eine Art statische Felder vor, die beim Starten der Anwendung automatisch initialisiert werden. Natürlich ist dieses Bild etwas vereinfacht, da es Konzepte wie die hierarchische Sichtbarkeit nicht wirklich wiedergeben kann, aber für einen Einstieg in die Thematik sollte es reichen.

Eine der wohl üblichsten Verwendungsarten von in XAML definierten Ressourcen sind sicherlich Abbildungsvorschriften von Daten auf Oberflächenelementen (e.g. <DataTemplate x:Key=“ShortDescription“>) und Styles (e.g. <Style x:Key=“DescriptionHeader“>), ich fand es im Bereich der Oberflächengestaltung auch recht praktisch, beliebige Strukturen vordefinieren zu können (e.g. <StackPanel x:Key=“LongDescription“>).

Genauso nützlich ist es, globale Instanzen einmalig definieren zu können (e.g. <app:ProgramGuide x:Key=“TheGuide“ />), wobei diese sich oft (wenn die Reihenfolge der Definition es erlaubt) auch gegenseitige referenzieren können (e.g. <app:Filter x:Key=“GuideFilter“ /> und <app:ProgramGuideView x:Key=“GuideView“ GuideFilter=“{StaticResource GuideFilter}“ Source=“{Binding Source={StaticResource TheGuide}, Path=Events, IsAsync=true, Mode=OneTime}“ />).

In der Beispielanwendung werden Ressourcen auch für Zeichenketten wie Formate (e.g <system:String x:Key=“DateTimeFormat“>dd.MM.yyyy HH:mm</system:String>) verwendet, wobei allerdings meiner persönlichen Ansicht nach hier die Grauzone zum Aspekt der Lokalisierung auf die gute alte WinForms Art (.resx) berührt wird. Auch wenn WPF anderen Ideen zur allgemeinen Lokalisierung mit sich bringt, könnte es für diese Fälle (Zeichenketten, die lokalisierbar sein sollten, aber nicht direkt in der Oberfläche erscheinen) eleganter sein, auf RESX und die StaticResource Markup Erweiterung zu setzen.

Als letztes finde ich im Rahmen der Beispielanwendung erwähnenswert, dass auch Felder als XAML Ressourcen angelegt werden können (e.g. <x:Array Type=“system:DateTime“ x:Key=“TimeSelections“> und darin <system:DateTime>00:00</system:DateTime> et al).

Happy Coding

Jochen