Über die automatische Aktualisierung der Senderdaten

Nun haben DVB.NET / VCR.NET ein Feature bekommen, das normale TV Anwendungen (für den digitalen Empfang) schon lange oder sogar schon immer haben: die automatische Aktualisierung der Daten eines Senders. Obwohl es hier um uralte Kamellen geht, scheint es mir doch wert zu sein, einige Worte über die konkrete Implementierung zu verlieren.

Die meisten Anwendungen (so auch DVB.NET / VCR.NET) arbeiten erst einmal mit einer Senderliste. Diese wird durch einen Sendersuchlauf bestimmt und enthält alle Daten zum Empfang und der Darstellungen eines Senders. Die Empfangsdaten umfassen im Wesentlichen (aber nicht nur) die Frequenz (korrekter: die Informationen zum Transponder), auf dem der Sender empfangen werden kann und die Dienstkennung. Die Darstellungsdaten enthalten dann unter anderem die Datenstromkennungen (PID) von Bild und Ton. Nun ist es so, dass sich diese Datenstromkennungen zeitlich ändern können. So gibt es Sender, die zeitweise Tonspuren hinzu- oder wegschalten, ab und zu keinen Videotext senden oder wie die Regionalsender des WDR zeitweise Bild und Ton von anderen Datenströmen beziehen.

Mit den statischen Daten aus dem Sendersuchlauf kommt es dann zu Anzeige(und Aufzeichnungs)problemen. Dies wird durch die automatische Aktualisierung der Senderdaten umgegangen. Technisch wird dabei praktisch ein ständiger Suchlauf aktiviert, der aber im Allgemeinen nur die Senderdaten des gerade angezeigten (aufgezeichneten) Senders berücksichtigt. Damit ein schneller Start oder ein schnelles Umschalten möglich ist, werden erst einmal die Daten der Senderliste verwendet – diese sollten daher die meistens verwendeten und reichhaltigsten (alle Tonspuren) Senderdaten enhalten. Wird im Betrieb eine Veränderung durch den dedizierten Suchlauf erkannt, so wird die Anzeige (Aufzeichnung) entsprechend angepasst. DVB.NET / VCR.NET reagiert dabei nur auf die Änderungen der Datenstromkennungen an sich, nicht aber zum Beispiel auf die Sprachzuordnung der Tonspuren.

Anders als andere Anwendung ist die automatisch Anpassung in DVB.NET / VCR.NET erst einmal grundsätzlich deaktiviert und muss gesondert pro betroffenem Sender aktivtiviert werden. Warum dieser Aufwand? Nun, DVB.NET / VCR.NET kümmern sich erst einmal ausschließlich um Aufzeichnungen von Sendern – lediglich der DVB.NET / VCR.NET Viewer kann zum Betrachten verwendet werden, das ist ein anderes Thema. Bei der Programmierung von Aufzeichnungen und der Planung der Ausführung spielt die Senderliste eine wesentliche Rolle. Bei DVB Hardware mit eingeschränktem Aufzeichnungspotential wie den TechnoTrend Premium Karten kann nur eine begrenzte Zahl von Datenströmen gleichzeitig aufgezeichnet werden – in diesem Falle 8, entsprechend maximal vier Sendern mit je einer Tonspur. Möchte man zusätzlich zur primären Tonspur weitere Datenströme aufzeichnen (alternative MP2 oder AC3 Tonspuren, Videotext), so muss dies bei einer Planung von Mehrkanalaufzeichnungen berücksichtigt werden. Die konkreten Senderdaten zu diesem zukünftigen Zeitpunkt können bei der Programmierung natürlich nicht vorausgesehen werden.

Darüber hinaus habe ich mich bei Aufzeichnungen entschieden, mit dem Wechsel der Senderdaten auch eine neue Aufzeichnungsdatei zu beginnen. Damit ist sichergestellt, dass die Änderungen mit den Anforderungen innerhalb der Transport Stream Aufzeichnungsdatei konform sind – etwa könnte sich die Zeitbasis bei der Umschaltung auf die WDR Lokalzeit ändern. Zudem kann es bei verspätet hinzukommenden Tonspuren Probleme bei der Nachbearbeitung geben. Diese Entscheidung bedeutet aber auch, dass in der Aufzeichnung durch die Unterbrechung eine kleine Lücke von einigen Sekunden entsteht. Zudem ist das Beenden und Neustarten einer Aufzeichnung insbesondere bei Mehrkanalaufzeichnungen nicht unkritisch, da parallele Aufzeichnungen in Mitleidenschaft gezogen werden könnten.

