[YouTube Player Javascript API] seekTo() Problem mit Genauigkeit

CPoly

Mitglied Weizenbier
Hi,

Ich arbeite zur Zeit mit der API des YouTube Players und bin auf folgendes Problem gestoßen. Für meinen Anwendungsfall ist es von essentieller Bedeutung exakt arbeiten zu können. Das bedeutet, dass ich praktisch zu jedem Frame vor oder zurück spulen können muss. Jetzt weiß ich nicht, ob das Problem bei mir liegt, oder der YouTube Player es einfach nicht besser zu lässt.

Folgender Code gibt "6" und danach "6.033" aus. Manchmal auch zuerst eine "5" anstelle der "6". Das ist für mich völlig absurd, weil Algorithmen so etwas nicht machen, aber erzählt das mal dem Flash Player ^^.

Javascript:
ytplayer.pauseVideo();
ytplayer.seekTo(5);//die 5 kann natürlich auch jede andere Zahl sein
alert(ytplayer.getCurrentPosition());//gibt manchmal etwas anderes aus als in der Zeile oben drüber festgelegt, manchmal auch das selbe!
window.setTimeout(function() {
    alert(ytplayer.getCurrentPosition());//gibt immer etwas anderes aus als der Aufruf davor
}, 200);

Noch ein Beispiel: seekTo(41) gab gerade beim ersten Mal ausführen "41" und danach "42.033" und beim zweiten mal "42" und dann "42.033" aus....

Ich hoffe jemand kann mir weiter helfen. Ich habe jetzt keine Geduld weiter zu forschen und vielleicht gibt es ja eine Lösung wenn ich morgen früh an den PC gehe ;)
Ansonsten muss ich wohl zur Actionscript API greifen, in der Hoffnung, dass es dort besser funktioniert. Oder ich muss es als Bug melden und hoffen, dass es einer ist ^^.
 
Mal aus der API
Seeks to a specified time in the video.

* The seconds parameter identifies the time from which the video should start playing.
o If the player has already buffered the portion of the video to which the user is advancing, then the player will start playing the video at the closest keyframe to the specified time. This behavior is governed by the seek() method of the Flash player's NetStream object. In practice, this means that the player could advance to a keyframe just before or just after the specified time. (For more information, see Adobe's documentation for the NetStream class.)
o If the player has not yet buffered the portion of the video to which the user is seeking, then the player will start playing the video at the closest keyframe before the specified time.
* The allowSeekAhead parameter determines whether the player will make a new request to the server if seconds parameter specifies a time outside of the currently buffered video data. We recommend that you set this parameter to false while the user is dragging the mouse along a video progress bar and then set the parameter to true when the user releases the mouse.

This approach lets the user scroll to different points of the video without requesting new video streams by scrolling past unbuffered points in the video. Then, when the user releases the mouse button, the player will advance to the desired point in the video, only requesting a new video stream if the user is seeking to an unbuffered point in the stream.


The final player state after this function executes will be playing (1) unless the value of the seconds parameter is greater than the video length, in which case the final player state will be ended (0).
Die Angabe sind also Sekunden und keine Frames. Er spielt ausserdem nach SeekTo automatisch weiter anstatt stehen zu bleiben. Offensichtlich gibt es aber keine Moeglichkeit den Pausemodus beizubehalten. Ich finde jedenfalls keine Funktion oder optionalen Parameter dafuer.

Desweiteren finde ich die Funktion getCurrentPosition() nicht. Jedenfalls nicht in der API Dokumentation. Stattdessen nur die Funktion
player.getCurrentTime():Number
Returns the elapsed time in seconds since the video started playing.

Eventuell mal ausprobieren nach dem seekTo(x) sofort wieder pauseVideo() aufzurufen.
 
Danke schonmal für die Antwort.

Tut mir leid, ich habe wohl in meinem Startpost geschlampt. Der Code, der die oben genannte Ausgabe erzeugt sieht so aus:
Javascript:
ytplayer.seekTo(5);
ytplayer.pauseVideo();
alert(ytplayer.getCurrentTime());
window.setTimeout(function() {alert(ytplayer.getCurrentTime())}, 200);

Da ich jetzt nochmal etwas klarer denken konnte als um 0 Uhr bei meinem Startpost, habe ich etwas recherchiert und mein Vorhaben hat sich erübrigt. Die seek() Methode des NetStreams in Flash springt zum nächst gelegenen Keyframe, was für meine Zwecke natürlich viel zu ungenau ist, da diese je nach Videodatei mehrere Frames auseinander liegen. Das erklärt natürlich auch die festgestellten Probleme.

Wenn noch jemand eine intelligente Idee hat, bin ich natürlich daran interessiert ;)
 
Wen es interessiert, das falsche Verhalten von getCurrentTime() hat mit folgendem Bug zu tun, an dessen Behebung scheinbar endlich jemand arbeitet: http://bugs.adobe.com/jira/browse/FP-1705

Das hilft mir zwar bei meinem ursprüngliche Problem nicht weiter, aber wenigsten wäre damit alles offene geklärt ;)
 
Zurück