textnode die digitalen Abenteuer des Andreas T.

29May/090

Bug bei gotoAndStop (in AS3 Flash Player 9)

Da soll mal einer drauf kommen. Ein ganz merkwuerdiger Bug ereignet sich, wenn man mehrere Frames in einem MovieClip hat und in jedem Frame ein Textfeld liegt. In AS3 und Flash Player 9 kommt es zu einem Fehler, wenn man den Frame per gotoAndStop() wechselt und dann sofort versucht auf das Textfeld zuzugreifen.

trace(mc.textField); // > [object TextField]
mc.gotoAndStop(2);
trace(mc.textField); // > null obwohl auch in diesem Frame ein Textfeld mit dem Instanznahmen liegt

Ist das Problem erstmal erkannt, findet sich die Lösung recht schnell: Das Problem tritt nur bei Textfeldern auf. Legt man um das Textfeld einfach noch einen MovieClip herum, funktioniert es wieder.

trace(mc.container_mc.textField); // > [object TextField]
mc.gotoAndStop(2);
trace(mc.container_mc.textField); // > [object TextField]

Aber das ist ja auch nicht der einzige Bug in AS3 mit Flash Player 9 im Zusammenhang mit gotoAndPlay / gotoAndStop. Google weiss da mehr.

Tagged as: , No Comments
5Nov/080

Flash und die Typsicherheit

Vor allem wenn eine grosse Nutzergruppe extrem wichtig ist, wird immer noch mit AS2 gearbeitet. Ich bin mir nicht sicher wie es in AS3 ist, aber die Typsicherheit in AS2 laesst zu wuenschen uebrig!

Liest man z.B. einen Dateipfad aus einem XML-Dokument aus und speichert diesen in einer als String typisierten Variable var path:String, meldet der Compiler keinerlei Fehler. Auch das Verfrachten des Wertes in noch andere streng als String typisierte Variablen, gibt es keine Probleme. Erst wenn man versucht den Pfad in z.B. einem MovieClipLoader als Bildpfad zu benutzen, geht es schief. Allerdings auch hier ohne Fehlermeldung. Das Bild wird einfach nicht geladen.

Umgehen kann man dieses Problem durch die explizite Konvertierung in einen String. Am besten sofort beim Auslesen aus dem XML.
var path:String = String(xml.firstChild);

Tagged as: , No Comments
7Apr/080

ScreenCapture mit Zinc

Wenn man in Flash per Zinc die Screenshot-Funktion nutzen möchte, muss man darauf achten, dass der Screenshot zu einem undefinierbaren Zeitpunkt geschieht. Und wenn ich undefiniert sage, meine ich auch undefiniert. Die Funktion wird nicht ausgeführt, wann sie eigentlich laut dem Code ausgeführt werden sollte.

Dieser Code liefert einen Screenshot, auf dem mc nicht zu sehen ist:
mc._visible = true;
mdm.Image.ScreenCapture.toBmp(...);
mc._visible = false;

Hier ist mc aber auch nicht zu sehen:
mc._visible = true;
mdm.Image.ScreenCapture.toBmp(...);
//mc._visible = false;

Was ist da los? Wann wird der Screenshot gemacht? In der Vergangenheit?

Tagged as: , , , No Comments
29Oct/070

JW Media Player mit RTMP

Ueber den JW Media Player einen RTMP - Stream laufen zu lassen gestaltete sich ein wenig schwieriger als gedacht. Eine flv Datei abzuspielen war wirklich einfach, mit dem Stream eines Red5 - Servers gab es doch ein paar Probleme. Um das richtige Video zu bekommen, muss man 2 Parameter setzen:

  1. file: der Pfad zum Ordner auf dem Server
  2. id: der Name des des eigentlichen Videos

In Kombination mit swfObject sah das ganze bei mir dann so aus:

var video = new SWFObject("mediaplayer.swf","video",width,height,"8");
video.addVariable("file","http://domainname.com/oflaDemo");
video.addVariable("id", videofile);
video.write(id);

Das Streaming wird in der Ladeanzeige nicht so schoen dargestellt, wie ich schon mal geschrieben habe, aber der Player ist trotzdem noch ganz grosse klasse.

30Aug/070

Flash Media Player

Oft habe ich die flv-Playback-Komponente von Macromedia benutzt, um Flash-Videos wiederzugeben. Dabei gibt es so viele andere und vor allem bessere Loesungen. Die meiner Meinung nach aktuell beste ist der JW Media Player von Jeroen Wijering.

Der Player hat schon viele praktische Features integriert. So lassen sich z.B. ein Vorschaubild einfach per Parameter vor das Video einbinden, Playlists mit verschiedenen Medientypen abspielen, Animationen zum Video einblenden und viele Dinge mehr, die allesamt nuetzlich sind. Besonders praktisch ist die automatische Bandbreitenerkennung. Man gibt eine Bilddatei an, die zum Test heruntergeladen wird, wobei die Geschwindigkeit getestet wird. Anhand dieses Wertes wird automatisch ein Video mit passender Datenrate geladen.