In DVB.NET / VCR.NET ist daher vorgesehen, die automatische Aktualisierung nur auf den Sendern einzuschalten, die diese auch benötigen. Zusätzlich sollten weiterhin alle Senderdaten immer die maximalen Informationen enthalten – egal ob mit oder ohne automatischen Aktualisierung. Insbesondere sollten die maximal verfügbaren Tonspuren aufgeführt sein. Die neue Nachbearbeitungsoptionen des Sendersuchlaufs unterstützen bei der Konfiguration der Senderliste.

Die volle Wahrheit ist allerdings, dass es doch eine Art von Sendern gibt, dür die eine automatische Aktualisierung der Senderdaten immer aktiv ist. Bei einigen PayTV Sendern gibt es die Möglichkeit, spezielle Dienstkanäle anzuschauen (Kinokanäle, Direktkanäle, Near-Video-On-Demand (NVOD), …). Diese sind in der Senderliste gesondert gekennzeichnet und werden dynamisch zugeordnet. Für diesen besonderen Fall machen die Senderdaten nur zu dem Zeitpunkt Sinn, an dem ein Dienstkanal betrachtet (aufgezeichnet) wird.

Man kann es als Faulheit betrachten, aber im Moment ist es einfach so: auch beim reinen Betrachten mit dem DVB.NET / VCR.NET Viewer wird die Konfiguration wie beschrieben verwendet – egal ob die Betrachtung mit einer lokalen DVB Hardware oder als VCR.NET Zapping Client erfolgt. Das heißt, die automatisch Aktualisierung ist bis auf die beschriebenen Ausnahmen erst einmal deaktiviert. Für das reine Betrachten ist es allerdings nie schädlich, die Anpassung ständig aktiv zu haben – maximal ruckelt es kurz in der Anzeige. Naja, es sei denn, der Sender spielt ein wenig mit den Senderdaten herum…

So weit erst einmal dazu

Jochen

Und mal wieder auf der Zielgeraden…

… obwohl da mal wieder einiges in den Kurven herausgeflogen ist, denke ich, dass sich der Release Candidate (Feature Fix) der Version 3.1 von DVB.NET, VCR.NET und dem neuen DVB.NET / VCR.NET Viewer nähert. Ich habe hier lokal auf dem Entwicklungssystem alle wichtigen Punkte nun drin respektive in die oder eine der nächsten Versionen verschoben. Was noch bleibt (und immer etwas dauert) sind Tests, Fixes (auch von schon bekannten Problemen) und diverse Dokumentation (HomePages, VCR.NET, …).

Ich bin aber zuversichtlich, dass bald wieder ein kleiner Meilenstein erreicht ist. Die nächste Phase wird dann vermutlich im Schwerpunkt den Viewer haben, dazu auch die notwendigen Änderungen im DVB.NET. Hauptziel für VCR.NET 3.2 ist die Vorbereitung auf Mehrsprachigkeit sowie das Abrunden einiger mit 3.1 eingeführter Neuerungen. Mein Wunsch ist es, dass VCR.NET 3.2 auf kleiner Flamme gekocht wird und wenig neue Features erhält. Vielleicht ist dann auch die Zeit zur 3.2 nicht so lang!

Puh

Jochen

Visionen vs. Realität, Teil II: Anstossen externer Programme

