Studienarbeit Oliver Buschjost
Transcription
Studienarbeit Oliver Buschjost
Fakultät für Elektrotechnik, Informatik und Mathematik Institut für Informatik Fachgebiet Didaktik der Informatik Markierungs- und Schnittwerkzeug zur videounterstützten Analyse von Kommunikationsszenarien Machbarkeitsstudie, Konzeption und prototypische Umsetzung Studienarbeit zur Erlangung des Grades Bachelor of Computer Science vorgelegt von cand. Dipl.-Inform. Oliver Buschjost Grevestr. 3 33098 Paderborn Matr.Nr. 6147229 Betreuer Prof. Dr. phil. Johann S. Magenheim Prof. Dr. Hans Kleine Büning 15. November 2006 Eidesstattliche Erklärung Hiermit versichere ich, die vorliegende Studienarbeit ohne Hilfe Dritter und nur mit den angegebenen Quellen und Hilfsmitteln angefertigt zu haben. Alle Stellen, die aus den Quellen entnommen wurden, sind als solche kenntlich gemacht worden. Diese Arbeit hat in gleicher oder ähnlicher Form noch keiner Prüfungsbehörde vorgelegen. Paderborn, den 15. November 2006 .............................. Oliver Buschjost Zusammenfassung Oft gibt es unterschiedliche Sichtweisen auf komplexe Situationen; wahrgenommen wird jedoch nur die eigene und damit höchst subjektive Sicht. Für die objektive Evaluation von Unterrichtssituationen kann die parallele Wiedergabe der Handlung aus verschiedenen Perspektiven aufschlussreich sein. Dieses Review erlaubt die verbesserte Vermittlung des Unterrichtsstoffs. Die vorliegende Arbeit untersucht Technologien für Videoschnitt, -kompression und -streaming im Rahmen der prototypischen Umsetzung eines solchen Werkzeugs. Zweck der Anwendung ist die Annotation relevanter Videosequenzen. Diese werden anschließend, zur besseren Analyse, aus dem Gesamt-Video extrahiert und speziell aufbereitet. Nach der Analyse einer bestehenden Anwendung werden Konzepte zur Realisierung erarbeitet und auf ihre Umsetzbarkeit hin untersucht. Die Implementierung stützt sich dabei unter anderem auf folgende Techniken: Frameserver, H.264Videokompression, RTSP-Streaming, SMIL, DirectShow und Scriptsprachen innerhalb einer in C# programmierten .NET Anwendung. Inhaltsverzeichnis 1 Einleitung 1 1.1 Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Vorgehensweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Die vorhandene Anwendung 5 2.1 Szenario der Nutzung durch Anwender . . . . . . . . . . . . . . . . 5 2.2 Probleme und Einschränkungen . . . . . . . . . . . . . . . . . . . . 6 3 Die neuen Konzepte 9 3.1 Die Ziele des neuen Konzeptes 3.2 Videostreaming-Technologien . . . . . . . . . . . . . . . . . . . . . 10 3.3 3.4 4.2 9 3.2.1 Microsoft Windows Media . . . . . . . . . . . . . . . . . . . 10 3.2.2 Realmedia-Format . . . . . . . . . . . . . . . . . . . . . . . 10 3.2.3 MPEG4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Konzept mit Videostreaming für Markierung . . . . . . . . . . . . 12 3.3.1 JAVA-Anwendung . . . . . . . . . . . . . . . . . . . . . . . 12 3.3.2 Webbasierte Anwendung . . . . . . . . . . . . . . . . . . . . 13 3.3.3 Windows-Anwendung mit DirectShow . . . . . . . . . . . . 14 3.3.4 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Konzept mit Netzwerkdateisystem für Markierung . . . . . . . . . 15 3.4.1 Videoschnitt . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4.2 Fazit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4 Die Realisierung 4.1 . . . . . . . . . . . . . . . . . . . . 19 Details der Umsetzung . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.1.1 Synchronisations-Tool . . . . . . . . . . . . . . . . . . . . . 20 4.1.2 Annotations-Tool . . . . . . . . . . . . . . . . . . . . . . . . 20 4.1.3 Videoschnitt-Dienst . . . . . . . . . . . . . . . . . . . . . . 23 Verwendete Technologien . . . . . . . . . . . . . . . . . . . . . . . 24 4.2.1 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.2.2 Microsoft DirectShow . . . . . . . . . . . . . . . . . . . . . 28 4.2.3 SMIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.2.4 AviSynth . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2.5 VirtualDubMod . . . . . . . . . . . . . . . . . . . . . . . . 33 v vi Inhaltsverzeichnis 4.3 4.2.6 FAAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.7 x264 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2.8 GPAC MP4Box . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2.9 NetSpell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Verknüpfung der externen Tools im Konvertierungslauf . . . . . . . 36 5 Zusammenfassung und Ausblick 5.1 Erweiterungs- und Optimierungsmöglichkeiten Abbildungsverzeichnis Listings Literaturverzeichnis 39 . . . . . . . . . . . 39 I III V 1 Einleitung An der Universität Paderborn findet im Rahmen der Lehrerausbildung das Seminar Methoden des Informatikunterrichts in Theorie und Praxis statt. Ziel dieses Seminars ist es, den angehenden Lehrern das notwendige Wissen zur Planung und Durchführung ihres Unterrichts zu vermitteln. Ein wichtiger Teil dieses Seminars ist die praktische Durchführung einer Unterrichtseinheit mit einer anschließenden ausführlichen Analyse. In der Lehre ist es wichtig, sich seines Verhaltens und der dadurch bei den Schülern hervorgerufenen Reaktionen und Emotionen bewusst zu sein und dieses auch gezielt einsetzen zu können. Der Lehrer steht, als für den Schüler exponierte Persönlichkeit und Vorbild, unter ständiger Beobachtung durch die Klasse. In der klassischen Lehrerausbildung wird diese Unterrichtssituation geübt unter Aufsicht des eigenen Lehrers, evtl. des normalerweise für diese Stunde vorgesehenen Lehrers und am Ende durch Prüfer. In diesem Szenario hat man selber nur eine sehr beschränkte und vor allem subjektive Sicht: die Reaktionen der Schüler sieht man nur eingeschränkt (vor allem in Phasen des Tafelanschriebs, während des Auf- oder Umbaus von Unterrichtsmaterialien oder der Konzentration auf ein Schülergespräch) und das eigene Verhalten bekommt man nur aus der Ich-Perspektive zu sehen. Durch dieses stark eingeschränkte Blickfeld fällt die Selbstbeurteilung ziemlich schwer und das Schülerverhalten ist unter Umständen nicht direkt erklärbar. Mit diesem Problembereich beschäftigt sich das Projekt Visualization of Lear- ning and Teaching Strategies with Multimedia in Teacher Education, kurz ViLM[Mag99]. Im Rahmen dieses Projektes, welches den Einsatz von Multimedia in der Lehre fördern will, wird seit 1998 erfolgreich das gleichnamige Tool ViLM eingesetzt, um den angehenden Lehrern eine bessere Selbsteinschätzung zu geben, eine ausführliche Review-Phase zu ermöglichen und eine Basis zu schaffen, um unter den Lehramtsstudenten eine Diskussion über bestimmte interessante oder kritische Situationen zu führen. Die Durchführung dieser entsprechenden Unterrichtseinheiten und die Nachbereitung, was selbstverständlich nur mit Einwilligung der betroffenen Schüler unter Schutz ihrer Persönlichkeitsrechte und Beachtung der relevanten Datenschutzauflagen erfolgt, läuft nach einem festen Schema ab, dessen Kern die Aufnahme des 1 2 Einleitung Unterrichtsgeschehens aus den zwei Hauptperspektiven darstellt: der Sicht der Schüler auf den Lehrer sowie der Sicht des Lehrers auf die Schüler. In der Nachbereitung des Unterrichts befasst sich der angehende Lehrer intensiv mit den Aufzeichnungen, was durch verschiedene Faktoren erschwert wird. Eine Ansicht der Perspektiven nacheinander ist wenig sinnvoll und ein gleichzeitiges Betrachten auf zwei nebeneinander stehenden Fernsehgeräten unpraktisch. Vor allem, da die beiden Videos durch das Aufstellen der Kameras und den Start der Aufnahmen nicht synchron zueinander laufen. Dies ließe sich zwar bei dem Start der Wiedergabe korrigieren, aber spätestens beim Spulen im Film ginge die Synchronisation wieder verloren. Oft sind auch nur Teile des gesamten Videomaterials für die Auswertung wirklich relevant. Hier kommt nun das Tool ViLM ins Spiel, welches den synchronen Zugriff auf beide Perspektiven ebenso ermöglicht, wie direkt einzelne Phasen zu markieren und mit weiterführenden Informationen sowie den verwendeten Unterrichtsmaterialien anzureichern. Anlass für diese Arbeit waren Probleme bei dem Einsatz des bestehenden ViLM Tools sowie neue Anforderungen. So sind zur Zeit die aufbereiteten Daten nach dem Export in HTML nicht mehr nutzbar und das Tool benötigt eine ganz spezielle Umgebung, um lauffähig zu sein. Neue Anforderungen sind unter anderem der automatische Schnitt der Videodaten in einzelne Phasen und die Möglichkeit der Verbreitung von ausgesuchten Inhalten über das World Wide Web. 1.1 Aufbau der Arbeit Die Arbeit ist in vier Teile gegliedert. An ihrem Anfang steht die Analyse der Ist-Situation inklusive Erläuterung der Nutzung. Es folgt ein großer Teil, der das Ziel der Entwicklung beschreibt und die diesem Ziel im Weg stehenden Probleme. In diesem Teil wird auch die Abänderung des Konzeptes hin zu einem Realisierbaren Konzept beschrieben. Der dritte Teil befasst sich mit der Realisierung und den dabei eingesetzten Technologien. Zum Schluss gibt es einen Ausblick über Erweiterungsmöglichkeiten der realisierten Lösung. 1.2 Vorgehensweise Einarbeitung. Die Einarbeitungsphase umfasst die Erarbeitung der für die Erstellung der Arbeit notwendigen theoretischen und praktischen Grundlagen. Die hierfür nötigen Informationen wurden durch Literaturrecherche zusammengetragen und durch die Analyse der vorhandenen Anwendung und Arbeitsabläufe erworben. Kapitel 1 • Vorgehensweise Problemanalyse. Bei der Problemanalyse wurde mit den Verantwortlichen über die bestehende Anwendung und die Probleme im Praxiseinsatz gesprochen. Konzeption. Bei der Konzeption wurde nun aufbauend aus den Informationen der Problemanalyse, neuen Anforderungen und Wünschen ein Ideal-Konzept entwickelt. Dieses saubere, universelle Konzept erwies sich bei genauer Analyse der möglichen Technologien als nicht umsetzbar und wurde nun in einem iterativen Prozess unter Einbeziehung der Verantwortlichen in ein umsetzbares Konzept abgewandelt, das genügend Vorteile im Vergleich zur bestehenden Lösung bietet und modern und gut erweiterbar ist. Ein großer Teil der Informationen entstammt den technischen Handbüchern der untersuchten Technologien. Umsetzung. In dieser Phase wurde die praktische Umsetzung des Konzeptes vorgenommen inklusive Installation und Inbetriebnahme in der Zielumgebung im Netz der Universität Paderborn. Dabei wurde auch darauf geachtet, unnötige Dinge nicht erneu implementieren zu müssen, sondern bestehende Komponenten und Technologien wiederzuverwenden. 3 4 Einleitung 2 Die vorhandene Anwendung Die vorhandene Anwendung für die Auswertung von Unterrichtsszenarien entstand im Rahmen des ViLM Projektes seit 1998. Sie dient der multimedialen Evaluation in der universitären Lehrerausbildung. Die Anwendung wurde zur Erzielung von Plattformunabhängigkeit in der Programmiersprache JAVA verfasst und nutzt XML zur Speicherung der Annotationen. Es besteht zusätzlich die Möglichkeit, weitere Unterrichts-Materialen (z.B. PDF-Dokumente, Bilder, Videos) in das Projekt einzufügen. Nach der Arbeit ist eine Aufbereitung der Daten als Web-Seite mit eingebetteten Videos und Download der zusätzlichen Materialien möglich. Die Herangehensweise an die Problemstellung und das aktuelle Bedienkonzept1 der Software hat sich in der Praxis in der Lehre der Arbeitsgruppe Didaktik der Informatik2 an der Universität Paderborn bewährt. Allerdings ist die dem Werkzeug zugrunde liegende Technik nicht mehr auf dem neusten Stand und es weist auch ein paar Mängel im Software-Design auf. Dies führt zu (mittlerweile sehr deutlichen) Einschränkungen in der Effizienz und der Benutzbarkeit des Werkzeugs, welche eine Neuentwicklung notwendig machen. 2.1 Szenario der Nutzung durch Anwender Als Erstes finden die üblichen Unterrichtsvorbereitungen statt. Zusätzlich gibt es nun allerdings noch ein paar weitere Dinge zu erledigen. Da die Aufnahmen in verschiedenen Unterrichtsräumen stattfinden, muss vor dem Unterricht für eine passende Positionierung der Kameras gesorgt werden. Hier ist es wichtig darauf zu achten, dass alle relevanten Inhalte im Bild sind, die Kameras gleichzeitig aber nicht zu stark auffallen oder gar das Unterrichtsgeschehen irgendwie behindern. Des Weiteren ist die Akustik nicht immer optimal, so dass die Kameras unter Umständen mit speziellen Mikrofonen ausgestattet werden müssen, um das Geschehen einfangen zu können. Es gibt während des Unterrichts Personal an den Kameras, sodass die einmal gewählten Perspektiven auch in Hinsicht auf die Nutzung weiterer Materialien wie z.B. Overhead-Projektoren oder Beamern anzupassen sind. Eine weitere wichtige Einschränkung ist, dass sich das Blick1 Es fanden mehrfach Überarbeitungen der Benutzeroberfläche statt, nachdem sich die ursprüngliche Version als nicht praxistauglich erwies. 2 URL: http://ddi.uni-paderborn.de/ 5 6 Die vorhandene Anwendung feld der Kameras zwingend überschneiden muss. Diese Vorraussetzung ist Folge von dem Wunsch zur Synchronisation der Videos. In der Praxis wird mit einer der Nachbildung der vom Film bekannten Klappe durch die menschlichen Arme gearbeitet. Nach dem Unterrichtsende werden die Videodaten von den Betreuern in das MPEG-1-Format konvertiert und auf einem Server des Lehrstuhls bereitgestellt. Die Studierenden synchronisieren nun das Video und fügen die Annotationen und Materialien hinzu, wobei bei einem neuen Annotationsprojekt die Synchronisation erneut durchgeführt werden muss. Am Ende des Aufbereitungsprozesses steht der Export der Daten in HTML mit eingebetteten Videos, um eine einfache Präsentation der Inhalte auch ohne das ViLM-Tool zu ermöglichen. Die Besprechung der Stunde erfolgt wahlweise unter Zuhilfenahme des Exports oder direkt im ViLM-Tool. 2.2 Probleme und Einschränkungen Das bestehende Werkzeug kann nur MPEG-13 Video-Daten mit entsprechenden Einschränkungen bei der Bildqualität im Vergleich zu modernen Kompressionsverfahren (bei identischem Bandbreitenbedarf) verarbeiten. Die zu verarbeitenden Videos sind vom Tool auf eine Bildauflösung von 320x240 Pixeln beschränkt und der Anwender arbeitet mit der Anwendung in einer festen Fenstergröße. Eine Nutzung großer, hochaufgelöster Bildschirme bringt also keinen Vorteil für den Anwender. Die aktuell in der Evaluation der Lehre eingesetzten Kameras liefern bereits MPEG-2-Daten4 in entsprechend besserer Qualität (und auch Auflösung). Dies führt dazu, dass die anfallenden Videodaten einen zeitaufwendigen und verlustbehafteten Konvertierungslauf in ein veraltetes Format benötigen, bevor mit der Annotation begonnen werden kann. Obwohl in JAVA entwickelt, ist das in Abbildung 2.1 dargestellte Werkzeug defacto nur unter Windows und in einer ganz speziellen Umgebung lauffähig: Es ziehen sich fest-kodierte Pfade durch die komplette Anwendung, Konfigurationsund Datendateien sowie den HTML-Export: Eine Ausführung ist nur möglich, wenn die Anwendung aus dem Ordner S:\vilm\ gestartet wird. Dies stellt eine gravierende Einschränkung der Nutzbarkeit dar. Des Weiteren muss zur Nutzung der JAVA-Anwendung auch das Performance Pack des JAVA Media Frame- work (JMF) unter Windows installiert sein. Die Installation kann nur ein Administrator vornehmen. Eine korrekte Auslieferung der HTML-Exporte über einen Webserver ist aufgrund der oben angesprochenen Pfadangaben nicht möglich. Ein 3 4 ISO-Standard: ISO/IEC 11172-2:1993 ISO-Standard: ISO/IEC 13818-5:2005 Kapitel 2 • Probleme und Einschränkungen Abbildung 2.1: Aktuelle ViLM Anwendung (mit Fehlermeldung beim Öffnen von Materialien) weiteres Hindernis dafür ist die Art der Referenzierung der Videos: die eingebetteten Videoplayer im HTML-Export verlinken direkt auf die kompletten mehrere hundert Megabyte großen Videodateien. Ein weiteres Problem entwickelte sich durch Änderungen an dem im HTMLExport benutzen Active-X-Control des Microsoft Windows Media-Players: seit den letzten Sicherheitsupdates ist ein doppeltes Einbinden5 in eine HTML-Seite nicht mehr möglich, wodurch die HTML-Exporte nun unbrauchbar sind, da sogar in der Zielumgebung eine Nutzung nicht mehr möglich ist. In Abbildung 2.2 ist so ein aktueller HTML-Export zu sehen. Als letztes Problem sei genannt, dass die Implementation bezüglich der angehängten Materialien sehr wählerisch ist (es ist nicht möglich, so populäre Dateiformate wie PDF, RTF oder GIF zu nutzen). Es treten auch Stabilitätsprobleme beim Verarbeiten der eigenen Daten auf, die sich dadurch äußern, dass die gespeicherten Annotationen nicht wieder gelesen werden können. An der Anwendung wurden bereits mehrfach Veränderungen vorgenommen, um die Benutzeroberfläche für eine intuitive Bedienbarkeit weiterzuentwickeln. Dabei wurde die Erfahrung gemacht, dass sich der Code nicht gut warten und erweitern lässt. Aufgrund der gravierenden Probleme, der Erfahrungen aus vorherigen 5 für die zwei parallelen Sichtweisen auf das Unterrichtsgeschehen 7 8 Die vorhandene Anwendung Abbildung 2.2: Aktueller HTML-Export Änderungen und nach einer Analyse des vorhandenen Source-Codess erschien der Aufwand für eine Weiterentwicklung des vorhandenen Tools unangemessen hoch. Aus diesen Gründen fiel die Enscheidung für eine Neuentwicklung des ViLMTools und es wurde mit der Analyse der Anforderungen an ein neues System begonnen. 3 Die neuen Konzepte 3.1 Die Ziele des neuen Konzeptes Die neue Umsetzung soll das Werkzeug nicht nur technologisch auf den aktuellen Stand der Technik bringen und für den Anwender die Ergonomie bei der Benutzung verbessern, sondern auch neue Funktionalität und (sofern realisierbar) eine weitgehende Plattformunabhängigkeit von dem System des Anwenders bieten. Die Idee des neuen Konzeptes ist, einen zentralen Steaming-Server zu benutzen, der die Video-Daten sowohl einem Markierungs-Werkzeug als auch später den Endanwendern im Web-Browser zur Verfügung stellt. Bei der Umsetzung soll bevorzugt auf frei verfügbare Technologien ohne große Lizenzkosten gesetzt werden und natürlich auch eine einfache Bedienbarkeit für die Anwender im Vordergrund stehen. Video-Streaming Um die Daten für diesen Anwendungsfall korrekt übermitteln zu können, müssen die Videodaten zusammen mit den Audiodaten multiplexed1 werden. Streaming wird oft nur verwendet, um Videodaten seriell wiederzugeben. Es soll auch bei der Markierung auf den Streaming-Server zugegriffen werden, damit der Benutzer vor der Nutzung des Tools keine entfernten Netzwerklaufwerke mounten muss. Dadurch wird in diesem Szenario bei der Markierung allerdings jederzeit Zugriff auf beliebige Positionen (Zeitpunkte) im Stream benötigt. Die Notwendigkeit ergibt sich daraus, dass der Anwender bei der Markierung schnell bestimmte Positionen im Datenstrom anspringen möchte und nicht seriell (auch nicht mit erhöhter Geschwindigkeit) die komplette Aufnahme ansehen. Der Zugriff wird außerdem bei der Wiedergabe der geschnittenen Videos benötigt, wenn dies nur virtuell on-the-fly2 geschehen soll. Aus diesem Grund ist es zusätzlich notwendig, in der Datei regelmäßig Zeitstempel zu setzen, um einen Zugriff auf genaue Positionen zu realisieren. Es spezifizieren bereits mehrere Steaming-Formate dieses notwendige Feature und es sind bereits Steaming-Server verfügbar, die dieses implementieren. 1 Blockweise Verschachtelung von Video- und Audiodaten, damit diese quasi gleichzeitig zur Verfügung stehen. 2 Dieses Vortäuschen des Schneidens während der Wiedergabe erspart Festplattenplatz und reduziert den Zeit- und Rechenaufwand vor der Veröffentlichung. Es soll für den Anwender transparent erscheinen, als ob ein entsprechend geschnittener Film vorliegt. 9 10 Die neuen Konzepte On-the-fly Selektion der markierten Inhalte aus dem kompletten VideoDatenstrom Markierung der Video-Daten Plattformunabhängig Firewall Streaming Video-Kodierung für Streaming Streaming Wiedergabe der aufbereiteten Inhalte Internet Plattformunabhängig MPEG-2 Streaming-Server Abbildung 3.1: Ziel-Architektur des neuen Systems 3.2 Videostreaming-Technologien Als Erstes werden die unterschiedlichen Möglichkeiten für Videostreaming mit ihren Vor- und Nachteilen betrachtet. Dabei sind sowohl die Erstellung bzw. Aufbereitung des Videomaterials als auch Eigenheiten des Datenformats selber und der zur Betrachtung notwendige Player relevant. 3.2.1 Microsoft Windows Media Microsoft bietet unter dem Namen Windows Media Video (WMV) einen Videocodec mit passendem Containerformat3 (Advanced Streaming Format, ASF) und Audio-Codec (Windows Media Audio, WMA) zum Streaming an. Dieses ist von Haus aus nur unter einem Windows-Server produzier-, stream- und abspielbar. Es gibt allerdings bereits OpenSource-Programme, die dieses Format auch auf Linux und OS X abspielen können4 . 3.2.2 Realmedia-Format Ein weiterer großer Kandidat im Videostreaming-Markt wird von der Firma Realmedia hergestellt. Es gibt den Player für Windows, Macintosh und (in einer veralteten Version) für Linux. Das von Realmedia initiierte Open-Source Projekt 3 Video- und Tonspuren sind unabhängig von einander komprimiert. Um für ein Video nur eine Datei handhaben zu müssen, werden diese Daten in einem Container gespeichert. Dieser sorgt auch für die Synchronisation von Video und Ton, da beide getrennte Taktzeiten haben. Hier gibt es eine Vielzahl an Formaten mit unterschiedlichen Möglichkeiten wie z.B. mehreren Tonspuren zu einer Videospur. 4 Es handelt sich hier um die ffmpeg Bibliothek (http://ffmpeg.mplayerhq.hu/) und den VLC-Player (http://www.videolan.org) Kapitel 3 • Videostreaming-Technologien Helix-Player5 liefert ebenso keine Implementierung der aktuellsten RealmediaFormate für Linux, wie die ffmpeg-Bibliothek, welche zumindest ältere Versionen dekodieren kann. Es gibt das Tool zur Erstellung von Realmedia-Dateien in einer kostenlosen Variante. Um die Daten zu streamen ist allerdings in der Praxis eine kostenpflichtige Server-Anwendung6 nötig, welche für Windows, Linux und Solaris verfügbar ist. 3.2.3 MPEG4 MPEG4 hat als offener Industrie-Standard eine gute Verbreitung auf allen denkbaren Betriebssystemen erreicht. Seine große Verbreitung verdankt es den anderen sehr populären Formaten seines Standardisierungs-Gremiums, der Moving Picture Experts Group (MPEG), vor allem dem Audioformat MP3 und dem bei DVDs verwendeten MPEG2. Es bietet sich an, bei MPEG4 den Teil MPEG-4/AVC, besser bekannt unter dem Namen H.264, zu verwenden. H.264 bietet bei gleicher Bitrate weit bessere Bildqualität bzw. erlaubt bei Beibehaltung der Qualität eine Reduzierung der Bitrate. Diese Effizienzsteigerung wird durch höhere Rechenlast erkauft. In unserem Ansatz ist höhere Rechenleistung weit günstiger als Bandbreite, daher bietet sich H.264 als Codec an. Um MPEG-4-Daten zu streamen, wird noch ein Übertragungs-Protokoll benötigt. Hier empfiehlt sich das Realtime Streaming Protokoll (RTSP). Es gibt verschiedene Produkte am Markt, die dieses implementieren. Als OpenSource-Lösung ist hier der Apple Darwin Streaming Server, der zusätzlich für andere Plattformen als OS X verfügbare Bruder des Quicktime Streaming Servers, interessant. 3.2.3.1 Apple Darwin Streaming Server Der Darwin Streaming Server (DSS) von Apple war der erste frei verfügbare RTSP/RTP Streaming-Server, der eine große Anzahl unterschiedlicher Formate wie H.264, MPEG-4 und 3GPP7 unterstützt. Der DSS wird von Akamai8 , einem großen Unternehmen zur Lastverteilung und Beschleunigung der Distribution von Online-Inhalten, zur Verbreitung von Quicktime und MPEG-4 StreamingInhalten sehr erfolgreich eingesetzt[Inc99]. 5 https://player.helixcommunity.org/ Die kostenlose Version ist auf nur fünf Clients beschränkt 7 3rd Generation Partnership Project; eine Kooperation von verschiedenen Firmen, um Videoformate für den Mobilfunk (UMTS, GSM) zu standardisieren. Es wird unter anderem im Multimedia Messaging Service (MMS) verwendet, benutzt MPEG-4, H.264 und AAC als Codecs und hat Ähnlichkeit mit dem MP4-Containerformat. 8 http://www.akamai.com 6 11 12 Die neuen Konzepte 3.2.4 Fazit Aufgrund der gewünschten Plattformunabhängigkeit und unter Berücksichtigung der anfallenden Kosten bleibt von den verschiedenen Videostreaming-Formaten nur MPEG4 mit Streaming über das RTSP-Protokoll übrig. Diese bieten, dadurch dass es offene Standards sind, eine weitaus größere Unterstützung durch fertige Tools, was sich durch mehr Flexibilität und Möglichkeiten positiv auf das Konzept auswirkt. 3.3 Konzept mit Videostreaming für Markierung Auf Basis der Entscheidung für MPEG4 und RTSP stehen mehrere Möglichkeiten zur Implementation bereit. Intuitiv fällt bei Plattformunabhängigkeit der Blick zuerst auf einen webbasierten Ansatz bzw. auf die Programmiersprache JAVA. Aufgrund der Probleme mit diesen beiden im Folgenden beschriebenen Ansätzen, wurde auch eine Windows-Anwendung für das Markierungs-Werkzeug in Betracht gezogen. 3.3.1 JAVA-Anwendung Eine rein JAVA basierte Lösung benötigt externe Bibliotheken, um MPEG4 Daten wiederzugeben. Mit dem von SUN gratis vertriebenen Java Media Framework (JMF)9 lassen sich nur in dem veralteten Format MPEG1 gespeicherte Daten wiedergeben. Es existiert von der Firma IBM ein Plugin für das JMF, mit welchem sich MPEG4 Daten abspielen lassen. Dieses implementiert allerdings nur einen geringen Teil des Standards, wird nicht weiterentwickelt und unterstützt kein Streaming. Es existiert allerdings von IBM eine weitere MPEG4-Implementation für JAVA: IBM Toolkit for MPEG-410 . Dieses kommerziell vertriebene Toolkit wird allerdings für den Bereich Forschung und Lehre über die IBM Academic Initiative11 gratis lizensiert. Diese Erweiterung basiert nicht auf dem JMF und bietet eine fast vollständige Implementation des Standards - inklusive Streaming-Unterstützung mit Hilfe des RTSP. Probleme dieser Lösung Im Praxistest erwies sich dieser Ansatz leider als wenig überzeugend. Es gab keine Möglichkeit, innerhalb der gestreamten Datei zu navigieren. Außerdem waren die ersten zehn Sekunden bei einer Wiedergabe per Streaming stets nicht erkennbar. Es war stattdessen sichtbar, wie sich aus den 9 Das JMF wird in der bestehenden Lösung eingesetzt http://www.alphaworks.ibm.com/tech/tk4mpeg4 11 http://www-304.ibm.com/jct09002c/university/scholars/academicinitiative/ 10 Kapitel 3 • Konzept mit Videostreaming für Markierung von zu starker Komprimierung bzw. fehlenden Daten bekannten Blockartefakten langsam ein klares Bild aufbaut. Auch anders und häufiger gesetzte Zeitstempel und Vollbilder (so genannte I-Frames) brachten keine Verbesserung. In Ermangelung anderer nativer MPEG4-Codecs für die JAVA-Plattform ist dieser Ansatz nicht umsetzbar. 3.3.2 Webbasierte Anwendung Video-Darstellung und -Schnitt sind mit HTML-Bordmitteln nicht möglich. Neben statischen Seiten gibt es die Möglichkeit der Einbindung von externen Plugins in Webseiten und weitere Interaktion lässt sich mit Hilfe von AJAX12 realisieren. Windows-Media-Player Dem Windows-Media-Player fehlt es für diese Anwendung an Verfügbarkeit für andere Plattformen. Außerdem ist dieser nicht von Haus aus in der Lage MPEG4 abzuspielen, was zu Problemen bei vielen Anwendern führen würde. Es müssten von den Anwendern weitere Codecs und Demuxer installiert werden. Dieses stellt vor der Nutzung einer Web-Anwendung eine große Hürde dar. Flash-Player Der Flash-Player der Firma Macromedia13 wird im Web häufig ge- nutzt. Laut einer von der Firma Adobe im Juni 2006 in Auftrag gegebenen Studie [Inc06] ist der Flash-Player, mit einer Installationsquote von 97.3%, zur Zeit das am häufigsten installierte Browser Plugin. Seine Verbreitung liegt damit weit vor JAVA (88%), dem Windows-Media Player (84.8 %), Quicktime (66.1%) oder dem Realplayer (54.6%). Auf den Seiten des bekannten Socialising Network Youtube14 und bei dem Ex-Konkurrenten15 Google-Video16 können die Möglichkeiten sofort getestet werden. Das Streaming von Videos klappt recht gut. Es findet ein Puffern der Daten statt, um Schwankungen der Übertragungsbandbreite zu kompensieren. Eine Navigation ist allerdings nur innerhalb der gepufferten Daten und auch dort nur eingeschränkt möglich. Die Werkzeuge zur Nutzung der Flash-Plattform sind kommerziell und diese werden benötigt, um die Video-Möglichkeiten auszuschöpfen. Es befinden sich allerdings OpenSource Standalone Video-Player auf Flash-Basis17 in Entwicklung 12 Asynchronous JavaScript and XML; Eine Technik, um durch Client-Seitig ablaufendes JavaScript und die asynchrone Übertragung von Daten (in XML [oder vermehrt auch JSON] kodiert) zum Server und zurück eine schnelle Interaktion des Anwenders mit der Anwendung zu erlauben, ohne für jede Anfrage die komplette Seite neu übertragen und rendern zu müssen 13 http://www.macromedia.de; Während dieser Arbeit von der Firma Adobe (http://www. adobe.de) übernommen 14 http://www.youtube.com 15 Es wurde während der Arbeit die Übernahme von Youtube durch Google gestartet 16 http://video.google.com/ 17 Flash Video Player: http://jeroenwijering.com/?item=Flash Video Player 13 14 Die neuen Konzepte und die ffmpeg-Bibliothek ist bereits in der Lage, das spezielle FLV-Videoformat (welches auf MPEG4-Kodierung basiert) zu verarbeiten und zu erstellen. Damit wäre der Flash-Player eine Alternative, um die fertig geschnitten Videos zu präsentieren. Quicktime Das von der Firma Apple18 gratis vertriebene Quicktime-Plugin ist für die wichtigsten Plattformen verfügbar19 und lässt sich über eine reichhaltige API [Inc00] fernsteuern. Neben dem eigenen Dateiformat beherrscht Quicktime auch MPEG4 in einem RTSP-Stream sowie die Synchronized Multimedia Integration Language (SMIL). Mit Hilfe von SMIL wäre eine Synchronisation von zwei Videostreams direkt über Zeitstempel möglich. Bei Tests dieser Lösung traten allerdings auch Probleme mit der exakten Ansteuerung von Positionen im Stream auf, so dass eine Nutzung nicht möglich war. 3.3.3 Windows-Anwendung mit DirectShow Ein weiterer Ansatz, um Streaming nutzen zu können, war, auf die Plattformunabhängigkeit des Markierungs-Tools zu verzichten und ein nur unter Windows lauffähiges Programm mit Nutzung von DirectShow20 zu verwenden. Allerdings traten auch bei diesem Ansatz die bereits bekannten Probleme der Ansteuerung von Positionen im Stream auf. Des Weiteren ist es nur nach Installation einer Vielzahl von freien Codecs möglich, den per RTSP übertragenen MP4-Datenstrom korrekt zu dekodieren, da dafür standardmäßig keine passenden Codecs mitgeliefert werden. 3.3.4 Fazit Es gibt mit diesem Ansatz zu viele Probleme bei der praktischen Umsetzung. Das größte Hindernis liegt bei dem Streaming der Videodaten. Die StreamingProtokolle bieten zwar prinzipiell die Möglichkeit innerhalb der Datei zu springen und diese nicht in einem Durchlauf komplett anzusehen, allerdings hakt es in der Praxis noch stark. Natürlich spielt hier auch das Netzwerk eine große Rolle, da aufgrund der Kompression zusätzliche Daten vor der eigentlich gewünschten Position übertragen werden müssen. Die Kosten für viele kommerzielle Lösungen, die dieses Problem trotzdem nicht lösen, sind auch recht hoch. 18 http://www.apple.com Für OS X und Windows unter http://www.apple.com/quicktime/download/ sowie für Linux unter http://heroinewarrior.com/quicktime.php3 20 DirectShow war früher Teil der Programmier-Bibliothek DirectX (http://www.microsoft. com/directx/) ist mittlerweile aber direkt in die Windows-API übernommen worden. Es handelt sich um eine Schnittstelle für Audio- und Video-Codecs zur Integration in Windows sowie um die definierte Schnittstelle für die Seite der Anwendungen, damit diese, ohne die genutzten Codecs im Detail zu kennen, Audio- und Video-Content verarbeiten können. 19 Kapitel 3 • Konzept mit Netzwerkdateisystem für Markierung Aufgrund dieser Probleme mit dem komplett auf Streaming basierten Konzept, wurde dieses als nicht realiserbar angesehen und im folgenden überarbeitet. 3.4 Konzept mit Netzwerkdateisystem für Markierung Es gibt zwei große Punkte, die im Vergleich zum vorhergehenden Konzept einer Änderung bedurften. Als Erstes wurde der Einsatz von Streaming zum Videoschnitt entfernt, da sich dieses als kritischster Punkt erwies. Ersetzt wurde das Streaming durch den Einsatz eines Netzwerkdateisystems zum Zugriff auf die Rohdaten. Das Netzwerkdateisystem erlaubt einen direkten Zugriff auf einzelne Positionen in den VideoDaten. Als Nächstes wurde die Plattformunabhängigkeit bei der Markierung aufgegeben. Dies resultierte aus den Problemen mit der JAVA-Plattform (vor allem aufgrund der starken Einschränkung bezüglich der verwendbaren Video-Codecs) und des in das neue Szenario nicht sinnvoll integrierbaren webbasierten Ansatzes. Es besteht weiterhin die Möglichkeit der alternativen Umsetzung mit Hilfe eines Systems auf Basis von C++, Open-Source Video-Biblotheken wie z.B. libavcodec21 und plattformunabhängigen GUI-Toolkits, wie z.B. QT22 oder wxWidgets23 . Diese Art der Umsetzung wurde allerdings aufgrund des zur Implementierung erforderlichen hohen Zeitaufwandes bei der plattformunahängigen C++-Programmierung nicht weiter verfolgt24 . Im Abbildung 3.2 ist die aktualisierte Ziel-Architektur des Systems dargestellt. Das verwendete Netzwerkdateisystem spielt in diesem Fall nur eine untergeordnete Rolle, es muss nur auf einem Windows-System verfügbar sein und den blockweisen Zugriff auf die Dateien zulassen. Es bieten sich hierfür zum Beispiel das Andrew Filesystem (AFS) oder das Common Internet File System (CIFS)25 an. Bei diesem Szenario wird nun direkt mit dem Kamera-Ausgangsmaterial gearbeitet und nach der Markierung erfolgt ein Schnitt in die erstellten Phasen mit anschließender Konvertierung in ein streamingfähiges Format. Der echte Schnitt der Videos wurde erforderlich, da die genaue Positionierung im Videostrom bei den aufbereiteten Daten die selben Probleme bereitet wie bei der Markierung per Streaming. 21 Die Leistungsfähigkeit dieser Bibliothek ist unter anderem durch den VLC media player (http: //www.videolan.org), der auf dieser aufsetzt, bekannt 22 http://www.trolltech.com/products/qt 23 http://www.wxwidgets.org/ 24 Es wurde vorher auch durch Tests mit Hilfe von VLC und Mplayer (ebenfalls auf libavcodec aufsetzend) festgestellt, dass auch dieser Ansatz die Markierung per Streaming nicht ermöglicht 25 Umgangssprachlich besser bekannt als Windows Datei-Freigabe 15 16 Die neuen Konzepte Markierung der Video-Daten Wiedergabe der geschnittenen, aufbereiteten Inhalte MPEG-2 Plattformunabhängig Netzwerk-Dateisystem Sc h tun nitt un gf ür d Au Str fbe ea min reiFile-Server g Streaming Firewall Internet Streaming-Server Abbildung 3.2: Ziel-Architektur mit Nutzung eines Netzwerkdateisystems für die Markierung und automatischem Videoschnitt Vorteile Durch die erst nach der Markierung stattfindende Komprimierung für das Streaming ist während der Annotation die volle Bildqualität des Ausgangsmaterials verfügbar. Es gibt auch keine Notwendigkeit, die Videos mehrfach aufzubewahren - im Gegensatz zu dem ersten Ansatz, bei dem man neben den zu streamenden Videos auch das Ausgangsmaterial aufbewahren würde. Außerdem fällt bei diesem Szenario durch das Verschieben der Neukomprimierung keine große Wartezeit vor dem Markieren an. Nachteile Die vor der Markierung eingesparte Wartezeit verlagert sich weiter nach hinten: nun gibt es Wartezeit nach der Annotation der Daten, bis diese fertig geschnitten und für das Streaming aufbereitet zur Veröffentlichung bereitstehen. Je nachdem wie oft (z.B. durch nachträgliche Korrekturen) geschnitten wird, kann es insgesamt länger dauern. Wenn es zu einem Set Videos sehr viele Annotationen und damit überlappende Phasen gibt, so können Teile der Videos redundant auf der Festplatte zum Streaming vorliegen. 3.4.1 Videoschnitt Es gibt unterschiedliche Ansätze, um Videodaten zu schneiden. Ein Problem bei der Verarbeitung der Videodaten stellt die verzahnte Speicherung von Audiound Videodaten dar. Eine andere Schwierigkeit ist, dass durch die heutige starke Komprimierung von den meisten Bildern nur Teile vorhanden sind, die erst mit anderen Bildern zusammengefügt das Bild ergeben. Kapitel 3 • Konzept mit Netzwerkdateisystem für Markierung 3.4.1.1 MPEG4 in MP4-Container Das Tool MP4-Box26 ermöglicht den Schnitt von im Dateisystem vorhandenen MP4-Daten. Dazu nimmt es als Parameter die Laufzeit bis zur gewünschten Stelle in Sekunden an. Ein Schnitt ist allerdings nur an den Random-Access Points im Datenstrom möglich. Aus diesem Grund vergrößert das Tool den Ausschnitt, um keine gewünschten Daten abzuschneiden. Im Test lag das Tool bei den Schnittpositionen bis zu zehn Sekunden von den gewünschten entfernt. Auch Veränderungen bei der Kodierung des Ausgangsmaterials bezüglich der Random Access Points brachten keine Reduzierung auf tolerierbare Fehler. 3.4.1.2 Schnitt mit Neukomprimierung Für den Schnitt mit anschließender Neukomprimierung des Videos bietet sich das Tool AVISynth27 an. Dabei handelt es sich um einen sogenannten Frameserver. Ein Frameserver dient dazu, Einzelbilder aus einem Videodatenstrom bereitzustellen. Man kann sich die vom Frameserver gelieferten Daten wie eine klassische Kinofilmrolle vorstellen: viele einzelne Vollbilder, die schnell abgespielt den Film ergeben. Der große Vorteil bei der Arbeit mit einem Frameserver ist, dass bildgenau geschnitten werden kann und keine Rücksicht auf die Kodierung des Bildes in der Ursprungsdatei28 nehmen muss. Neben diesem Vorteil wird eine hohe Flexibilität erreicht: die Einzelbilder werden nicht platzverschwenderisch auf die Festplatte geschrieben, sondern bei Bedarf on-the-fly aus den Videodaten generiert. Diese Generierung läuft meist scriptgesteuert ab und erlaubt gleichzeitig viele Operationen, wie zum Beispiel Bildoptimierungen, vorzunehmen. AviSynth bringt hierfür eine eigene flexible Scriptsprache mit. Aktuell ist die stabile Version 2.5 verwendbar. Der Nachfolger (Version 3.0) bringt einige große Änderungen an der Scriptsprache und dem Plugin-Konzept mit sich, ist allerdings noch in der Entwicklung und bisher nicht produktiv einsetzbar. Ein weiterer wichtiger Vorteil liegt darin, dass die nachgeschalteten Anwendungen unabhängig von den Eingabedaten stets einen für sie nutzbaren Videodatenstrom bekommen. Durch die Nutzung von Microsofts DirectShow zum Import der Daten in AviSynth und dessen Erweiterungsmöglichkeiten um weitere Codecs bekommt 26 http://gpac.sourceforge.net/ http://www.avisynth.org 28 Bei heutigen hochkomprimerenden Videocodecs sind Vollbilder, sogenannte I-Frames, die Ausnahme. Sie existieren, um eine bessere Navigation innerhalb der Datei zum Spulen zu ermöglichen. Die Mehrzahl der Bilder ist nur zu einem Bruchteil gespeichert: nämlich genau die Differenz zum vorhergehenden Bild (Prediction-Frames, P-Frames) genommen werden muss. Zur weiteren Reduzierung der Datenrate gibt es auch Bilder, die zusätzlich die Differenz zum nachfolgenden Bild kodiert haben (Bidirectional-Frames, B-Frames). Durch dieses System liegen die Frames in den Videostreams nicht mehr korrekt serialisiert vor, sondern den B-Frames im Film folgende I- und P-Frames müssen im Datenstrom vorher übertragen werden. 27 17 18 Die neuen Konzepte die Anwendung nun eine Flexibilität, die mit den anderen Szenarien nicht ohne Weiteres hätte erreicht werden können: Sämtliche Video- und Audiokompressionsverfahren, die mit dem Windows MediaPlayer abspielbar sind, können als Eingangssignal verwendet werden. Durch das Nachschalten weiterer Programme ist die Komprimierung mit jedem unter Windows vorhandenen Codec möglich. Um das Zielformat - für den Darwin-Streaming-Server nutzbare Daten - zu erhalten, bietet sich die Komprimierung der Videodaten in H.264 mit dem freien Codec x26429 an. Für den Ton, der im AAC (Advanced Audio Coding) Format vorliegen muss, kann die Konvertierung mit Hife von faac30 erfolgen. Anschließend würden die Video- und Audiodaten durch das Tool MP4-Box in den MP4 Container verpackt. 3.4.2 Fazit Der direkte Schnitt von vorher erstellten MP4-Dateien erwies sich als nicht sinnvoll nutzbar. Die Realisierung dieses Konzeptes scheint - bei Nutzung des Schnittes mit Neukomprimierung - möglich zu sein und ausreichend Vorteile gegenüber der bestehenden Anwendung zu bieten, auch wenn im Bezug aus das Streaming zur Markierung Abstriche gegenüber dem vorherigen Konzept in Kauf genommen werden müssen. Aus diesem Grund wird dieses Konzept nun verwendet, um die prototypische Implementierung vorzunehmen. 29 30 http://developers.videolan.org/x264.html http://www.audiocoding.com/ 4 Die Realisierung Die Anwendung wird dem Konzept mit Netzwerkdateisystem (Kapitel 3.4) folgend implementiert. Dabei wird die Variante mit Videoschnitt durch die Nutzung eines Frameservers umgesetzt. In diesem Kapitel befinden sich Details zu der Umsetzung, den dabei verwendeten Technologien und Anwendungen und zu wichtigen während der Umsetzung getroffenen Entscheidungen. 4.1 Details der Umsetzung In der Umsetzung des Tools wurde auf eine Dreiteilung der Aufgaben gesetzt. Als Erstes wurde der langwierige Videoschnitt- und Konvertierungsprozess in einen Windows-Dienst ausgegliedert. So kann diese Aufgabe automatisiert ohne Benutzeraufsicht, -interaktion oder auch nur -anmeldung erfolgen. Der nächste Teil, der in eine separate Anwendung ausgelagert wurde, betrifft die Synchronisation der Videos. Es handelt sich hierbei um eine Aufgabe, die nur einmalig ausgeführt werden muss, bisher aber bei jeder Benutzung des bestehenden Tools anstand. So ergeben sich nun die folgenden drei Teile: 1. Synchronisations-Tool 2. Annotations-Tool 3. Videoschnitt-Dienst Um weiteren Nutzen aus der Abspaltung der Synchronisation zu ziehen, werden von dem Synchronisations-Tool Projektverzeichnisse angelegt. Diese enthalten alle zur Annotation nötigen Daten, verwalten alle auch später anfallenden Daten und können beliebig viele verschiedene Annotationen zu einem Set Videos aufnehmen. In Abbildung 4.1 ist der Aufbau dargestellt. Eine Kommunikation zwischen Synchronisations-Tool und Annotation-Tool gibt es nur indirekt über die in das Projektverzeichnis geschriebenen, in der Datei vilm.xml abgelegten, Daten. Zwischen dem Annotations-Tool und dem Schnittwerkzeug gibt es eine ausgiebige auf .NET-Remoting basierende Kommunikation, welche den auszuführenden (den Schnitt und Export betreffenden) Code in das Annotations-Tool über die Scriptschnittstelle CS-Script nachlädt. Dadurch stehen den Endanwendern nach einem Update des Schnittwerkzeuges sofort alle neuen Möglichkeiten offen und es gibt bei der Kommunikation keine Versionsprobleme. 19 20 Die Realisierung Projekt Cut Materialien Video vilm.xml Abbildung 4.1: Aufbau des Projektverzeichnisses Abbildung 4.2: Screenshot des Synchronisations-Tools 4.1.1 Synchronisations-Tool Das in Abbildung 4.2 dargestellte Synchronisations-Tool ist auf wenige Möglichkeiten reduziert. Diese Beschränkung des Funktionsumfangs ist durch die Spezialisierung des Tools gewollt. Es besteht die Möglichkeit, ein neues Projekt anzulegen und vorhandene Projekte zu laden und zu verändern. Die zu synchronisierenden Videos werden in das Projektverzeichnis kopiert, sobald der Anwender sie dem Projekt hinzufügt. So können die Videos sogar - geeignete Treiber der Kameras vorausgesetzt - direkt von den Kameras dem Projekt hinzugefügt werden. 4.1.2 Annotations-Tool In dem Annotations-Tool sind im Vergleich zur vorherigen ViLM-Anwendung ein paar Möglichkeiten hinzugekommen. In Abbildung 4.3 ist es gezeigt. Die neuen Funktionen umfassen unter anderem die Integration von Vorschaubildern, um eine bessere Übersicht über die Videos zu enthalten. Diese Option lässt sich auch Kapitel 4 • Details der Umsetzung Abbildung 4.3: Screenshot des Annotations-Tools abschalten, um mehr Platz für die Eingabe der Annotationen zu bekommen. Eine weitere neue Funktion betrifft die Integration einer Rechtschreibkorrektur für die Eingabe der Annotationen, um die direkte Eingabe in der AnnotationsAnwendung zu erleichtern. Das Fenster der Annotations-Anwendung ist, wie auch das des SynchronisationsTools, frei in der Größe veränderbar. Die Anzeige der Videos skaliert dabei ebenso mit wie die restlichen Elemente der Bedienungsoberfläche. Die Materialien lassen sich jetzt bequem auch nach dem Hinzufügen zu einem Projekt bearbeiten. Es ist nun nicht mehr nötig, den Umweg über den WindowsExplorer zu gehen - stattdessen genügt ein Doppelklick, um die dem Dateityp zugewiesene Standard-Anwendung zu starten. Bei der Implementation des Exports in das Annotations-Tool wurde auf Flexibilität geachtet. Es befindet sich kein für den Export nötiger Code in der Anwendung. Der Sourcecode wird bei Bedarf vom Videoschnitt-Dienst per .NET Remoting (siehe Kapitel 4.2.1.1) angefordert und dann durch die Scriptsprache CS-Script (Kapitel 4.2.1.2) zur Ausführung gebracht. Der Ablauf des Exports ist in Abbildung 4.5 dargestellt. Das ausgeführte Export-Script bietet so immer den 21 22 Die Realisierung Abbildung 4.4: Screenshot des Controls ZzzzRangeBar aktuellen Funktionsumfang des Schnitt-Servers an und kann durch CS-Script die benötigten Daten zur Ausführung übergeben bekommen. Für die Umsetzung des Annotations-Tools wurde über eine veränderte Bedienungsoberfläche im Bereich der Zeitanzeige des Videos nachgedacht. Bisher wurde immer ein einzelner Slider über einer Zeitleiste eingesetzt. Für die Markierung von Phasen erschien die Nutzung einer Zeitleiste mit zwei Slidern (einer für die Start- und einer für die Ende-Markierung) interessant. Es existieren dafür bereits mehrere fertige GUI-Controls, unter anderem die ZzzzRangeBar1 , welche in Abbildung 4.4 zu sehen ist. Der Vorteil ist, dass nun Start, Ende und Dauer einer Phase auf einen Blick erfasst und einfach verändert werden können. Bei Tests hat sich allerdings herausgestellt, dass die Bedienung für die Anwender verwirrend ist, da es bei der Benutzung im Annotations-Tool nicht nur um die Markierung der Phasen geht, sondern auch das Abspielen der Videos gleichzeitig damit gesteuert wird. Die direkte Steuerung war mit diesem Control nicht mehr möglich, da sich aus Sicht des Anwenders die Position und Größe der Phase veränderten, wenn sich einer der beiden Slider bewegte, um die aktuelle Position im Video darzustellen. Desweiteren war es nicht erkennbar, an welcher der beiden markierten Positionen sich das oberhalb angezeigte Video befand. Auch ein Springen im Video zu der Position des gerade verschobenen Sliders erwies sich als als wenig intuitiv. Eine Lösung für einen Teil der Probleme schien die Idee, der ZzzzRangeBar einen dritten, farblich abgesetzten und anders geformten, Slider hinzuzufügen, um damit die aktuelle Position im abgespielten Video zu markieren. Allerdings wurde damit die Bedienung in der Praxis weiter verkompliziert. Das Endergebnis war der Verzicht auf eine Änderung der Bedienung in diesem Bereich zugunsten des bewährten einfachen Sliders und zusätzlichen Buttons, um die aktuelle Position als Start bzw. Ende einer Phase festzulegen. Die eingegebenen Annotationen werden in einer XML-Datei im Projektverzeichnis abgelegt. Als Dateiendung wurde .ann gewählt. Diese Dateiendung scheint sehr wenig genutzt zu sein2 . Aus diesem Grund kann sie gefahrlos mit dem Annotations-Tool verknüpft werden, um mehr Bedienkomfort zu erhalten. 1 2 http://www.codeproject.com/cs/miscctrl/zzzzrangebar.asp Recherchen fanden nur drei wenig verbreitete Nutzungen: Annotationen zu Windows 3.x Hilfedateien, ein russischer FidoNet-Client namens King-FIX (http://www.king-fix.da. ru/) und das Linux-Toolkit Karma (http://www.atnf.csiro.au/computing/software/ karma/) welches im Astronomie-Bereich zur Visualisierung eingesetzt werden kann Kapitel 4 • Details der Umsetzung Annotation Benutzer Export Dialog aufrufen Optionen wählen & Export starten über Abschluss informieren (eMail) 23 ViLMSplitMovie Dialogfenster Script abrufen Script ausführen Video-Schnitt starten Job vormerken Schnitt und Konvertierung Abbildung 4.5: Zusammenspiel von Annotations-Tool und Videoschnitt-Dienst 4.1.3 Videoschnitt-Dienst Der Videoschnitt-Dienst wurde als Windows-Dienst implementiert. Dieses bringt eine Menge Vorteile im Vergleich zu einer ständig laufenden Konsolen-Anwendung mit sich. Ein Windows-Dienst kann unter anderem bei dem Hochfahren des Rechners automatisch starten, ohne dass ein Benutzer sich am Server anmelden muss. Die Kommunikation des Dienstes mit dem Administrator erfolgt über die Windows-Ereignisanzeige. Dort wird ein eigenes Protokoll für den Schnittdienst angelegt, in welches Informationen über verarbeitete Jobs und aufgetretene Fehler geschrieben werden. Für die Konfiguration des Dienstes wird der unter .NET vorgesehene Weg über die Anwendungskonfigurationsdatei genommen. Dort müssen unter anderem die Pfade zu einigen der in Kapitel 4.2 beschriebenen Tools konfiguriert werden. Hier findet auch die Konfiguration eines SMTP-Servers3 statt, mit dessen Hilfe der Schnittserver die Anwender per eMail über die Abarbeitung ihrer Jobs informiert. In Abbildung 4.5 ist das Zusammenspiel von Annotations-Tool und VideoschnittDienst dargestellt. 3 Das Simple Mail Transfer Protocol ist der Internetstandard zum Übertragen von eMails. Der Videoschnitt-Dienst unterstützt hierbei die Benutzerauthentifizierung per SMTP-Auth und verschlüsselte Übertragung per SSL. Sofern .NET das SSL-Zertifikat nicht überprüfen kann (z.B. ein selbst-signiertes Zertifikat, welches nicht in Windows eingetragen wurde), wird ein Fehler ausgegeben und es findet kein Versand statt 24 Die Realisierung 4.2 Verwendete Technologien In diesem Kapitel werden wichtige bei der Umsetzung verwendete Technologien und Tools angesprochen. Es werden Gründe für die Wahl dargelegt und ein Überblick über die Möglichkeiten gegeben. Auf die Benutzung der Tools wird mit Ausschnitten aus dem Sourcecode eingegangen. Am Ende des Kapitels wird in Sektion 4.3 gezeigt, wie die vielen einzelnen zum Videoschnitt benutzen Tools verknüpft werden, um die gewünschte Funktionalität zu liefern. 4.2.1 C# Nachdem durch die Nutzung von Microsofts DirectShow schon eine Bindung an die Windows-Plattform bestand, lag es nahe, auf die moderne .NET Plattform zu setzen, um von der guten Integration und vielen bestehenden Komponenten zu profitieren. Die Wahl fiel auf die Sprache C#, da diese bereits am längsten zur .NET Familie gehört und damit gut ausgereift ist, es eine große Menge Literatur gibt und diese für den Programmierer leicht zu handhaben ist. Diese Entscheidung hat sich im Verlauf der Umsetzung bewährt und für eine zügige Realisation gesorgt. Die Unterstützung durch die Programmierumgebung Visual-Studio 2005 erwies sich als sehr komfortabel, vor allem im Bereich der visuellen Oberflächen und dem Debugging. 4.2.1.1 .NET-Remoting Die Kommunikation von Annotations-Tool und Videoschnitt-Server erfolgt über .NET Remoting. Dabei handelt es sich um ein direkt in .NET eingebautes Verfahren zur Kommunikation in verteilten Anwendungen und ermöglicht, ähnlich wie unter JAVA das Remote Method Invocation (RMI), eine einfache Implementation. Die Übertragung von Objekten ist möglich, sofern die zugrunde liegenden Klassen als serialisierbar4 markiert sind. Eine andere Möglichkeit besteht darin, auf Objekte zuzugreifen, die nur in der anderen Anwendung existieren. Auf diese wird über einen automatisch zwischengeschalteten Proxy zugegriffen. Ein sehr einfaches Objekt für den letzteren Anwendungsfall ist in Listing 4.1 dargestellt. Diese Klasse, welche als einfache Demo keinen Code zur Fehlerbehandlung enthält, macht nichts anderes, als den Inhalt der Datei demo.txt bei Erstellung einer Objekt-Instanz aus dem Dateisystem zu lesen und in einer Variable verfügbar zu machen. 4 Als Serialisierung wird das Abbilden des aktuellen Objekt-Zustandes in eine Form bezeichnet, aus der das Objekt später originalgetreu reproduziert werden kann. Kapitel 4 • Verwendete Technologien 25 namespace RemoteObjects { public c l a s s R e m o t e S c r i p t : MarshalByRefObject { public S t r i n g t e x t = ” ” ; public R e m o t e S c r i p t ( ) { i f ( F i l e . E x i s t s ( ”demo . t x t ” ) ) { t e x t = F i l e . ReadAllText ( ”demo . t x t ” ) ; } else text = ” Fehler aufgetreten ” ; } } } Listing 4.1: Objekt für .NET Remoting Diese Klasse wird nun durch den in Listing 4.2 gezeigten Code für den externen Zugriff vorbereitet. Das Listing enthält hier als Beispiel festkodierte Werte. In der Realität sollten diese natürlich alle konfigurierbar gehalten werden. Als Erstes wird hier der Server angewiesen, über das TCP-Protokoll auf dem Port 4444 auf Anfragen zu warten. Als Nächstes wird genau festgelegt, welche Klassen alle nach außen veröffentlicht werden und unter welchem Namen. Hier wird der Bezeichner Klasse RemoteScript bekannt zu machen. Dies geschieht in dem Verfahren ViLMSplitMovieScriptHandler verwendet, um die oben dargestellte SingleCall. Es gibt bei .NET Remoting drei unterschiedliche Verfahren für den Objekt-Zugriff. Diese sind: SingleCall Objekte vom Typ SingleCall existieren nur für die Dauer von einem einzelnen Aufruf. Sie werden für diesen beim Eintreffen erzeugt und beim Beenden wieder zerstört Singleton Ein Singleton-Objekt existiert nur ein einziges Mal und bedient mehrere Aufrufe. Es speichert aus diesem Grund Zustandsinformationen und kann auch dazu dienen, um eine Datenbasis für mehrere Client-Aufrufe zu teilen. Client-Activated Hierbei handelt es sich um Objekte, die zwar auf dem Server liegen, aber von den Clients einzeln explizitit per new()-Operator angelegt werden. Es wird dann jedes Mal auf dem Server ein neues Objekt erzeugt und genau diesem Client zugewiesen. Diese Objekte können auch Zustandsinformationen speichern und können z.B. gut verwendet werden, um rechenintensivere Aufgaben dem Server zu überlassen. Ein anderes Szenario wäre die Nutzung für Aufgaben, die Zugriff auf einen sehr großen Datenbestand benötigen um Auswertungen vorzunehmen, und diese nur an den Server performant angebunden werden können. 26 Die Realisierung TcpChannel c h a n n e l = new TcpChannel ( 4 4 4 4 ) ; ChannelServices . RegisterChannel ( channel ) ; R e m o t i n g C o n f i g u r a t i o n . Re g i s t e r W e l l K n o w n S e r v i c e T y p e ( typeof ( R e m o t e S c r i p t ) , ” V i L M S p l i t M o v i e S c r i p t H a n d l e r ” , WellKnownObjectMode . S i n g l e C a l l } ; ... ChannelServices . UnregisterChannel ( channel ) ; Listing 4.2: Sourcecode, um einen .NET Remoting Server online zu stellen Die Wahl der Objekt-Art hängt direkt von dem vorgesehen Einsatzzweck ab. Um mit in der entfernten Anwendung laufenden Objekten zu arbeiten, wird der Code aus Listing 4.3 benötigt. Als Erstes wird nun wieder ein TCP-Verbindungs-Objekt erstellt. Dieser sogenannte Kanal bekommt aber erst beim Aufruf der Server- Anwendung das Ziel übergeben. Dieses ist in einem Connection-String kodiert, der noch einmal das Protokoll, den Zielserver und Port sowie den für die Klasse Remote-Script vorgegebenen Namen beinhaltet. Interessant ist hier die Tatsache, dass das Objekt vom Aufruf her in der Client-Anwendung erstellt wird. Wirklich erzeugt wird das Objekt allerdings auf dem Server und deshalb wird die Datei demo.txt auch aus dem Dateisystem des Servers und nicht dem des Clients ausgelesen. Dies geschieht allerdings unsichtbar für den Client, der auf das Objekt remoteScript fortan zugreifen kann. Als letztes muss der Channel wieder freigegeben werden. TcpChannel c h a n n e l = new TcpChannel ( ) ; ChannelServices . RegisterChannel ( channel ) ; R e m o t e S c r i p t r e m o t e S c r i p t = ( R e m o t e S c r i p t ) A c t i v a t o r . GetObject ( typeof ( RemoteScript ) , ” tcp : / / l o c a l h o s t :4444/ ViLMSplitMovieScriptHandler ” ) ; MessageBox . Show ( r e m o t e S c r i p t . t e x t ) ; ChannelServices . UnregisterChannel ( channel ) ; Listing 4.3: Sourcecode, um einen .NET Remoting Client mit einem Server zu verbinden 4.2.1.2 CS-Script Bei CS-Script5 handelt es sich um eine Scriptsprache auf Basis von C#, um Anwendungen flexibel erweitern zu können. Bei der Nutzung von CS-Script in einem C#-Sharp Projekt kann das Scripting in der selben Sprache geschehen, in der die Anwendung entwickelt wurde. CS-Script kann allerdings auch in jedes andere .NET Projekt integriert werden. Ein sehr interessanter Aspekt von CSScript ist, dass die Sprache nicht interpretiert wird, wie es in Scriptsprache sonst meist üblich ist. Beim Laden vor der Ausführung wird das Script ganz normal in die Common Intermediate Language (CIL)6 kompiliert, wie jede andere .NET 5 6 http://www.csscript.net/ Die Common Intermediate Language (CIL) hieß früher Microsoft Intermediate Language (MSIL) und ist der Zwischencode, den Microsoft bei .NET nutzt, um ihn in der Laufzeit- Kapitel 4 • Verwendete Technologien 27 Sprache auch. Dadurch gibt es keinen aus der Nutzung einer Scriptsprache resultieren Performanceverlust, wie er bei interpretierten Scriptsprachen auftritt, sondern nur eine kurze einmalige Verzögerung für den Kompiliervorgang (dank Caching der Kompilate). Es kann auch jede Anwendung einfach in ein Script überführt werden oder umgekehrt. CS-Script wurde eingesetzt, um in der Annotations-Anwendung den ExportDialog bei jedem Aufruf frisch vom Server zu holen. So ist es möglich, den Clients einfach, ohne sie aktualisieren zu müssen, neue Funktionen des Servers (vor allem im Bereich von Optionen bezüglich Formaten und Bildqualität) zur Verfügung zu stellen. Der Aufruf eines CS-Scripts ist in Listing 4.4 dargestellt. Dort wird der Code aus der Datei Objekt Export.cs eingelesen und kompiliert. Dieser steht nun in dem helper zur Verfügung und Methoden des Scripts können ausgeführt werden. Die Invoce-Methode bekommt als ersten Parameter die auszuführende Methode übermittelt und alle folgenden Parameter werden an die aufgerufene Methode durchgereicht. Hierbei können Objekte aller sowohl dem Script als auch dem aufrufenden Code bekannten Klassen übergeben werden. In diesem Beispiel erwartet das (in Listing 4.5 gezeigte) Script einen String als Parameter, um diesen Text als Titel des erzeugten Dialog-Fensters zu setzen. using CSScriptLibrary ; try { AsmHelper h e l p e r = new AsmHelper ( C S S c r i p t . Load ( ” Export . c s ” , n u l l , t r u e ) ) ; h e l p e r . I n v o k e ( ” ViLMExport . ShowExport ” , ” Export−Optionen ” ) ; } c a t c h ( E x c e p t i o n ex ) { MessageBox . Show ( ex . T o S t r i n g ( ) ) ; } Listing 4.4: C#-Code um ein CS-Script auszuführen Dem CS-Script fehlen zusätzliche Informationen über Assemblies. In Visual-Studio werden diese getrennt verwaltet und zur Kompilierzeit hinzugefügt und ausgewertet. Damit eine CS-Script-Datei eigenständig ohne weitere Informationen lauffähig ist, versucht CS-Script die benötigten Assemblies aus den (durch die using-Anweisung bekannten) Namespace-Namen herauszufinden. Da dies nicht immer möglich ist, lassen sich zusätzliche Informationen direkt im Script hinzufügen. Der Kommentar in Zeile fünf des Scripts ist eine Anweisung an CSScript, die DLL RemoteObjects.dll zu laden. In dieser befindet sich der direkt danach genutzte Namespace RemoteScript . umgebung Common Language Runtime (CLR) auszuführen. Die CIL ist äquivalent zum Bytecode in JAVA und die CLR zu der Java-Virtual Machine. 28 Die Realisierung using using using using // c s s using System ; System . ComponentModel ; System . Drawing ; System . Windows . Forms ; r e f e r e n c e RemoteObjects . d l l ; RemoteScript ; c l a s s ViLMExport : Form { p r i v a t e System . Windows . Forms . Button b u t t o n 1 ; p u b l i c ViLMExport ( S t r i n g t i t l e ) { t h i s . b u tt o n1 = new System . Windows . Forms . Button ( ) ; t h i s . b u tt o n1 . Text = ” Export s t a r t e n ” ; t h i s . b u tt o n1 . C l i c k += new System . EventHandler ( t h i s . b u t t o n 1 C l i c k ) ; t h i s . C o n t r o l s . Add( t h i s . b u t t o n 1 ) ; t h i s . Text = t i t l e ; } p r i v a t e v o i d b u t t o n 1 C l i c k ( o b j e c t s e n d e r , EventArgs e ) { MessageBox . Show ( ”C#−S c r i p t i n A c t i o n ! ” ) ; } s t a t i c p u b l i c v o i d ShowExport ( S t r i n g t i t l e ) { u s i n g ( ViLMExport d l g = new ViLMExport ( t i t l e ) ) d l g . ShowDialog ( ) ; } } Listing 4.5: C#-Code um CS-Script auszuführen Falls der als Script zu verwendende Code über mehrere Dateien verteilt ist (z.B. durch die Verwendung von Visual-Studio als GUI-Designer), so müssen zusätzliche Dateien dem Haupt-Script bekannt gemacht werden. Dies geschieht über den Befehl //css import Datei.cs, wobei auch zusätzliche Optionen wie das Umbe- nennen von Namespaces möglich sind. Die Nähe von CS-Script zu normalem .NET Code erweist sich auch beim Debugging als sehr nützlich. So kann der Script-Code direkt mit dem normalem Anwendungs-Code zusammen im .NET Debugger wie z.B. Visual-Studio mit analysiert werden. 4.2.2 Microsoft DirectShow Eine Möglichkeit für den Zugriff auf DirectShow wird vom .NET Framework nicht direkt mitgeliefert. Es kann aber über die Interoperablitäts-Funktionen von C# auf das COM-Interface7 von DirectShow zugegriffen werden. Dieses wird in der IDL (Interface Definition Language) beschrieben. Das Listing 4.6 importiert die IDL-Dateien aus dem Software Development Kit (SDK) und exportiert die 7 Component Object Model; Kapitel 4 • Verwendete Technologien 29 benötigten Interfaces in eine Typ-Bibliothek auf die - nach einer Konvertierung in eine Common Language Runtime-Assembly8 - von .NET aus zugegriffen werden kann. Die hierfür nötigen Befehle sind im Listing 4.7 zu sehen. Nach diesen Vorbereitungen kann mit der DirectShow-API direkt gearbeitet werden. import ”devenum . i d l ” ; ... import ” vmrender . i d l ” ; [ uuid ( B82EFBF0−2FA0−4bcc −89D7−5E8E06051586 ) , h e l p s t r i n g ( ” Vilm Video t y p e l i b r a r y ” ) ] l i b r a r y VilmTypeLib { i m p o r t l i b ( ”STDOLE2 . TLB” ) ; interface interface ... interface interface IGraphBuilder ; IMediaControl ; IVMRMixerControl ; FilgraphManager ; }; Listing 4.6: IDL-Code um DLLs für C# zu erstellen SET DXSDKPath=” C: \Programme\ M i c r o s o f t V i s u a l S t u d i o .NET 2003\ Vc7\ PlatformSDK \ I n c l u d e ” midl / I ”%DXSDKPath%” / I ”%DXSDKPath%\DShowIDL” v i l m . i d l tlbimp vilm . t l b Listing 4.7: Batch-Datei um IDL-Code zu C# DLLs zu kompilieren DirectShow ist intern sehr modular aufgebaut. Mit Graphen kann moduliert werden, was genau ablaufen soll. Jeder Knoten in dem Graphen, ein sogenannter Filter, hat mindestens eine Verknüpfung für Input und Output, um sich mit anderen Filtern verbinden zu lassen. In Abbildung 4.6 ist ein solcher Graph beispielhaft für die Wiedergabe eines MPEG-I Videos dargestellt. Natürlich ist es nicht praktikabel, diese Graphen einmal fest zu erstellen, da schon kleine Änderungen (zum Beispiel ein anderer Audio-Codec) einen neuen Graphen verlangen. Für Standardfälle, wie die Wiedergabe von Videos, gibt es eine große Zahl an Graphen, die von Microsoft gleich mitgeliefert wird. Auch neue Treiber und Codecs können weitere Graphen mitbringen und zur Verfügung stellen. So profitieren gleich alle Anwendungen davon. Im Klartext heißt dies, dass jedes Videoformat, welches im Windows Media-Player, welcher auch auf DirectShow aufsetzt, abspielbar ist9 , auch mit diesem Tool verarbeitet werden kann. 8 9 In .NET sind alle Komponenten in Assemblies organisiert Sonderfälle wie per DRM geschützte Dateien sind davon ausgenommen 30 Die Realisierung Quelldatei MPEG-I Stream Splitter Video MPEG Video Decoder Video Renderer MPEG Audio Decoder Default DirectSound Device Audio Abbildung 4.6: DirectShow Graph zum Abspielen von Videos 4.2.3 SMIL SMIL, aktuell ist die Version 2.1, wurde als Multimedia-Sprache entworfen, um Multimedia-Präsentationen in Browsern (ohne die Nutzung von Plugins) zu ermöglichen. Leider existieren in den aktuellen Browsern noch keine Implementierungen. Die Media-Player Quicktime und Realplayer besitzen bereits eine Unterstützung für ältere Versionen von SMIL. Zum Teil mit eigenen proprietären Erweiterungen. Die aktuelle Version bietet viele praktische Neuerungen und durch die Verzahnung mit anderen Standarts wie SVG10 wird sich die Verbreitung von Implementationen wahrscheinlich verbessern. Die Entwickler von Mozilla sind bereits dabei, mit dem SVG-Suport auch SMIL zu integrieren. Mit SMIL ließen sich die Annotationen perfekt aufbereitet im Web präsentieren. Die Ereignisse, Beschreibungen von Phasen und Materialien ließen sich zu den gewünschten Zeitpunkten korrekt neben den Videos einblenden. Die Formate Real-Text und Real-Pix sind Erweiterungen von der Firma Realmedia und bieten Möglichkeiten zur Animation (Einblendefekte etc) von Text und Bildern. Dieses ist aber für unsere Anwendung nicht nötig. Das Einblenden von HTML-Seiten, wie es zum Standard gehört, ist hingegen sehr gut nutzbar. In Listing 4.8 ist ein beispielhaftes SMIL-Dokument abgedruckt, welches die in Abbildung 4.7 dargestellte Ausgabe erzeugt. Hier laufen zwei Videostreams synchron ab und rechts daneben wird die kontextabhängig passende Information eingeblendet. Diese Informationen können alles beinhalten, was eine HTML-Seite ermöglicht, inklusive Formatierung per CSS. Das SMIL-Dokument ist in mehrere Teile gegliedert. Im HEAD-Bereich befindet sich, neben META-Informationen wie Autoren, Copyright und Titel-Angaben, welche im Beispiel zur Übersichtlichkeit entfernt wurden, vor allem die Layout-Definition. Diese bestimmt in dem Knoten root-layout die Größe und das Aussehen der kompletten Anzeigefläche. Als Nächstes werden einzelne Regionen innerhalb der kompletten Fläche mit Größe und Position festgelegt, welche später über ihre eindeutige ID angesprochen werden können. In dem BODY-Bereich der Datei geht es um den Ablauf der Datei. 10 Scalable Vector Graphics; ein XML basiertes, offenes Vektorgrafik-Format mit Animationsmöglichkeit Kapitel 4 • Verwendete Technologien 31 Im Grunde gibt es zwei verschiedene Arten: parallel oder sequentiell wiederzugebende Informationen. Diese können in beliebiger Form geschachtelt werden. Neben dieser statischen Wiedergabe gibt es auch ein Event-Modell, um auf Ereignisse wie Mausklicks, Tastendrücke, Start bzw. Ende von einzelnen Teilen oder fixen Zeitpunkten in der Echtzeituhr, wie zum Beispiel Sylvester, zu reagieren. Dieses wird in unserem Anwendungsfall allerdings nicht benötigt. Die interessante Anwendung durch Klick auf die gelisteten Ereignisse zu der Position im Stream zu springen, ist durch die in Kaptel 3.3.2 beschriebe Problematik des Zugriffs auf beliebige Positionen im Stream nicht möglich. Die eingebundenen Videos laufen so lange wie in der Datei kodiert. Zusätzlich eingeblendete Daten wie Bilder der Texte, welche keine eigene Laufzeit besitzen, können über verschiedene Attribute gesteuert werden. In dem verwendeten Attribut dur (eine Ablürzung für duration = Laufzeit) ist die Anzeigedauer kodiert. <s m i l> <head> <l a y o u t> <r o o t −l a y o u t width=” 960 ” h e i g h t=” 256 ” background−c o l o r=” b l a c k ” /> <r e g i o n i d=” v i d e o ” l e f t =” 320 ” top=” 0 ” width=” 320 ” h e i g h t=” 256 ” f i t =” f i l l ” background−c o l o r=” b l a c k ” z−i n d e x=” 3 ” /> <r e g i o n i d=” t e x ” l e f t =” 0 ” top=” 0 ” width=” 320 ” h e i g h t=” 256 ” f i t =” f i l l ” background−c o l o r=” w h i t e ” z−i n d e x=” 3 ” /> <r e g i o n i d=” v i d e o 2 ” l e f t =” 640 ” top=” 0 ” width=” 320 ” h e i g h t=” 256 ” f i t =” f i l l ” background−c o l o r=” b l a c k ” z−i n d e x=” 3 ” /> </ l a y o u t> </ head> <body> <par> <v i d e o s r c=”A. Gamers . Day . T r a i l e r . mp4” r e g i o n=” v i d e o ” f i l l =” f r e e z e ” /> <s e q> <t e x t s r c=” t e x t 1 . html ” t y p e=” t e x t / html ” r e g i o n=” t e x ” f i l l =” f r e e z e ” dur=” 5 s ” /> <t e x t s r c=” t e x t 2 . html ” t y p e=” t e x t / html ” r e g i o n=” t e x ” f i l l =” f r e e z e ” dur=” 10 s ” /> <t e x t s r c=” t e x t 3 . html ” t y p e=” t e x t / html ” r e g i o n=” t e x ” f i l l =” f r e e z e ” dur=” 5 s ” /> </ s e q> <v i d e o s r c=”A. Gamers . Day . T r a i l e r . mp4” r e g i o n=” v i d e o 2 ” f i l l =” f r e e z e ” /> </ par> </ body> </ s m i l> Listing 4.8: SMIL Beispielcode Der Quicktime-Player ist zur Zeit nur in der Lage SMIL 1 zu verarbeiten und unterstützt auch keine Anzeige von HTML innerhalb eines SMIL-Dokuments. Eine sehr gute SMIL 2.1 Implementierung ist der freie Ambulant Player11 . Dieser 11 http://www.cwi.nl/projects/Ambulant/ 32 Die Realisierung Abbildung 4.7: Wiedergabe des SMIL-Dokumentes ist für alle wichtigen Plattformen - und zusätzlich für PDAs und eine Beta-Version als Browser Plugin für Firefox12 - verfügbar. 4.2.4 AviSynth Um den Frameserver AviSynth zu programmieren, steht eine mächtige Scriptsprache zur Verfügung. Im Folgenden wird die Ausgabe eines Teilstückes (inklusive Skalierung auf die Zielgröße) eines Videos vorgenommen. Dies wird so im Schnitt angewendet, um den nachfolgenden Tools, welche den Ton und das Bild komprimieren, die passenden Teilstücke aus der Datei bereitzustellen. Da in DirectShow keine framegenaue Ansteuerung möglich ist, sondern der Zugriff über Zeitangaben läuft, findet in dem Script, in Listing 4.9 abgedruckt, als erstes eine Umrechnung in Frames statt. Im nächsten Schritt wird das Bild in die Zielauflösung heruntergerechnet und danach wird der Farbraum für die nachgeschaltete Komprimierung angepasst. Zum Schluss findet das Anfertigen des eigentlichen Ausschnittes aus der Datei statt. c l i p = DirectShowSource ( ”C: \ P r o j e k t \ Video \ N a S t S i c h t a u f L . mpg” ) start1 = 87.45 s t a r t 1 = c e i l ( s t a r t 1 ∗ Framerate ( c l i p ) ) ende1 = 153 ende1 = c e i l ( ende1 ∗ Framerate ( c l i p ) ) b r e i t e = 352 hoehe = 288 r e s i z e d = Lanczos4Resize ( c l i p , b r e i t e , hoehe ) c o l r g b = ConvertToYV12( r e s i z e d ) Trim( c o l r g b , s t a r t 1 , ende1 ) Listing 4.9: AviSynth Script zur Extraktion von Videosequenzen anhand von Zeitstempeln mit gleichzeitiger Auflösungsreduzierung Es ist mit AviSynth auch möglich, mehrere Videos zu einem zu vereinen. Dieses ist relevant, wenn nicht auf SMIL zur Präsentation gesetzt wird, sondern nur 12 Der bekannte Open-Source Web-Browser der Mozilla Foundation ist unter http://www.mozilla.com/firefox/ erhältlich Kapitel 4 • Verwendete Technologien 33 eine einzelne Videodatei am Ende stehen soll. Es ist auch das Einblenden von Schriften und Logos möglich sowie das Erzeugen von Animationen (interessant für Quellenangaben und Copyright-Hinweise, falls aufbereitete Videos weitergegeben werden sollen). Es wäre sogar möglich, große Teile der Annotationen direkt in das Video zu schreiben. In Listing 4.10 ist der Code zu sehen, um zwei Videos zu einem zusammenzufügen und eine animierte Textnachricht darüber einzublenden. c l i p L e f t = DirectShowSource ( ” N a S t S i c h t a u f L . mpg” ) c l i p R i g h t = DirectShowSource ( ” N a S t S i c h t a u f S . mpg” ) StackHorizontal ( c l i p L e f t , c l i p R i g h t ) Animate ( 0 , 1 0 0 , ” s u b t i t l e ” , ” U n i v e r s i t ä t Paderborn − D i d a k t i k d e r I n f o r m a t i k ” , 2 4 0 , 1 5 0 , 0 , 1 5 0 , ” A r i a l ” , 0 , $FF0000 , ” U n i v e r s i t ä t Paderborn − D i d a k t i k d e r I n f o r m a t i k ” , 7 0 , 1 5 0 , 0 , 1 5 0 , ” A r i a l ” , 6 0 , $FF0000 ) Listing 4.10: AviSynth Script zum Verschmelzen von zwei Videos zu einem Auch wenn Avisynth sich bei der Verarbeitung von Videos nur zwischen andere Tools zwischenschaltet und keine eigene Ausgabe auf Hardware generiert, so wird bei Nutzung des (in dieser Implementation verwendeten) DirectShowSource Input-Filters zur Dekodierung der Videos zwingend ein Audio-Treiber benötigt. Die Ursache liegt bei der automatischen Erstellung der DirectShow-Graphen und ließe sich durch manuelle Erstellung von diesen verhindern. Im Normalbetrieb ist diese Eigenheit nicht tragisch, da viele Server heutzutage durch in den Chipsatz integrierte Soundmodule über die nötigen Treiber verfügen. Problematisch wird es durch eine Eigenheit des Remote-Desktop von Windows: Sobald eine Verbindung per Remote-Desktop zum Server besteht, wird das komplette Soundsystem durch Treiber des Remote-Desktop überschrieben13 . Diese Treiber werden von DirectShow allerdings nicht akzeptiert und das Einlesen der Videos in AviSynth schlägt fehl. Zusammen mit der Eigenschaft von AviSynth, Fehlermeldungen sofern möglich- als Video zu rendern, hilft es nicht, die Audiospur zu deaktivieren, um zumindest auf die Bildinformationen Zugriff zu haben. Durch diese Konstellation ist es nicht möglich, AviSynth-Scripte per Remote-Desktop zu debuggen. Es ist zwingend notwendig, sich direkt an den Rechner zu setzen oder Alternativen wie das Virtual Network Computing (VNC) einzusetzen. 4.2.5 VirtualDubMod Das Videoschnitt-Tool VirtualDub14 , welches ursprünglich für die interaktive Bedienung programmiert wurde, besitzt eine flexible Skriptsprache und ein PluginSystem mit einer reichhaltigen Auswahl an Video-Filtern. Es wäre in der Lage gewesen, die Videoschnitte anstelle von AviSynth vorzunehmen, wenn es mehr Videoformate lesen könnte und kann auch als Frameserver für andere Programme 13 Unabhängig davon, ob in der Remote-Desktop-Session die Soundwiedergabe abgestellt wurde oder auf dem Server oder dem Client erfolgen soll 14 http://www.virtualdub.org/ 34 Die Realisierung agieren. Die Scriptsprache von VirtualDub ist allerdings mehr auf die BatchVerarbeitung von Dateien ausgerichtet und schlechter zu lesen. Aufgrund einer Beschränkung auf AVI15 als Containerformat konnten allerdings unter alleiniger Nutzung von VirtualDub weder Eingabe noch Ausgabe wie benötigt realisiert werden. VirtualDubMod16 ist eine separat weiterentwickelte Sammlung von Modifikationen an VirtualDub. Dieses sind unter anderem die Möglichkeit, MPEG2 als Eingabeformat zu nutzen und eine verbesserte Unterstützung von AviSynth. In der realisierten Anwendung wird VirtualDubMod nur dazu verwendet, um aus dem Videodatenstrom die Tonspur zu extrahieren und als WAV abzuspielen. Das hierfür nötige kurze Script ist in Listing 4.11 einzusehen. Dieser Zwischenschritt ist nötig, da Audioencoder in der Regel keine AviSynth-Scripte lesen können. VirtualDub . Open ( ” A v i S y n t S c r i p t . a v s ” , ” ” , 0 ) ; VirtualDub . stream [ 0 ] . SaveWAV( ” Tonspur . wav” ) ; Listing 4.11: VirtualDubMod Script zur Audioextraction Weil sich die Informationen über die zu verarbeitenden Dateien bei VirtualDub im Script befinden, gestaltet sich der Aufruf des Tools (Listing 4.12) recht einfach. VirtualDubMod . e x e / s c r i p t . v c f /x Listing 4.12: Aufruf von VirtualDubMod mit einem Script Ein Problem gibt es, wenn VirtualDubMod aus einem anderen Programm heraus automatisiert aufgerufen wird. Bei dem ersten Start unter einem neuen WindowsBenutzeraccount muss eine Dialogbox, in welcher auf die Lizenzbedingungen hingewiesen wird, manuell bestätigt werden. Dies wird problematisch, wenn VirtualDub von einem System-Dienst aufgerufen wird. Aus diesem Grund ist es wichtig, dass der Dienst während der ersten Ausführung von VirtualDubMod das Recht Datenaustausch zwischen Dienst und Desktop zulassen besitzt. Hierbei ist zu beachten, dass der Austausch nur an lokal angemeldete Administratoren weitergegeben wird und somit ein Zugriff per Remote-Desktop zum akzeptieren nicht ausreicht. 4.2.6 FAAC Der Freeware Advanced Audio Coder17 (FAAC) wird verwendet, um die im WAVFormat vorliegenden Audiodaten in das benötigte AAC-Format umzukodieren. Dabei werden die Audiodaten bereits in einen MP4-Container verpackt, um diese später direkt mit den Videodaten mischen zu können. Es wird eine geringe 15 Audio Video Interleave, ein früher von Microsoft eingeführtes Containerformat http://virtualdubmod.sourceforge.net/ 17 http://www.audiocoding.com/ 16 Kapitel 4 • Verwendete Technologien 35 Variable-Bitrate von durchschnittlich 56 kBit verwendet, um mehr Bandbreite für die Videos zur Verfügung zu haben. Ein Zieldateiname muss nicht verwendet werden. Bei dem in Listing 4.13 dargestellten Aufruf landen die Daten in einer Datei mit dem Namen audio.mp4. f a a c . e x e −b 56 −w a u d i o . wav >n u l Listing 4.13: Aufruf von faac zur Audiokompression 4.2.7 x264 Um die Videodaten in das gewünschte Format zu konvertieren, wird der bereits angesprochene frei verfügbare Video-Codec x264 verwendet. Da dieser von den Autoren nur im Source-Code vertrieben wird, wurde die Binärversion von der Webseite x264.nl verwendet. Die Konvertierung findet zur Zeit mit einer festgelegten Bitrate von 300kBit statt, damit bei zwei gleichzeitig übertragenen Videos mit jeweils 356 kBit (inklusive Ton) auch bei einem kleinen DSL-Anschluß mit 768 kBit noch etwas Bandbreite übrig bleibt. Auf die kleinen DSL-Light-Anschlüsse mit nur 384 kBit Übertragungsrate in Richtung Anwender konnte aufgrund der resultierenden viel geringeren Bildqualität keine Rücksicht genommen werden. x264 . e x e −−b i t r a t e 300 −−p r o g r e s s −−no−p s n r −−q u i e t −−o u tp u t ou t p u t . 2 6 4 i n p u t . a vs Listing 4.14: Aufruf von x264 zur Videokompression Bei dem Aufruf von x264 (Listing 4.14) werden Parameter gesetzt, welche für geringere Textausgaben auf der Konsole sorgen (–quit), bestimmte nicht benötigte Informationen zum Vergleich mit der H.264 Referenzimplemetierung unterdrücken (–no-psnr) oder Informationen über den Fortschritt ausgeben (–progress). 4.2.8 GPAC MP4Box Die zur Verfügung stehenden Audio- und Videodaten müssen nach der Komprimierung mit dem korrekten Codec noch im MP4-Containerformat verpackt werden. Dafür wird das Tool MP4Box verwendet. Dieses bekommt neben den Rohdaten noch die Informationen über die Bildwiederholrate des Videos (-fps 25.000), welche 25 Bilder pro Sekunde beträgt, und bei den Audiodaten zusätzlich die Sprache der Tonspur übergeben (:lang=deu). Es besteht die Möglichkeit, weitere Tonspuren, z.B. einen zusätzlichen Audiokommentar, hinzuzufügen. Der Parameter -hint dient dazu, das Video um für das RTSP-Streaming nötige zusätzliche Informationen zu erweitern. 36 Die Realisierung MP4Box . e x e −f p s 2 5 . 0 0 0 −add i n p u t . 2 6 4 −add i n p u t . m4a : l a n g=deu −new o u tp u t . mp4 >n u l Listing 4.15: Aufruf von MP4Box zur Erstellung des Containers 4.2.9 NetSpell Bei NetSpell18 handelt es sich um eine frei verfügbare Bibliothek zur Rechtschreibprüfung. Es werden bereits Wörterbücher für viele Sprachen mitgeliefert. Die für diesen Anwendungsfall wichtigsten Sprachen - Deutsch und Englisch sind im Lieferumfang enthalten. Für eine Erweiterung um weitere Wörter oder ganze Sprachen stehen Funktionen und Tools bereit. Die Bedienungs-Oberfläche des NetSpell-Systems lässt sich durch eine XMLKonfigurations-Datei einfach in weitere Sprachen übersetzen. 4.3 Verknüpfung der externen Tools im Konvertierungslauf Das Zusammenspiel der verschiedenen Tools zur Audio- und Videoverarbeitung ist in Abbildung 4.8 dargestellt. Diese Abbildung ist eine Detailansicht von den Abläufen, die in Abbildung 4.5 als Schnitt und Konvertierung zusammenge- fasst dargestellt sind. Die Ausführung der einzelnen Schritte erfolgt in der aktuellen Implementation sequentiell, obwohl teilweise eine parallele Ausführung möglich wäre (siehe auch die Erweiterungsmöglichkeiten in Kapitel 5.1). Der AviSynth Prozess muss leider sowohl für die Video- als auch für die Audiokompression zum Schnitt aufgerufen werden, da es zu viel Speicherplatz kosten würde, wenn in einem Schritt mit der Audio-Extraktion auch die Videodaten unkomprimiert auf Festplatte geschrieben würden. Das zur Videokompression eingesetzte x264 ist auch nicht in der Lage die Audiodaten abzuspeichern. AviSynth könnte schon im DirectShow-Input die Dekodierung auf Audio-Daten zu begrenzen, aber in diesem Fall ist ein Schneiden der Daten mittels der Trim()-Funktion nicht mehr möglich. Aus diesem Grund werden zwei komplette AviSynth Durchläufe während der Konvertierung genutzt. Zur Zeit beginnt der Schnitt mit der Extraktion der Audiodaten. Als Nächstes wird das Video-Bild neu komprimiert (und anhand der im Export-Dialog vorgenommen Angaben - z.B. eine Änderung der Auflösung - überarbeitet). Nach der folgenden Kodierung der Audiodaten in das AAC-Format werden die Audio- und Videodaten in den MP4-container verpackt. 18 http://www.loresoft.com/Applications/NetSpell/default.aspx Kapitel 4 • Verknüpfung der externen Tools im Konvertierungslauf ViLMSplitMovie Extraktion der Audiodaten Zuschneiden der Videodaten Videodekompression Video in H.264 Audio in AAC Verpacken als MP4 VirtualDubMod AviSynth DirectShow x264 FAAC MP4Box Abbildung 4.8: Ablauf des Schnittprozesses inklusive Konvertierung in ein zum RTSP-Streaming kompatibles MP4-Format Als letzter Schritt im Schnittprozess kann die fertige Datei nun in den Ziel-Ordner verschoben werden. Nach dem Löschen der temporären Dateien wird die SMILDatei erzeugt. Zusätzlich wird der passende Code zum Abspielen innerhalb einer HTML-Datei, unter Nutzung des Quicktime-Players, im selben Verzeichnis abgelegt. 37 38 Die Realisierung 5 Zusammenfassung und Ausblick Die am Anfang der Arbeit gesetzten Ziele wurden mit der Entwicklung eines umsetzbaren, den Anforderungen entsprechenden, Konzeptes und der Implementation von diesem erreicht. Im Laufe dieses Prozesses wurden viele der Videokompression und -bearbeitung zugrunde liegenden Technologien evaluiert. Die aktuelle Implementation ist bereits gut verwendbar, aber als Prototyp naturgemäß noch nicht perfekt. Während der Implementierung wurden manche in der vorhandenen Anwendung benutzten Begriffe abgeändert. Dies geschah, um den Fokus der Implementation etwas von ihrer Ursprungsanwendung, der Evaluation in der Lehrerausbildung, zu entfernen. Der Grund liegt darin, dass dieses Konzept der Evaluation auch in anderen Bereichen gut eingesetzt werden kann. Als aktuelles Einsatzgebiet wären zum Beispiel Kurse zur Vorbereitung von Bewerbungsgesprächen denkbar - oder auch der Einsatz in der Wirtschaft, um Verkäufer bezüglich Ihres Auftretens zu schulen. Es gibt, außer einer Erweiterung des Einsatzhorizonts, natürlich auch viele Möglichkeiten, um die prototypische Implementation dieses Konzepts weiter zu verbessern. Ein paar Anregungen und Ansätze hierfür sind im Folgenden zu finden. 5.1 Erweiterungs- und Optimierungsmöglichkeiten Es gibt durch die offene Entwicklung des Systems zahlreiche potentielle Erweiterungsmöglichkeiten. Zur Zeit fehlt noch ein Verwaltungstool für die zu Schnitt und Komprimierung anstehenden Jobs. Es kann passieren, dass Jobs durch die Anwender mehrfach übermittelt werden, da diese noch überarbeitet wurden. In diesem Fall wird die aktuelle Implementation beide Jobs abarbeiten und der später verarbeitete wird die Dateien des vorherigen überschreiben, sofern die Phasen noch identische Namen haben. Hier könnte mit einem Verwaltungs-Tool, das Jobs löschen kann, Abhilfe geschaffen werden. Eine weitere interessante Erweiterung wäre die Möglichkeit, einzelne Jobs zu priorisieren, damit wichtige Jobs bevorzugt verarbeitete werden. Es besteht die Möglichkeit, die Bildqualität der geschnittenen Dateien bei konstanter Bitrate zu erhöhen. Dafür ist der einmalige Einsatz von CPU-Zeit während der Komprimierung und Nutzung weiterer Encoding-Durchläufe (N-Path Enco- 39 40 Zusammenfassung und Ausblick ding) notwendig. Die Unterschiede bei Nutzung eines zweiten Durchlaufs sind mit bloßem Auge sichtbar. Um den Durchsatz an Jobs zu erhöhen, bietet es sich an, die Verarbeitung zu parallelisieren. So ließe sich innerhalb eines Jobs zum Beispiel die Kompression der Audiodaten gleichzeitig mit der Kompression der Videodaten durchführen, um Mehrprozessorsysteme besser auszulasten. Es ließen sich natürlich auch mehrere Jobs gleichzeitig abarbeiten, sofern die Ressourcen des Servers (hier wird neben der CPU auch eine große Portion I/O Last1 erzeugt) ausreichen. Eine verbesserte Auslastung der Server ließe sich unter Umständen auch durch Wechseln des H.264-Codecs von x2642 hin zu ELDER4X2643 erreichen. In der aktuellen Implementation wird wenig Aufwand zur Präsentation der geschnittenen Videos getrieben. Die erstellten beispielhaften SMIL und HTML Dateien dienen als Vorlage für die eigene manuelle Integration. Eine automatische Aufbereitung der Daten in komplexeren SMIL Code inklusive Präsentation von Ereignissen und Materialien (ähnlich zu dem in Kapitel 4.2.3 dargestellten) ließe sich natürlich auch durchführen. Ebenso wäre eine automatische Bestückung eines Streaming-Servers mit den erstellten Dateien möglich. Zur Zeit werden die Videos in den erstellten SMIL-Dateien per HTTP referenziert. Dieses funktioniert gut, da hierbei kein Spulen nötig ist und die Player die Daten schon während der Übertragung abspielen. Die automatische Bestückung eines Streaming-Servers wäre allerdings die sauberere Lösung. Weitere Möglichkeiten bestehen in der Nutzung der Flash Plattform zur Präsentation der fertigen Daten. Der Vorteil gegenüber SMIL besteht in der höheren Verbreitung der zur Ansicht nötigen Browser-Plugins. Der Nachteil wäre ein deutlich erhöhter Aufwand, um die Präsentation zu erstellen. Dies wäre allerdings einmaliger Entwicklungsaufwand, da sich durch die Programmierung per Action-Script ein individueller Player entwickeln lassen würde, der aus XML-Dateien die nötigen individuellen Informationen der Phasen ausliest und aufbereitet anzeigt. In diesem Fall würden auch bestehende Schnitte von Neuerungen im PräsentationsProgramm profitieren. Auch die Nutzung einer Template-Engine zum Erstellen der Batch-Dateien und Programm-Skripte wäre sinnvoll. Damit ließen sich Änderungen an Schnitt, Komprimierung und Export viel schneller vornehmen. Benötigt wird in diesem Fall eine mächtige Template-Sprache, ähnlich der für PHP enwickelten SMARTYEngine4 . Die Template-Engine sollte in der Lage sein, Berechnungen durchzuführen 1 abhängig von den verwendeten Ausgangsmaterialien. Besonders stark bei kaum oder unkomprimiertem Video wie im DV-Format 2 nutzt bereits Multithreading, allerdings skaliert er nicht besonders gut 3 parallEL encoDER for X264, http://www.funknmary.de/bergdichter/projekte/index. php?page=ELDER Ein sich in Entwicklung befindlicher 2-Pass Encoder, der zur Parallelisierung das Aufsplitten der Eingangsdaten, gleichzeitige Komprimierung und anschließendes Zusammenfügen nutzt 4 http://www.smarty.org Kapitel 5 • Erweiterungs- und Optimierungsmöglichkeiten (diese werden benötigt um Positionen, Größen und Zeitangaben umzurechnen). Ebenso werden auch Kontrollstrukturen benötigt, um zum Beispiel bei der Aufbereitung über die Annotationen zu iterieren. Sehr naheliegend wäre auch die Unterstützung von mehr Optionen beim Export. Vor allem bezüglich Qualität und Bitrate der erstellten Dateien. Wobei hier darauf geachtet werden muss, noch eine einfache Bedienung zu gewährleisen. Dies könnte durch das Zusammenfassen von unterschiedliche Konfigurations-Optionen zu Profilen erreicht werden. Denkbar wären hier ein Profil für das Streaming im Web und ein anderes mit höherer Qualität, welches für die Wiedergabe auf TV Geräten per SVCD oder DVD optimiert ist. In manchen Anwendungs-Szenarien mag die Besprechung in einer großen Gruppe vor dem Fernseher angebracht sein, oder dass die Teilnehmer die Stunde mit nach Hause bekommen. 41 42 Abbildungsverzeichnis 2.1 Aktuelle ViLM Anwendung (mit Fehlermeldung beim Öffnen von Materialien) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Aktueller HTML-Export . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1 Ziel-Architektur des neuen Systems . . . . . . . . . . . . . . . . . . 10 3.2 Ziel-Architektur mit Nutzung eines Netzwerkdateisystems für die Markierung und automatischem Videoschnitt . . . . . . . . . . . . 16 4.1 Aufbau des Projektverzeichnisses . . . . . . . . . . . . . . . . . . . 20 4.2 Screenshot des Synchronisations-Tools . . . . . . . . . . . . . . . . 20 4.3 Screenshot des Annotations-Tools . . . . . . . . . . . . . . . . . . . 21 4.4 Screenshot des Controls ZzzzRangeBar . . . . . . . . . . . . . . . . 22 4.5 Zusammenspiel von Annotations-Tool und Videoschnitt-Dienst . . 23 4.6 DirectShow Graph zum Abspielen von Videos . . . . . . . . . . . . 30 4.7 Wiedergabe des SMIL-Dokumentes . . . . . . . . . . . . . . . . . . 32 4.8 Ablauf des Schnittprozesses inklusive Konvertierung in ein zum RTSP-Streaming kompatibles MP4-Format . . . . . . . . . . . . . 37 I II Listings 4.1 Objekt für .NET Remoting . . . . . . . . . . . . . . . . . . . . . . 25 4.2 Sourcecode, um einen .NET Remoting Server online zu stellen . . . 26 4.3 Sourcecode, um einen .NET Remoting Client mit einem Server zu verbinden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.4 C#-Code um ein CS-Script auszuführen . . . . . . . . . . . . . . . 27 4.5 C#-Code um CS-Script auszuführen . . . . . . . . . . . . . . . . . 27 4.6 IDL-Code um DLLs für C# zu erstellen . . . . . . . . . . . . . . . 29 4.7 Batch-Datei um IDL-Code zu C# DLLs zu kompilieren . . . . . . 29 4.8 SMIL Beispielcode . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.9 AviSynth Script zur Extraktion von Videosequenzen anhand von Zeitstempeln mit gleichzeitiger Auflösungsreduzierung . . . . . . . 32 4.10 AviSynth Script zum Verschmelzen von zwei Videos zu einem . . . 33 4.11 VirtualDubMod Script zur Audioextraction . . . . . . . . . . . . . 34 4.12 Aufruf von VirtualDubMod mit einem Script . . . . . . . . . . . . 34 4.13 Aufruf von faac zur Audiokompression . . . . . . . . . . . . . . . . 35 4.14 Aufruf von x264 zur Videokompression . . . . . . . . . . . . . . . . 35 4.15 Aufruf von MP4Box zur Erstellung des Containers . . . . . . . . . 36 III IV Literaturverzeichnis [Aja06] JavaScript und AJAX. Galileo Computing, 2006. [Avi06] AviSynth Manual. http://www.avisynth.org/index.php?page= AviSynthManual – Zugriff am 20. September 2006, 2006. [BR04] Dick C.A. Bulterman and Lloyd Rutledge. SMIL 2.0 - Interactive Multimedia for Web and Mobile Devices. X.media.publishing. Springer, ISBN: 3-540-20234-X, 2004. [Cor06] Microsoft Corporation. Windows media format sdk. http: //msdn.microsoft.com/library/default.asp?url=/library/ en-us/dnwmt/html/WMFormat 9 SDK Intro.asp – Zugriff am 20. September 2006, 2006. [DAS02] Mark Russinovich David A. Solomon. Inside Microsoft Windows 2000. Microsoft Press Deutschland, 2002. [Doh05] Michael Dohmen. Multimediale Evaluation in der Informatiklehrerausbildung. In A.H. Hilligus and H.-D. Rinkens, editors, Zentren für Lehrerbildung — Neue Wege im Bereich der Praxisphasen, pages 181–190. 2005. [DP06] Hajo Schulz Dirk Primbs. Weniger ist mehr - Software entwickeln für eingeschränkte Benutzerrechte. c’t magazin für computer und technik, (23-2006):214ff, November 2006. [Gun00] Eric Gunnerson. C Sharp - Die neue Sprache für Microsofts .NETPlattform. Galileo Press, 2000. ISBN: 3898421074. [HS98] A. Rao Netscape R. Lanphier RealNetworks H. Schulzrinne, Columbia U. Rfc2326 - real time streaming protocol (rtsp). Technical report, IETF, 1998. [Inca] Apple Computer Inc. Darwin Streaming Server. http://developer. apple.com/opensource/server/streaming/index.html – Zugriff am 14. Mai 2006. [Incb] Sun Microsystems Inc. Java(tm) media framework (jmf) specification 2.0 final release. http://java.sun.com/products/java-media/jmf/ – Zugriff am 23. September 2006. [Inc99] Akamai Technologies Inc. Apple and Akamai Reveal Apple Investment to Cement Strategic Agreement. http://www.akamai.com/html/ about/press/releases/1999/press 081899c.html – Zugriff am: 02. November 2006, 08 1999. V VI [Inc00] Literaturverzeichnis Apple Computer Inc. Inside Macintosh: QuickTime Reference. http://developer.apple.com/documentation/QuickTime/ REF/QT41 HTML/QT41WhatsNew-72.html – Zugriff am 20. September 2006, 2000. [Inc05a] Apple Computer Inc. SMIL Scripting Guide for QuickTime. http://developer.apple.com/documentation/quicktime/ Conceptual/QTScripting SMIL/QTScripting SMIL.pdf, 06 2005. [Inc05b] RealNetworks Inc. Helix software developer’s guide. https://common. helixcommunity.org/nonav/2003/HCS SDK r5/helixsdk.htm – Zugriff am 23. September 2006, 03 2005. [Inc06] Adobe Systems Incorporated. Flash Player Statistics. http://www. adobe.com/products/player census/flashplayer/ – Zugriff am 15. Oktober 2006, 2006. [IR04] Mario Szpuszta Ingo Rammer. Advanced .NET Remoting. APress,US, 2004. [Koc01] Daniel Koch. Praxisbuch XHTML. Addison-Wesley, 2001. [Koc06] Daniel Koch. Wiederkehr des Lächelns - SMIL 2.1 mit neuen und erweiterten Funktionen. iX, (08-2006):144ff, 2006. [Küh06] Andreas Kühnel. Visual C# 2005. Das umfassende Handbuch. Galileo Press, 2006. [Mag99] Johannes Magenheim. Vilm: Visualization of learning and teaching strategies with multimedia in teacher education. In Piet Kommers and Griff Richards, editors, Proceedings of World Conference on Educational Multimedia, Hypermedia and Telecommunications 1999, pages 1593– 1594, Chesapeake, VA, 1999. AACE. [Mic] R Server 2003 R2 Platform SDK. Microsoft Corporation. Windows [MP406] (GPAC) MP4Box Documentation, 2006. [Pes03] Mark D. Pesce. Programming Microsoft DirectShow for Digital Video and Television. Microsoft Press A Division of Microsoft Corporation One Microsoft Way Redmond, Washington 98052-6399, 2003. ISBN: 0-7356-1821-6. [Ric04] Iain E. G. Richardson. H.264 and MPEG-4 video compression. Wiley, 2004. [Vir05] VirtualDubMod Help. in VirtualDubMod Distribution http:// virtualdubmod.sourceforge.net/, 2005. [Zot06a] Dr. Volker Zota. Flash for Video. c’t magazin für computer und technik, (21-2006):216f, 2006. [Zot06b] Dr. Volker Zota. Videosynthese. c’t magazin für computer und technik, (08-2006):190ff, 2006.