我无法通过YouTube Player API的getDuration()方法获取加载/提示视频的正确视频持续时间/长度(以秒为单位);但是,相同的方法会在视频开始播放后返回有效值!想知道YouTube如何能够显示加载/提示视频的有效持续时间 .
当我用15秒的视频剪辑加载这个HTML页面时,我得到以下调试输出:
state = 5 duration = -0.000025
当我点击播放按钮时,我得到以下调试输出:
state = 3 duration = 15,
非常感谢解决方案或解决方法 . 加载,立即播放和暂停播放器将不是我最喜欢的方法 .
<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&enablejsapi=1&playerapiid=" + 'player', 'player', 425, 344, "8", null, null, params, atts);
</script>
</td></tr>
</table>
<div id="out"></div>
<div id="err"></div>
</body>
</html>
5 回答
解决方案1
您可以使用YouTube Data API访问有关视频的大部分信息,包括持续时间:
Demo here
使用jQuery时,您可以使用
$.getJSON()
来简化操作 .解决方案2
似乎YouTube JavaScript API v3允许您在
onYouTubePlayerReady()
事件中获得正确的持续时间 . 您需要做的就是在调用swfobject.embedSWF()
方法时传递&version=3
.Demo here
遵循这些步骤:
1.获取youtube视频ID
2.使用youtube API获取持续时间(ISO 8601持续时间)
3.将ISO 8601持续时间转换为时间
使用Jquery:
“加载,立即播放和暂停播放器将不是我最喜欢的方法 . ”
我认为还没有其他方法 .
就我而言,即使是卫星互联网用户也能很好地运作 .
这是我的代码:
这是一个为你转换时间的人 .
使用jQuery