CuePoints und F4V-Videos – Auf den ersten Blick scheint mit dem neuen Flash Media Encoder alles in Ordnung, da man CuePoints nun auch im F4V-Format setzen kann. Allerdings ist es doch nicht so einfach wie es scheint …
XMP – Extensible Metadata Platform
Bei XMP handelt es sich um einen Metadaten-Standard, den Adobe bereits im Jahr 2001 eingeführt hat. Dieser wird nun seit CS4 verstärkt von den Programmen der Creative Suite eingesetzt wird.
Sie können XMP-Daten (Extensible Metadata Platform), zum Beispiel Titel, Autor, Beschreibung, Copyright-Hinweise, in ihre FLA-Dateien einschließen. XMP ist ein Metadatenformat, das auch von bestimmten anderen Adobe-Anwendungen interpretiert werden kann.
Interessanterweise sind diese XMP-Metadaten auch in Videos enthalten, die mit dem Flash Media Encoder erstellt werden. Dort sollen z.B. auch die transkribierten Texte des Audio-to-text-Features stehen.
Encoding: F4V und Cuepoints
Erstellt man im Adobe Media Encoder Cue-Points, ist dies allen Anschein nach sowohl für FLV als auch F4V möglich. Die Einstellungen sind in beiden Formaten gleich, in Wirklichkeit werden die Cuepoints aber unterschiedlich gespeichert.
In der Flashhilfe ist zu lesen:
Cue-Points können in die XMP-Metadaten einer F4V-Datei eingebettet werden, die Analyse dieser Daten erfordert jedoch benutzerdefinierten ActionScript-Code.
Heißt also nichts anderes, als dass im Gegensatz zum FLV-Format bei MPEG-4-Files (.f4v) die gesetzten Cuepoints nicht automatisch funktionieren :-(
ActionScript: F4V, Cuepoints, XML, XMP
Die Lösung liegt darin, dass man selbst AS-Code schreiben muss, um aus den XMP-Metadaten im XML-Format die Cuepoints herauszulesen.
Hier ein einfaches Beispiel, wie man zuerst einmal den kompletten (rohen) XMP-Inhalt in das „Ausgabe“-Fenster von Flash ausgibt.
Hinweis: Das Registrieren eines Eventlistener ist nicht nötig!
[as]
var videoConnection:NetConnection = new NetConnection();
videoConnection.connect(null);
var videoStream:NetStream = new NetStream(videoConnection);
videoStream.client = this;
var video:Video = new Video();
video.width = 240;
video.height = 135;
addChild(video);
video.attachNetStream(videoStream);
videoStream.play(„hubblecast-hd.f4v“);
function onXMPData(infoObject:Object):void {
trace(infoObject.data);
}
[/as]
Hilfreich für das weitere Verständnis sind übrigens die Beiträge ActionScript3: XML und XML Namespaces.
Das ausdefinierte Funktion onXMPData
ist etwas komplexer. Sie sieht so aus:
[as]
function onXMPData(infoObject:Object):void {
var cuePoints:Array = new Array();
var cuePoint:Object;
var strFrameRate:String;
var nTracksFrameRate:Number;
var strTracks:String = „“;
var onXMPXML = new XML(infoObject.data);
// Set up namespaces to make referencing easier
var xmpDM:Namespace = new Namespace(„http://ns.adobe.com/xmp/1.0/DynamicMedia/“);
var rdf:Namespace = new Namespace(„http://www.w3.org/1999/02/22-rdf-syntax-ns#“);
for each (var it:XML in onXMPXML..xmpDM::Tracks) {
var strTrackName:String = it.rdf::Bag.rdf::li.rdf::Description.@xmpDM::trackName;
var strFrameRateXML:String = it.rdf::Bag.rdf::li.rdf::Description.@xmpDM::frameRate;
strFrameRate = strFrameRateXML.substr(1,strFrameRateXML.length);
nTracksFrameRate = Number(strFrameRate);
strTracks += it;
}
var onXMPTracksXML:XML = new XML(strTracks);
var strCuepoints:String = „“;
for each (var item:XML in onXMPTracksXML..xmpDM::markers) {
strCuepoints += item;
}
//trace(strCuepoints);
var cpXML:XML = new XML (strCuepoints);
// CP in Array schreiben
for (var i:Number=0; i < cpXML..rdf::Description.length(); i++) {
// Startzeit
var cpStartTime = cpXML..rdf::Description[i].@xmpDM::startTime;
// DVA Ticks
cpStartTime = cpStartTime / nTracksFrameRate;
trace (":::\n" + cpStartTime);
// Name
trace (cpXML..rdf::Description[i].@xmpDM::name);
// Name
trace (cpXML..rdf::Description[i].@xmpDM::cuePointType);
}
}
[/as]
Der Anfang ist aus der Flashdoku. Den hinteren Teil mit den Cuepoints scheint Adobe jedoch vergessen zu haben :-)
Die Informationen sollte man einfach noch in dem Array cuePoints
abspeichern, um sie weiterverwenden zu können.
Was sind bitte „DVA Ticks“?
Warum auch immer, aber die Zeiten der Cuepoints sind in so genannten DVA Ticks hinterlegt. Dazu der Hinweis von Adobe:
In XMP-Daten wird die Zeit in Form von „DVA Ticks“ anstelle von Sekunden gespeichert. Sie berechnen die Cue-Point-Zeit, indem Sie die Startzeit durch die Bildrate teilen. Beispiel: Die Startzeit 7695905817600 geteilt durch die Bildrate 254016000000 ist gleich 30:30.
[ad]
Thanks for the article … I found some issues with populating my final cuepoint xml though … it would seem that when having multiple cuepoints:
1) If your cuepoints are of type event with no parameters, replace rdf::Description with rdf::li
2) If your cuepoints are of type event with parameters, the above code works
3) It seems you cannot mix cuepoint types, i.o.w have a cuepoint with no parameters and then one with parameters in the same clip.
Just my findings, why it has to be so complicated I have no idea?!
Geehrter Leser,
Was ich suche kann ich leider auch bei Ihnen nicht finden. Ich habe in Premiere einige .f4v files gemacht und möchte diese auf meine Website zeigen. Zwar kann ich mit dreamweaver .flv files verwenden, aber f4v nicht.
Vielleicht können sie mir weiter helfem.
Freundliche Grüsse,
Werner Gerth
Flash Player spielen grundsätzlich (ab Version 9.0.115) beides ab. Notfalls einfach die .f4v Files in .flv umbenennen, sollte auch funktionieren.
Ich hatte schon eher versucht die .f4v umzubenennen, aber als es hies "wird unbrauchbar" habe ich es nicht gemacht. Aber Irtum sie haben recht es functioniert.
Aber ich sehe jetzt ein anderes Problem und habe keine Idee wie dass komt.
Wenn ich jetzt den .flv auf dem Internet zeige dann läuft der Film nicht fliessend. Wenn ich den selben Film als .wmv auf dem Internet zeige, ist alles schön fliessend. Hätten Sie eine Ahnung warum ??
Sind die Dateigrößen gleich? Liegen die Files auf dem gleichen Server? Ist das eine vielleicht schon im Browsercache?
Der .flv File ist 20 Mb, der .wmv File ist 23 Mb.
Beide Files sind untergebracht beim gleichen Server.
Powweb in USA.
Wenn ich den .f4v File auf meinem pc spiele, dann sieht es fabelhaft aus.
Ich habe es jetzt so gemacht. Wenn man die Website besucht sieht mann den .wmv File und den .f4v File kann mann downloaden.
http://www.ottopfeiffer.info/portugal/huis_alvorge/index.html
Gerne möchte ich herausfinden weshalb es nicht gut functioniert.
So wie es ausssieht hat man dann aber alles CuePoints beim stream beginn auszulesen und nicht erst an ihrer eigentlichen position.