In diesen Schritten wird deutlich, warum ein Flashfilm streambar ist:
Da Kontrolltags immer nur auf Definitionsblöcke, die
weiter vorne in der Datei stehen, Bezug nehmen dürfen, ist es nicht nötig, auf die Darstellung des
Filmes zu warten bis dieser komplett heruntergeladen ist. Er kann bis zu dem
Frame, bis zu dem er bereits aus dem Internet bezogen wurde, sofort dargestellt werden.
Um die Struktur eines Flashfilmes noch besser zu verstehen, wird ein Flashfilm mit einem Parser ausgelesen,
daß heißt das Binärformat wird in für den Menschen lesbaren Text umgewandelt.
Ein solcher Parser ist unter
[Oswf2001] erhältlich.
Das Parsen eines Flashfilmes wird einfach auf der Kommandozeile
mit dem Kommando swfparser Flashdatei.swf
durchgeführt. Ebenfalls auf der Komandozeile findet dann die
Ausgabe der geparsten Datei statt. Bespielhaft soll ein
Film geparst werden, welcher ein Quadrat enthält, das in zwei Schritten um 60 Grad
gedreht wird und einen Kreis, der sich nicht ändert (Abbildung 25).
In dem zugehörigen Quellcode 2.3.2, das Ergebnis des Parsens, sind die im Flashfilm enthaltenen Informationen
näher aufgeschlüsselt.
***** Dumping SWF File Information ***** ----- Reading the file header ----- FWS File version 4 File size 258 Movie width 300 Movie height 300 Frame rate 3 Frame count 3 ----- Reading movie details ----- <----- dumping frame 0 file offset 29 -----> tagLen 54: tagDefineShape3 tagid 1 tagLen 5: tagPlaceObject2 flags 2 depth 0 tag 1 tagLen 91: tagDefineShape3 tagid 2 tagLen 5: tagPlaceObject2 flags 2 depth 3 tag 2 tagLen 0: tagShowFrame <----- dumping frame 1 file offset 198 -----> tagLen 4: tagRemoveObject tagid 1 depth 0 tagLen 19: tagPlaceObject2 flags 6 depth 1 tag 1 tagLen 0: tagShowFrame <----- dumping frame 2 file offset 227 -----> tagLen 4: tagRemoveObject tagid 1 depth 1 tagLen 19: tagPlaceObject2 flags 6 depth 2 tag 1 tagLen 0: tagShowFrame <----- dumping frame 3 file offset 256 -----> tagLen 0: tagEnd ***** Finished Dumping SWF File Information ***** |
Als erstes sind die Informationen des Dateiheaders angegeben. Der Film liegt in der
Version 4 vor und ist insgesamt 258 kB groß. Die Größe des Filmes in Pixel beträgt
300*300, die Framerate beträgt drei Frames pro Sekunde und insgesamt sind drei Schlüsselbilder in
dem Film enthalten.
Es folgen dann die Definitions- und Kontrolltags des Filmes.
Im ersten Frame (Frame 0) werden die beiden Objekte definiert und im Film plaziert. Das Tag
tagShowFrame gibt an, daß dieses Frame vollständig ist und dargestellt werden kann.
In der Ausgabe des Parsers ist jedoch nicht ohne weiteres zu erkennen welches Objekt welche
ID erhält. Bei der Betrachtung der gesamten Datei wird deutlich, daß das Quadrat die ID 1
und der Kreis die ID 2 erhält, da nur das Quadrat gedreht wird und daher mehrfach aus dem Film entfernt
und wieder eingefügt wird.
In den weiteren beiden Frames wird das Quadrat gedreht. Hierzu wird zunächst das Quadrat mit dem
Tag tagRemoveObjekt und der Angabe der Tagid 1 entfernt, wieder neu plaziert und das Frame
wiederum dargestellt. Leider gibt der Parser nicht die Kontrolltags an, die das Quadrat drehen.
Das nächste Frame ist genauso aufgebaut wie das vorherige und im letzten Frame ist lediglich
das Tag tagEnd enthalten, welches das Ende des Filmes anzeigt.
Flashfilme sind, wie bereits erwähnt, in binärcodierten und tagbasierten Dateien abgelegt.
Ist es nun notwendig alle Tags und Bitcodierungen zu kennen, um eine solche Datei zu erzeugen?
Macromedia hat das SWF Software Development Kit (kurz SWF-SDK) kostenlos zur Verfügung gestellt. Mit diesem
SWF-SDK ist es möglich Flashfilme über C++ Klassen zu erzeugen. Wie dieses SDK genutzt wird,
ist im nächsten Abschnitt beschrieben.