prev up next

Darstellung eines Flashfilmes

Bis zur Darstellung eines Grafikobjektes laufen die folgenden Schritte ab:
  1. ein Definitionstag definiert das Grafikobjekt
  2. das Grafikobjekt erhält eine eindeutige Kennung (ID)
  3. die Kennung wird in einer Referenzliste gespeichert
  4. ein Kontrolltag referenziert das Objekt über seine Kennung und stellt es auf dem Bildschirm dar

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.


Abbildung 4: Snapshot eines Flashfilmes

Durch Parsen sichtbar gemachte Tags des SWF Filmes (Snapshot in obiger Abbildung.)
***** 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.


prev up next