Der MediaManager [Vos93] stellt eine Erweiterung des XFantasy-UITs um Konzepte und Techniken zur gemeinsamen Darstellung und Verarbeitung diskreter und kontinuierlicher Medientypen dar. Schwerpunktmäßig werden durch den MediaManager die folgenden Aspekte der Integration von Multimedialität in User-Interface Toolkits behandelt:
In Kapitel 2.4.2 wurden die Beziehungen zwischen
Medienobjekten beschrieben, die das Zusammenspiel der Objekte
während einer multimedialen Präsentation festlegen. Sie können
zeitlicher, gestalterischer oder konfigureller Art sein. Eine
Teilmenge der gestalterischen Beziehungen bilden räumliche
Beziehungen.
Die Definition derartiger Beziehungen wird dabei als
zeitliche, gestalterische, räumliche bzw. konfigurelle Komposition
bezeichnet (siehe auch [VM93]
).
Mechanismen zur Definition zeitlicher Beziehungen zwischen verschiedenen Medienobjekten bietet das Kommando-Modell (siehe Abschnitt 7.1.2).
Die räumliche Komposition dient der Anordnung visueller Ausgaben auf dem Bildschirm. Sie wird für zweidimensionale Ausgaben durch das XFantasy-UIT unter anderem über den Constraint-Mechanismus ermöglicht. Durch die Definition einer abstrakten Medienschnittstelle (siehe Unterabschnitt 7.1.3.3) erweitert der MediaManager die räumliche Komposition in Bezug auf kontinuierliche Medien. Sie ist allerdings nur zeitunabhängig einsetzbar. Eine zeitabhängige räumliche Komposition, wie sie beispielsweise für Animationen notwendig ist, wird nicht unterstützt. Mechanismen zur Definition allgemeiner gestalterischer Beziehungen sind im XFantasy-UIT nicht vorgesehen.
Der MediaManager betrachtet Medienobjekte als Kompositionen aus Source-, Filter- und Sink-Objekten. Er ermöglicht eine konfigurelle Komposition zwischen diesen Teilobjekten, indem Datenflußpfade, sogenannte Medienkanäle, zwischen ihnen definiert werden können.
Während die temporale Komposition die Modellierung zeitlicher Abhängigkeiten zwischen mehreren Medienobjekten ermöglicht, dient die Mediensynchronisation der Umsetzung dieser Modellierung zur Laufzeit. Der MediaManager realisiert dabei sowohl die diskrete als auch die kontinuierliche Synchronisation. Bei der diskreten Synchronisation werden mehrere Datenströme an bestimmten festen Synchronisationspunkten, wie Start oder Ende, synchronisiert. Probleme stellen hierbei die unterschiedlichen Initialisierungszeiten der Medienobjekte dar. Bei der kontinuierlichen Synchronisation findet eine periodische Überwachung der zeitlichen Zusammenhänge zwischen mehreren Objekten statt, beispielsweise bei einer lippensynchronen Wiedergabe eines Videos und eines dazugehörenden Audios. Hauptproblem hierbei sind Schwankungen bei der Prozessorzuteilung der einzelnen Datenströme (siehe auch Unterabschnitt 7.1.3.4).
Der MediaManager ist durch die Integration neuer Klassen in das XFantasy-UIT (neue abstrakte Basisklassen, abgeleitete Klassen) realisiert worden, wie Abbildung 7.6 verdeutlicht. Die abstrakten Basisklassen sind in der Abbildung durch einen dunkleren Hintergrund gekennzeichnet. Insbesondere objektorientierte Klassenhierarchien sind zur Medienabstraktion hervorragend geeignet. Zum einen ermöglichen sie die Definition gemeinsamer Schnittstellen in abstrakten Klassen, zum anderen unterstützen sie eine Kapselung medien- bzw. hardwareabhängiger Eigenschaften in von den abstrakten Klassen abgeleiteten Klassen.
Abbildung 7.6: Ausschnitt aus der Klassenhierarchie
des MediaManagers
Multimediale Anwendungen sind im allgemeinen dadurch gekennzeichnet, daß mehrere Datenströme gleichzeitig verarbeitet werden. Im MediaManager wird daher jeder Datenstrom durch einen eigenständigen sogenannten Lightweight-Prozeß verarbeitet. Diese Lightweight-Prozesse arbeiten alle quasi-parallel im selben Adreßraum eines UNIX-Prozesses. Ihre verzahnte Ausführung wird durch einen Scheduler gesteuert. Im MediaManager kann zwischen zwei Typen von Schedulern gewählt werden. Der nicht-entziehende (non-preemptive) Scheduler ordnet alle Prozesse in eine Liste ein. Die Prozesse werden reihum aktiviert, bestimmen aber selber, wie lange sie aktiv sind. Ein Problem kann hierbei in Bezug auf die kontinuierliche Synchronisation entstehen, wenn ein Prozeß zu lange aktiv bleibt. Dieses Problem wird durch den entziehenden (preemptive) Scheduler dadurch gelöst, daß ein aktiver Prozeß nach einer bestimmten Zeitspanne automatisch deaktiviert wird (Time-Slice-Verfahren).
Als konkrete kontinuierliche Medientypen werden durch den MediaManager Audio und Video in das XFantasy-UIT integriert. Audio- und Videodaten können dabei alternativ über eine Dateischnittstelle oder auch live eingegeben werden. Die Ausgabe kann in eine Datei oder auf den Bildschirm bzw. über den Lautsprecher erfolgen.
Von der Klasse FSource ist die Klasse FTimer abgeleitet. Timer-Objekte sind Source-Objekte, welche für die Dauer eines angegebenen Zeitintervalls einen (virtuellen) Datenstrom generieren. Mit Hilfe von Timer-Objekten können verzögernde Komponenten simuliert werden.