| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
| cuepoints dynamisch setzen und auslesen
Habe überall gesucht, wie man bei einem dynamisch geladenen video cuepoints setzen und auslesen kann, bin aber nicht fündig geworden. Ich versuche folgendes (AS2) Code: // Create a NetConnection object
var my_nc:NetConnection = new NetConnection();
// Create a local streaming connection
my_nc.connect(null);
// Create a NetStream object and define an onStatus() function
var my_ns:NetStream = new NetStream(my_nc);
my_ns.onStatus = function(infoObject:Object):Void {
status_txt.text += "status (" + this.time + " seconds)\n";
status_txt.text += "\t Level: " + infoObject.level + "\n";
status_txt.text += "\t Code: " + infoObject.code + "\n\n";
};
// Attach the NetStream video feed to the Video object
my_video.attachVideo(my_ns);
// Set the buffer time
my_ns.setBufferTime(5);
// adding cuepoints
my_video.addASCuePoint(2, "ASpt2");
// cuepoints auslesen
var listenerObject:Object = new Object();
listenerObject.cuePoint = function(eventObject:Object):Void {
// dieser code wird ausgeführt sobald die 2 sekunden erreicht wurden
trace("Elapsed time in seconds: " + my_video.playheadTime);
trace("Cue point name is: " + eventObject.info.name);
trace("Cue point type is: " + eventObject.info.type);
}
my_video.addEventListener("cuePoint", listenerObject);
// Begin playing the FLV file
my_ns.play("testfilm.mov"); |
| | |
| | #2 (permalink) |
| Gast
Beiträge: n/a
|
Wenn ich das in der Flash-Hilfe richtig verstanden habe, funzt addASCuePoint und der Listener nur mit der FLVPlayback-Komponente. Wenn du mit der NetStream-Klasse arbeiten willst, solltest du die Cuepoints direkt ins Video setzen und dann über den NetStream.onMetaData auslesen.
|
|
| | #3 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
|
Hi Holger, danke für die Antwort. Das frustriert mich ein wenig, denn die Filme sind allesamt h.264 codiert und somit kann ich keine cuepoints setzen. Gibt es denn keine Möglichkeit, die Cuepoints nachträglich zu generieren?
|
| | |
| | #4 (permalink) |
| reXcel Registriert seit: Aug 2002 Ort: Herford
Beiträge: 4.774
|
Hi, ein komplizierter Weg wäre über eine direkte Dateimanipulation (serverseitig) denkbar. Da die CuePoints in den MetaDaten am Anfang der Datei enthalten sein können, kann man hier die Datei binär öffnen, einen Part einfügen und die Datei dann passend machen... aber letztlich sind CuePoints ja lediglich Variablen in der Datei (MetaDaten) welche sich auf bestimmte Positionen im Video beziehen. Ich bin generell kein Freund hiervon. Ich halte es für die meisten Anwendungsfälle für besser, wenn solche Videobezogenen Daten nicht in der Datei liegen, sondern serverseitig in einer Datenbank. Nur so ist ein dynamisches Arbeiten mit diesen Daten möglich... wie du ja gerade bemerkst. Eine Alternative wäre die Verwendung von einem Streamingserver. FMIS oder Wowza. Hiermit kann man die Videodateien ohne probleme Manipulieren und sogar in Echtzeit während ein Video gestreamt wird jederzeit neue MetaDaten nach injezieren. Das ist ein ziemlich mächtiges Werkzeug. Allerdings wird ein Streamingserver benötigt, was nunmal neben vielen Vorteilen auch Kosten mit sich bringt.
__________________ iPhone, iPad, Android und Flash Video Streamingserver Streaming & Live-Streaming für Flash, iPhone, iPad, iPod touch und Android. Inkl. Player, Videokonvertierung in optimierte Formate, Playercode, Flexplayer, etc... |
| | |
| | #5 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
|
Viel einfacher. Hab ich nicht kapiert vorhin: Ich kann ja auch mit einer FLVPlayback-Instanz arbeiten und trotzdem per ActionScript die Timeline kontrollieren (FLVPlayback.play() und so). Dies nun der Code: Code: my_video.bufferTime = 10;
my_video.autoPlay = false;
my_video.contentPath = "testfilm.mp4";
// adding cuepoints
my_video.addASCuePoint(5, "ASpt2");
// cuepoints auslesen
var listenerObject:Object = new Object();
listenerObject.cuePoint = function(eventObject:Object):Void {
// dieser code wird ausgeführt sobald die 2 sekunden erreicht wurden
trace("Elapsed time in seconds: " + my_video.playheadTime);
trace("Cue point name is: " + eventObject.info.name);
trace("Cue point type is: " + eventObject.info.type);
}
my_video.addEventListener("cuePoint", listenerObject);
my_video.play(); |
| | |
| | #6 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
|
Wenn ich nun die Zeit bei einem CuePoint länger als 99 Sekunden setzen will (z.b. auf 2 Minuten), dann liest er überhaupt keinen cuePoint mehr aus. Gibt es eine andere Schreibweise, um über 99 Sekunden hinauszukommen? Danke. |
| | |
| | #8 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
|
Also das funktioniert doch: ein CuePoint per ActionScript zum Flash-Video hinzugefügt: Code: plbk.bufferTime = 0.1;
plbk.contentPath = "film.mp4";
plbk.addASCuePoint(1, "Cue 1");
plbk.addASCuePoint(3, "Cue 3");
plbk.addASCuePoint(102, "Cue 102");
var listenerObject:Object = new Object();
listenerObject.cuePoint = function(eventObject:Object):Void {
trace("Cue point name is: " + eventObject.info.name);
}
plbk.addEventListener("cuePoint", listenerObject); Wasndalos? |
| | |
| | #9 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
|
Hier der Code, den ich brauche, um das XML zu verarbeiten: Code: plbk.bufferTime = 0.1;
plbk.autoPlay = true;
plbk.contentPath = "film.mp4";
var listenerObject:Object = new Object();
listenerObject.cuePoint = function(eventObject:Object):Void {
trace("Cue point name is: " + eventObject.info.name);
}
plbk.addEventListener("cuePoint", listenerObject);
cueXML = new XML();
cueXML.ignoreWhite = true;
cueXML.onLoad = function(ok) {
if (ok) {
trace("xml geladen");
for (i = 0; i < cueXML.firstChild.childNodes.length; i++) {
plbk.addASCuePoint(cueXML.firstChild.childNodes[i].attributes.zeit, cueXML.firstChild.childNodes[i].attributes.id);
}
} else {
trace("lädt noch");
}
}
cueXML.load("cuepoints.xml"); Code: <?xml version="1.0" encoding="UTF-8"?> <cuepoints> <einblender id="cue1" zeit="1" /> <einblender id="cue2" zeit="3" /> <einblender id="cue3" zeit="99" /> </cuepoints> Code: <?xml version="1.0" encoding="UTF-8"?> <cuepoints> <einblender id="cue1" zeit="1" /> <einblender id="cue2" zeit="3" /> <einblender id="cue3" zeit="102" /> </cuepoints> |
| | |
| | #10 (permalink) |
| Durchschnitt Registriert seit: Jul 2004
Beiträge: 89
|
Au Mann! So funktionierts: Code: for (i = 0; i < cueXML.firstChild.childNodes.length; i++) {
plbk.addASCuePoint(Number(cueXML.firstChild.childNodes[i].attributes.zeit), cueXML.firstChild.childNodes[i].attributes.id);
} |
| | |
| | #11 (permalink) |
| Neuer User Registriert seit: Sep 2004
Beiträge: 66
|
Was ich bis jetzt immer noch nicht kapiert habe und wozu die Antworten in den diversen Threads dieses Forums recht widersprüchliche Angaben liefern, das ist die Frage: Brauche ich nun eine FLV-Playback-Komponente oder nicht, wenn ich dynamisch mit AS cuePoints setzen will?! Ich arbeite definitiv ohne Playback-Komponente auf Basis der NetStream-Klasse. Gibts dazu sowas wie eine finale, verbindliche Ansage? Ich arbeite mit Flash 8 / AS 2.0. |
| | |
| | #12 (permalink) |
| reXcel Registriert seit: Aug 2002 Ort: Herford
Beiträge: 4.774
|
Die Frage ist, ob es für dich Sinn macht. Wenn du ohnehin keine Playback Komponente verwendest, warum brauchst du dann CuePoints die du während die Anwendung läuft erzeugen möchtest? Also als Datenbasis von außen sind CuePoints ja interessant. Also z.B. wenn du die Positionen schon in Premiere beim Videoschnitt setzen kannst. Aber während die Anwendung läuft selber welche hinzufügen??? Es ist doch so: ein CuePoint ist lediglich ein Array. Darin ist z.b. eine Zeitmarke "23. Sekunde" mit dem Wert "hallo" gespeichert. In der Playback Komponente steckt nun die Logik die darus z.B. ein Kapitel "hallo" macht und du kannst mit einem Klick darauf zur 23. Sekunde spulen. Genauso könnte man es als Untertitel begreifen, der besagt das in der 23 Abspielsekunde der Untertitel "hallo" angezeigt werden soll... Aber das ist ja alles nichts besonderes. Das kannst du ja mit ein paar Zeilen code in einem eigenen Player jederzeit nachbilden in dem du einfach beständig die video.time mit deiner "CuePoint-Zeitpunkt-Liste" vergleichst. Immer wieder glauben die Leute "CuePoints" wären etwas ganz besonderes. Es sind aber nur ganz einfache Variablen. "X = yyy". Das kann Flash und auch jede andere Programmiersprache schon immer. Es ist nur die Frage wie deenreich man die Tatsache nutzt, dass in einer Videodatei Metadaten (sprich: cuePoints) stecken können. Übrigens: in fast jedem Fall ist es besser, wenn man diese Metadaten/Informationen eben NICHT in der Videodatei speichert, sondern serverseitig in der DB. Das hört sich nur nicht so Hipp an
__________________ iPhone, iPad, Android und Flash Video Streamingserver Streaming & Live-Streaming für Flash, iPhone, iPad, iPod touch und Android. Inkl. Player, Videokonvertierung in optimierte Formate, Playercode, Flexplayer, etc... |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |