gpt4 book ai didi

javascript - YouTube 播放器 API : How to get duration of a loaded/cued video without playing it?

转载 作者:可可西里 更新时间:2023-11-01 01:39:05 30 4
gpt4 key购买 nike

我无法通过 YouTube Player API 的 getDuration() 方法获得加载/提示视频的正确视频持续时间/长度(以秒为单位);但是,同样的方法会在视频开始播放后返回一个有效值!想知道 YouTube 如何能够显示加载/提示视频的有效持续时间。

当我用 15 秒的视频剪辑加载此 HTML 页面时,我得到以下调试输出:

状态 = 5 持续时间 = -0.000025

当我点击“播放”按钮时,我得到以下调试输出:

状态 = 3 持续时间 = 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&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>

最佳答案

解决方案1

您可以使用 YouTube 数据 API 访问有关视频的大部分信息,包括持续时间:

<script type="text/javascript">
function youtubeFeedCallback(json){
document.write(json["data"]["duration"] + " second(s)");
}
</script>
<script type="text/javascript" src="http://gdata.youtube.com/feeds/api/videos/4TSJhIZmL0A?v=2&alt=jsonc&callback=youtubeFeedCallback&prettyprint=true"></script>

Demo here

在使用 jQuery 时,您可以使用 $.getJSON() 来简化操作。

解决方案2

似乎 YouTube JavaScript API v3 允许您在 onYouTubePlayerReady() 事件中获取正确的持续时间。您需要做的就是在调用 swfobject.embedSWF() 方法时传递 &version=3

Demo here

关于javascript - YouTube 播放器 API : How to get duration of a loaded/cued video without playing it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2086260/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com