Lecteur YouTube API: Comment obtenir la durée d'un chargé/indicé vidéo sans jouer?

Je ne suis pas en mesure d'obtenir la bonne vidéo durée/durée (en secondes) d'un chargé/indicé la vidéo via le getDuration() la méthode du Lecteur YouTube API; la même méthode, mais renvoie une valeur valide une fois que la vidéo commence à jouer! Vous vous demandez comment YouTube est en mesure de démontrer la validité de la durée d'un chargé/indicé vidéo.

Lorsque je charge cette page HTML avec 15 secondes de vidéo clip, j'ai le débogage de sortie:

état = 5 durée = -0.000025

Quand j'appuie sur le bouton de lecture, j'ai le débogage de sortie:

état = 3 durée = 15,

Serait grandement apprécier une solution ou une solution de contournement. De chargement, et immédiatement de jouer et de la suspension du joueur serait pas ma méthode préférée.

<html>
<head>
<script type="text/javascript">
var videoId;
videoId = 'http://www.youtube.com/v/4TSJhIZmL0A';    //bbc
//videoId = 'http://www.youtube.com/v/ezwyHNs_W_A'; //physics
function $(id) {
return document.getElementById(id);
}
</script>
<script src="http://www.google.com/jsapi"></script>
<script>
google.load("swfobject", "2.1");
</script>
</head>
<body>
<table>
<tr><td>
<div id="player">
You need Flash player 8+ and JavaScript enabled to view this video.
</div>
<script>
var ytplayer;
function myOnPlayerStateChange(state) {
switch(state) {
case 1:  //playing
$("out").innerHTML += " playing";
break;
case 2:  //paused
$("out").innerHTML += " paused";
break;
case 0:  //ended
$("out").innerHTML += " ended";
break;      
case -1: //unstarted
case 3:  //buffering
case 5:  //cued
$("out").innerHTML += " state = " + state;
break;
default: //unknown
$("out").innerHTML += " state = " + state;
break;
}
$("out").innerHTML += " duration = " + ytplayer.getDuration() + ",";
}
function myOnPlayerError(errorCode) {
$("out").innerHTML += " Error occurred: " + errorCode;
}
function onYouTubePlayerReady(playerId) {
ytplayer = ytplayer || $(playerId);
ytplayer.addEventListener("onStateChange", "myOnPlayerStateChange");
ytplayer.addEventListener("onError", "myOnPlayerError");
}
var params = { allowScriptAccess: "always", bgcolor: "#cccccc" };
var atts = { };
swfobject.embedSWF(videoId + "?border=0&amp;enablejsapi=1&amp;playerapiid=" + 'player', 'player', 425, 344, "8", null, null, params, atts);
</script>
</td></tr>
</table>
<div id="out"></div>
<div id="err"></div>
</body>
</html>
Malheureusement, toutes les réponses ont été rendues obsolètes depuis Google désactivé V2 de l'API YouTube.

OriginalL'auteur Harry | 2010-01-18