我想获取 YouTube 上当前直播的总时长(未结束!)。这对于普通视频来说很简单,例如:
https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id={VIDEO_ID}&key={KEY}
但是,对于直播流,例如 来自 ISS 的地球直播,这只会返回“PT0S”的持续时间,这本质上意味着它的长度为 0 秒。
应该有办法得到它。获取它的一种方法是通过 Javascript,如果您在浏览器中打开了直播:
ytplayer = document.getElementById("movie_player");
console.log("持续时间:" + ytplayer.getDuration());
可以从服务器端获取吗? 其他人也提出了同样的问题,但尚未收到答复。
编辑:我刚刚注意到获取持续时间的 JavaScript 方法没有任何意义。对于 2 小时前开始的直播,getCurrentTime() 在当前时间正确返回 2*60*60=7200,但 getDuration() 无论出于何种原因返回 10245。
因此,基本上 YouTube Player API 对于视频和直播流的工作方式有点不同。对于直播,
player.getDuration()
将在直播开始后的前 30 分钟内返回 3600
(1 小时)。
直播 30 分钟后,它将返回播放器加载时的持续时间流以及
3600
。
player.getDuration()
返回 3600
。player.getDuration()
返回 10800
,即 7200 + 3600
。player.getDuration()
等于10800
,那么无论你看直播多久,它都会保持这样。仅当您刷新播放器时,player.getDuration()
才会更新。因此,如果您想知道实际的持续时间,您可以记录播放器加载时的系统时间(
new Date().getTime() / 1000
),然后在下次检查时添加差异。