In VCR.NET 3.1 wird es die Möglichkeit geben, bei bestimmten Vorgängen zusätzlich externe Programme aufzurufen (Aufzeichnung beginnt / endet) oder Vorgänge ganz durch externe Programme zu ersetzen (Übergang in den Schlafzustand). Diese Erweiterung ist erst einmal experimentell. Eine richtige Lösung könnte noch weiter gehen, wie ich gleich an einem Beispiel erläutern möchte (im Forum gibt es dazu eine kurze Diskussion an Hand eines anderen Beispiels). Für 3.1 wird es bei dem einfachen Mechanismus bleiben, der auf der (Beta) Homepage vom VCR.NET Recording Service beschrieben ist. Ich plane allerdings, dass zumindest der Schlafzustand mit dem Ende der externen Programme synchronisiert wird – es wäre ja echt ärgerlich, wenn man gerade ein Demux angestossen hat und VCR.NET in den Schlafzustand übergeht: das kann nicht Sinn der Sache sein.

Ich hätte es am liebsten (das entspricht nicht ganz der Wahrheit, dazu gleich), wenn nach einer Aufzeichnung direkt ein Demux (ProjectX / PVAStrumento) losläuft, da ich alle Aufzeichnungen nachbearbeite. Die Nutzung der aktuellen 3.1 Beta Erweiterung hat einige gravierende Nachteile. Da ist zum einen die Synchronisation mit dem Schlafzustand, das hoffe ich noch in den Griff zu bekommen.

Dann wäre da noch die Möglichkeit, dass sofort eine weitere Aufzeichnung startet. Durch den gleichzeitig lesenden und schreibenen Zugriff auf die Festplatte könnte die Aufzeichnung durch den parallelen Demux Vorgang gestört werden. Eine mögliche Implmentierung in einer zukünftigen VCR.NET Version könnte etwa das externe Programm als eine Art Pseudo-Aufzeichnung einplanen, wobei die Länge empirisch ermittelt wird (ProjectX : xx Sekunden pro 1 GByte Aufzeichnung). VCR.NET könnte dann erkennen, dass eine folgende Aufzeichnung eventuell behindert wird und die Nachbearbeitung nach hinten schieben. Bei Sonderaufzeichnungen (Programmzeitschrift / Sendersuchlauf) wäre dann keine Nachbearbeitung notwendig.

Schön wäre auch zumindest eine Konfiguration pro Aufzeichnung, ob eine bestimmte Nachbearbeitung ausgeführt werden soll oder nicht. Vielleicht möchte ich bei einer 24 Stunden Aufzeichnung von 3SAT Konzerten die Nachbearbeitung doch lieber nach und nach durchführen. Oder ich weiß, dass das Demux bestimmter Sender wegen der hohen Bitrate oder der Vielzahl der Tonspuren besonders lange dauert und möchte die geschätzte Laufzeit überschreiben und und und.

Aber im Kern ist die Vision: pro Aufzeichnung können (wie auch immer VCR.NET bekannt gemachte, aber sicher durch den Anwender erweiterbare) Nachbearbeitungen definiert werden – für alle gibt es auch einen Default an/aus. Die Laufzeit wird dann abhängig von den Parametern (ausser Größe dürfte da nicht viel sein) der Aufzeichnung geschätzt und entsprechend sofort oder verzögert ausgeführt (Pech, wenn die Schätzung zu knapp gehalten ist, das muss natürlich geeignet gemeldet werden). Lustig werden dann Mehrkanalaufzeichnungen et al…

Ach ja, wie versprochen meine wirkliche Demux Vision, die aber für die 3.1 ziemlich sicher nix mehr wird: VCR.NET fungiert als FTP Server und beim Starten der Aufzeichung wird ProjectX parallel auf der Aufzeichnungsdatei gestartet. VCR.NET gauckelt dabei eine sehr große Datei vor, so dass ProjectX zumindest die TS Analyse und den Video Demux während der Aufzeichnung erledigt (die Systembelastung sollte minimal sein, ich habe hier normalerweise 300+ Frames pro Sekunde Demux, als mindestens einen Faktor 10 schnelleren Demux als Aufzeichnung). Ist die Demux Platte dann noch eine andere als die Aufzeichnungsplatte, sind alle folgenden Schritte (Ton, Videotext) in der Laufzeit eigentlich egal, da sie folgende Aufzeichnungen nicht mehr belasten können. Kurz nach dem Ende der Aufzeichnung steht dann alles zum Schneiden und Brennen bereit!

So long

Jochen