Einziger unschoener Punkt, den ich bisher gefunden habe, ist eine nicht so gute Streamingunterstuetzung. Bei einem RTMP Stream eines Red5 Servers, wird aus unbekannten Gruenden nicht die Gesamtlaenge des Videos angezeigt. Man kann also nicht direkt zum Ende spulen, was ein riesen Vorteil fuer den Stream gegenueber eines Filedownloads waere, sondern kann nur zu schon angesehenen Stellen im Video springen.

Der Player ist Open Source und unter einer Creative Commons Vereinbarung veroeffentlicht. Fuer die kommerzielle Nutzung kann man fuer einen geringen Preis eine Lizenz erwerben. Der Player ist komplex, aber einigermassen leicht zu modifizieren, dem gut aufgeraeumten und strukturiertem Code sei Dank! Wenn es wirklich noetig wird, versuche ich mich vielleicht mal an besseren Streaming-Features.

http://www.jeroenwijering.com/?item=JW_Media_Player

Tagged as: No Comments
9Jul/070

Google liest Text aus swf?

google liest flashGerade eben ist mir zum ersten Mal aufgefallen, dass Google auch Inhalte aus Flashfilmen auslesen und in den Index uebernehmen kann. Ist das schon lange so? Habe ich etwas nicht mitbekommen?

Ploetzlich gilt die alte Faustregel "Flashseiten macht man nicht, weil man sie nicht fuer Suchmaschinen optimieren kann" nicht mehr so ganz. Das mag in Teilen noch stimmen, optimal sind Flashseiten bestimmt noch immer nicht. Die Frage ist, ob ein Bot auch semantische Daten aus dem Flashfilm ziehen kann, wie es in HTML durch z.B. die

h1, p, strong ... 

-Tags gemacht wird. Und obwohl Google die mit Abstand (zumindest in Deutschland) wichtigste ist, gibt es ja auch noch andere Searchengines. Koennen die das auch?

Tagged as: , , No Comments
10May/070

div-Layer und Flash-Movies

Manche Probleme tauchen unvermittelt auf und kosten Unmengen an Zeit. Ein solches ist z.B. die Aufgabe in einem HTML-Layout ein div-Layer ueber einen Flashfilm zu positionieren. Die Positionierung per position: absolute und z-index sollte kein Problem darstellen, doch verdeckt der Flashfilm in fast allen Browsern die eigentlich darueber angeordnete Ebene, was schlichtweg ein Bug zu sein scheint.

Die Loesung des Problems ist ganz einfach und heisst:
wmode = transparent

Dadurch, dass man den Hintergrund des Flashfilms transparent setzt, funktioniert die Anzeige der Layers wieder in der richtigen Reihenfolge. Der Code sieht so aus:

im Tag object

<param name="wmode" value="transparent">

im Tag embed

wmode="transparent"

Und wer das swfObject benutzt:

so.addParam('wmode', 'transparent');

Auf manchen Systemen scheint das Flash-PlugIn Probleme zu haben die Transparenz darzustellen (ich habe von Mac und Linux gehoert). Ob dieser Workaround dann noch funktioniert, konnte ich nicht in Erfahrung bringen.

Weiterhin gibt es Bugs in Flashfilmen, wenn wmode = transparent gesetzt ist. Teilweise gab es merkwuerdige Effekte beim Ausfuellen von Formularen. z und y waren bei der Eingabe in Textfeld-Komponenten vertauscht, Zeichen wie das @ waren gar nicht mehr auf der Tastatur zu finden. Wer also Formulare in seinem Flashfilm hat, sollte de Hintergrund von Flash nicht auf transparent schalten! Hier lauern boese Bugs!

10Apr/070

chillout in a flash (-synthesizer)

Andre Michelle experimentiert schon seit einiger Zeit mit Sound in Flash herum. Waehrend ich noch immer gruebel, wie man ueberhaupt einen Ton mit AS erzeugen kann, baut er in seinem Labor mit Hilfe eines Flash-Synthesizers ein "Chillout-Movie". Erinnert insgesamt ein wenig an Elektroplankton. Sehr angenehm eigentlich. Das kann ich mir laenger anhoeren.

http://lab.andre-michelle.com/chillout-planet-earth

Tagged as: No Comments
20Mar/070

SWFUpload

Durch Ajaxian wurde ich auf ein kleines Tool aufmerksam: SWFUpload. Eine JS/Flash Kombination, die sich dem guten File Selection Dialog von Flash bedient. Von Flash bekommt man ansonsten gar nichts mit. Der Dialog wird ueber JS aufgerufen, die ausgewaehlten Dateien landen in einer HTML (in CSS stylebaren) Liste und werden dann schoen der Reihe nach hochgeladen. Die Demo sah sehr vielversprechend aus.

Mehr gibts, wenn ich es getestet habe.

EDIT: Eine Alternative zu SWFUpload stelle ich übrigens hier vor: http://parentno.de/text/multiple-file-uploads

http://swfupload.mammon.se/