Hard-Linking ist die "schwächste" Art von Verknüpfung, um Matroska Dateien virtuell und nahtlos miteinander zu verbinden. Für dieses Verfahren werden die Elemente PrevUID
und NextUID
genutzt. Diese Elemente befinden sich in der Segment/Info Sektion einer Matroska Datei.
Beim Laden einer Matroska Datei muss ein Player diese Elemente untersuchen und prüfen, ob im Element PrevUID
oder NextUID
eine SegmentUID angegeben ist, welche zu einer anderen Matroska Datei gehört, die sich im selben Ordner befinden muss.
Wenn eine reihenfolgentreue Version mit Reihenfolgentreuen Kapiteln verwendet wird, dann muss das Hard-Linking ignoriert werden.
Hard-Linking "Schwach" Test Dateien
Wenn in den Matroska Dateien Kapitel enthalten sind, dann müssen die Kapitelzeiten für die Kapitelmarker angepasst/verschoben werden. Es werden nur die Startzeiten der Kapitel verwendet.
Welche Kapitel, aus welcher Version sollten verwendet werden?
Es kann vorkommen, dass mehrere Versionen in der geöffneten Datei vorhanden sind. Wie schon erwähnt darf die Version nicht reihenfolgentreu sein. Sagen wir mal die 2.Version muss vom Player verwendet werden. Dann sollte der Player auch aus allen verknüpften Dateien die 2.Version benutzen. Falls es aber keine 2.Version in einer der verknüpften Dateien gibt, dann werden auch keine Kapitelmarker für diese Datei erstellt.
Wie und welche Kapitel von den verknüpften Dateien genutzt werden, handhaben die aktuellen Player sehr unterschiedlich. Der LAV-Splitter zum Beispiel nutzt immer die 1.Version aus den verknüpften Dateien. Gibt es eine Version mit dem EditionFlagDefault
Element, dann werden die Kapitel dieser Version verwendet.
Die erste Test Datei hat 2 Versionen und die 2. ist die Standard Version. Ebenso hat die zweite und letzte Test Datei 2 Versionen, aber keine ist als Standard defniert. Die anderen Test Dateien haben nur eine Version.
Hard-Linking mehrere Versionen Test Dateien
Die Matroska Specs besagen, dass die 1. Matroska Datei keine PrevUID
haben darf und die letzte Matroska Datei darf keine NextUID
haben. Alle "zwischen liegenden" Dateien müssen beide Elemente verwenden.
Dadurch wird sichergestellt, dass egal welche Datei man im Player öffnet, der gesamte Inhalt aller verknüpften Dateien abgespielt wird.
Zu beachten ist, dass man keine Endlos-Schleifen Verknüpfung erzeugen darf/sollte. Theoretisch könnte ein Player das erkennen, und beim Einlesen der Daten abbrechen, wenn die verknüpfte Datei schon einmal in die virtuelle Zeitleiste aufgenommen wurde.
Hard-Linking Specs Test Dateien
Zuerst einmal ein paar Überlegungen zum System Hard-Linking.
Ein Player untersucht die Matroska Datei und findet dabei ein PrevUID
Element mit einer SegmentUID. Das führt dazu, dass eine "Rückwärts Suche" gestartet werden muss. Weiterhin muss das NextUID
Element untersucht werden, wodurch dann eine "Vorwärts Suche" gestartet werden muss.
Zuerst sucht der Player nach dieser Datei im Ordner. Wenn die Datei vorhanden ist, wird wiederum das PrevUID
Element untersucht, aber NICHT das NextUID
Element. Dies wiederholt sich solange bis die "erste" Matroska Datei erreicht ist, bei der es keine PrevUID
gibt, oder die zuverlinkende Datei nicht vorhanden ist.
Der Vorgang ist ähnlich wie bei der "Rückwärts Suche". Allerdings muss immer das NextUID
Element untersucht werden.
Es ist möglich(und sehr leicht) mit Hard-Linking eine Endlosschleife zu erzeugen. Dazu verlinkt man einfach eine Datei die bereits in der entsprechenden Suchrichtung enthalten ist.
Hard-Linking mit Endlosschleife Test Dateien
Alle Player die ich getestet habe, scheinen nach diesem Prinzip zu arbeiten. Daher habe ich mir weitere Hard-Linking Möglichkeiten einfallen lassen. In meinem chapterEditor Projekt kann man sehr bequem diese verschiedenen Varianten einrichten.
Ein Player wird somit immer nur in der Lage sein eine "Vorwärts Suche" zu starten. Nur wenn man die erste Matroska Datei öffnet, wird der gesamte Inhalt aller verknüpften Dateien abgespielt.
Zum Beispiel für eine Serie, bei der jede Folge als erstes, immer den gleichen Vorspann hat, und anschließend einen Rückblick. Vorspann, Rückblick und der Episodenteil liegen separat als Matroska Datei vor. Möchte man die komplette Folge sehen, dann startet man die Vorspann-Datei. Möchte man keinen Vorspann sehen aber den Rückblick, dann startet man die Rückblick-Datei. Und möchte man nur den Episodenteil sehen, dann eben diese Datei starten.
Hard-Linking NextUID Test Dateien
Ein Player wird somit immer nur in der Lage sein eine "Rückwärst Suche" zu starten. Nur wenn man die letzte Matroska Datei öffnet, wird der gesamte Inhalt aller verknüpften Dateien abgespielt.
Nutzen wir wieder unser Serien Beispiel, nur das wir diesmal einen Episodenteil und einen Abspann als separate Dateien haben. Wenn man die Abspann Datei startet, dann wird die gesamte Folge abgespielt. Startet man nur die Episodenteil-Datei, dann wird die Abspann Datei nicht verwendet.
Hard-Linking PrevUID Test Dateien
Die folgenden drei Varianten nutzen auf sehr unterschiedliche Weise diese beiden Matroska Elemente. Es kommt dabei vor, dass eine Datei selbst keines der beiden Elemente nutzt, aber dennoch Bestandteil der Verknüpfungskette ist. Diese Varianten sind sehr hilfreich für Serien, bei denen die Folgen immer den gleichen Vor- und/oder Abspann haben.
Es gibt nur eine Vorspann Datei und viele weitere Episoden Dateien. Jede Episoden Datei nutzt die PrevUID
, um die Vorspann Datei zu verknüpfen. Die Vorspann Datei nutzt keine Verknüpfungen und wird daher immer nur alleine abgespielt. Man könnte natürlich eine NextUID
zuweisen, aber eben nur zu einer Episoden Datei.
Hard-Linking Serien-Vorspann Test Dateien
Es gibt nur eine Abspann Datei und viele weitere Episoden Dateien. Jede Episoden Datei nutzt die NextUID
, um die Abspann Datei zu verknüpfen. Die Abspann Datei nutzt keine Verknüpfungen und wird daher immer nur alleine abgespielt. Man könnte natürlich eine PrevUID
zuweisen, aber eben nur zu einer Episoden Datei.
Hard-Linking Serien-Abspann Test Dateien
Bei dieser Variante gibt es eine Vorspann und eine Abspann Datei, sowie auch weitere Episoden Dateien. Jede Episoden Datei nutzt die NextUID
, um die Abspann Datei zu verknüpfen. Jede Episoden Datei nutzt die PrevUID
, um die Vorspann Datei zu verknüpfen. Die Vor- und Abspann Datei haben keine Verknüpfungen und werden daher immer nur alleine abgespielt.
Hard-Linking Serien-Vorspann-Abspann Test Dateien
Die Test Dateien wurden mit mkvmerge aus einer "großen" Datei aufgeteilt. Mkvmerge kann nur an den Schlüsselbildern "schneiden". Weiterhin unterliegt Matroska einer Beschränkung, was dass Speichern der Audio Daten angeht. Daher ist bei sehr vielen Matroska Dateien die längste Spur-Spieldauer, die einer Audiospur.
Fast alle Player die ich getestet habe verknüpfen die Matroska Dateien so, dass alle Daten bis zum Ende verwendet werden. Das führt aber dazu, dass das Video dann "hängen" bleibt. Nur der Lav-Splitter (und Haali-Splitter) arbeiten hier besser. Ich kann es nicht genau bestätigen, aber es werden anscheinden nur solange Daten von einer Datei verwendet, solange es auch Videodaten gibt.
Das Matroska Dateien nicht richtig miteinander verknüpft sind, sieht man in den Playern sehr gut an der gesamt Spieldauer. Diese war dann immer ein paar Sekunden zu hoch. Die Test Dateien sind aber sehr gut "geschnitten", denn auch VLC kann die richtig abspielen(allerdings funktioniert die Zeitleiste nicht richtig ->VLC.bug).
Ich hatte vor einiger Zeit bereits Test Dateien für VLC mal hochgeladen. Bei diesen Dateien sind die Audiodaten länger als die Videodaten und daher "hängt" das Bild immer ein wenig.