Visionen vs. Realität, Teil I: Der Sendersuchlauf

Für den Sendersuchlauf hatte ich mir einige Dinge zur Nachbearbeitung überlegt, die ich aber nur zum Teil bereits in DVB.NET / VCR.NET 3.1 realisieren werde – den Rest spare ich mir dann für die oder eine der nächsten Versionen auf, damit es bald mal wieder einen Release Stand gibt. Ich hoffe aber, dass die vorhandene Implementierung eine gute Basis darstellen und für die wichtigsten Probleme eine ausreichende Lösung bietet.

Die Grundidee war, dass nach einem Sendersuchlauf die neue Senderliste nicht nur einfach das Ergebnis des Suchlaufs ist, sondern eine bereits modifizierte Senderliste adaptieren kann. Bereits mit der aktuellen Version 3.0 gab es einen so genannten Aktualisierungsmodus, der aber nur dafür sorgte, dass Sender, die nur zeitweise empfangen wurden, nicht verloren gehen. So sendet etwa BBC THREE tagsüber nicht, die dann freien Datenströme (PID) für Bild und Ton werden vom Kinderkanal CBBC genutzt, der seinerseits nichts nachts sendet. Ein Suchlauf tagsüber und einer Nachts liefert (diesbezüglich) eine vollständige Senderliste.

Die Implementierung in den 3.1er Versionen wird diesen Mechanismus erweitern. Sie wird allerdings nicht die (bereits vorgesehene) Möglichkeit bieten, Sender aus dem Sendersuchlauf auszublenden, etwa alle verschlüsselten Sender. Damit könnte zum Beispiel die Senderliste (bei mir etwa 2 MB für Astra 1 und Astra 2) deutlich im Umfang reduziert werden. Im Zusammenspiel mit VCR.NET sind allerdings keine unmittelbaren Vorteile zu erwarten, da der Web Client ja bereits einige Filtermöglichkeiten bietet, mit denen die Senderliste zur Auswahl reduziert werden kann. Auch die Konfiguration der Nachbearbeitung (dazu werde ich hoffentlich in Kürze mit der Freigabe der nächsten Beta von DVB.NET 3.1 eine kurze Dokumentation auf der DVB.NET Homepage anbieten können) ist noch wesentlich rudimentärer, als ich es mir gewünscht habe.

Aber mal schauen, vielleicht reicht es für den täglichen Gebrauch ja – richtig lästig ist im Moment nur eine vollständige Aktualisierung der Senderliste, aber das soll hier nicht Thema sein. Vielmehr am Ende kurz einige Beispiele, von dem, was bei mir hier lokal schon möglich ist.

Die Konfiguration arbeitet immer auf einer vorhandenen Senderliste. Man kann für jeden Sender individuell einstellen, welche Detaildaten nach einem Sendersuchlauf erhalten bleiben sollen. Der gesamte Mechanismus greift grundsätzlich nur im erwähnten Aktualisierungsmodus. Wird der Sender gar nicht gefunden, bleibt alles wie gehabt. Wird er gefunden, so würde er in der Version 3.0 gänzlich durch die neu gefundenen Daten ersetzt. Mit dem neuen Mechanismus kann man nun:

  • etwa für KiKa den VideoText PID, der nur tagsüber verwendet wird, fixieren
  • etwa für KiKa den PID und die Sprache der Tonspur fixieren (die Sprache ist nachts undefiniert)
  • etwa für PREMIERE sicherstellen, dass immer beide Tonspuren vorhanden sind
  • die Sprache einer Tonspur festlegen, wenn diese in den SI Tabellen ‚falsch‘ gemeldet wird
  • den Namen eines Sender ändern und fixieren

Naja, so viel mehr Detailinformationen zu einem Sender verwaltet DVB.NET (noch?) nicht. Zusätzlich wird es möglich sein, einen Sender als Regionalsender (konkret: mit variablen PIDs) zu kennzeichnen. Zumindet VCR.NET 3.1 soll die Fähigkeit erhalten, eine solche Veränderung zu erkennen und die Aufzeichnung entsprechend mit zu fahren. Mal schauen…

So, dass soll erst mal reichen

Jochen