获取当前 YouTube 视频时间

Posted

技术标签:

【中文标题】获取当前 YouTube 视频时间【英文标题】:Getting Current YouTube Video Time 【发布时间】:2011-10-21 15:37:54 【问题描述】:

我正在编写一个浏览器插件,需要找到一种方法来获取使用 javascript 在 YouTube 上播放的 YouTube 视频的当前时间。我一直在 Chrome JavaScript 控制台中玩耍,但没有任何运气。

Chrome API 似乎只适用于嵌入式视频播放器,而不是在 youtube.com 上播放的视频。我研究的一个选项是在视频的共享部分,它们是“开始于:”时间的输入框,其中包含视频的当前时间。我尝试在此输入框上使用 .value 和 .text ,它们都返回未定义?有人有什么想法吗?

【问题讨论】:

【参考方案1】:
ytplayer = document.getElementById("movie_player");
ytplayer.getCurrentTime();

见the api

更新:如果不起作用,也试试player.playerInfo.currentTime (codepen live example)

【讨论】:

谢谢。我还没弄清楚 document.getElementById("movie_player");. 我想 :) 我只知道它,因为我尝试过一次并在想自己 我知道这个......我又是怎么做到的? XD 它在 ios 上不起作用(在 9.2 上检查)。 player var 没有需要的方法。即使使用带有 new YT.Player() 的 IFrame API 创建 @zxcat 您是否确保在引用视频时包含enablejsapi? developers.google.com/youtube/player_parameters#enablejsapi @JosephMarikle,当然。我接到了onYouTubePlayerAPIReadyonYouTubeIframeAPIReady 的电话,看到我的player 发生了变化。但是在 iOS 上它没有控制自己的方法。【参考方案2】:

看你想要什么

player.getCurrentTime():Number

返回自视频开始播放以来经过的时间(以秒为单位)。

player.getDuration():Number

返回当前播放视频的持续时间(以秒为单位)。笔记 在加载视频的元数据之前,getDuration() 将返回 0, 这通常发生在视频开始播放之后。

http://code.google.com/apis/youtube/js_api_reference.html

【讨论】:

【参考方案3】:

最后我找到了如何让它在 iOS(和 android)上运行。 实际上,如果在移动浏览器上运行,整个youtube js api 对我来说都坏了。

问题已通过使用new YT.Player创建播放器解决,如YouTube IFrame API 中所述。

请注意:当时仅从 <div> 占位符创建 <iframe> 适用于移动浏览器。如果您尝试在 new YT.Player 调用中使用现有的 <iframe>,如 IFrame API 中所述,这将不起作用。

创建播放器后,可以使用player.getCurrentTime()player.getDuration() 创建player 实例。

注意:我没有运气在通过player = document.getElementById(...)(来自@JosephMarikle 回答)获得的播放器上调用此方法。 仅创建的 player 实例在移动浏览器中有效。


有用的链接:

YouTube IFrame API YouTube JavaScript API YouTube Player Demo

【讨论】:

【参考方案4】:

你可以在youtube.com上使用Html5 Video API

var htmlVideoPlayer = document.getElementsByTagName('video')[0];
htmlVideoPlayer.currentTime

注意:它不适用于 Youtube Iframe API,因为 Iframe 是孤立的。您无法访问 Youtube IFrame 的上下文。

【讨论】:

【参考方案5】:

在 2020 年,这是可行的:

player.playerInfo.currentTime

完整代码: see it live on codepen

【讨论】:

【参考方案6】:

仅供参考,YouTube 播放器有一个新的 iframe API: https://developers.google.com/youtube/iframe_api_reference

【讨论】:

【参考方案7】:
document.querySelector('video').currentTime

【讨论】:

【参考方案8】:

在特定时间停止 youtube 视频并在 GWD 中显示通知框

<script>
  var yid = document.getElementById("gwd-youtube_1");
  var idBox = document.getElementById("box1");
pausing_function = function(event)  

    var aa = setInterval(function() 

        if (yid.getCurrentTime() > 8.0 && yid.getCurrentTime() < 8.1) 
            yid.pause(yid);
            idBox.style.opacity = 1;
            console.log(yid.getCurrentTime() + "playing")

             clearInterval(aa);
            yid.removeEventListener("playing", pausing_function);

        

    , 100)


 yid.addEventListener("playing", pausing_function);

  var pausing_function_1 = function()       
       if (yid.getCurrentTime() > 8.1) 
        console.log(yid.getCurrentTime() + "pause")


        // remove the event listener after you paused the playback
        yid.removeEventListener("playing", pausing_function);
      
    ;    
  </script>

播放视频并隐藏通知

 <script type="text/javascript" gwd-events="handlers">
    window.gwd = window.gwd || ;
    gwd.pauseVideo = function(event) 
      var idBox = document.getElementById("box1");
      idBox.style.opacity = 0;
    ;
  </script>
  <script type="text/javascript" gwd-events="registration">
    // Support code for event handling in Google Web Designer
     // This script block is auto-generated. Please do not edit!
    gwd.actions.events.registerEventHandlers = function(event) 
      gwd.actions.events.addHandler('gwd-youtube_1', 'playing', gwd.pauseVideo, false);
    ;
    gwd.actions.events.deregisterEventHandlers = function(event) 
      gwd.actions.events.removeHandler('gwd-youtube_1', 'playing', gwd.pauseVideo, false);
    ;
    document.addEventListener("DOMContentLoaded", gwd.actions.events.registerEventHandlers);
    document.addEventListener("unload", gwd.actions.events.deregisterEventHandlers);
  </script>

【讨论】:

以上是关于获取当前 YouTube 视频时间的主要内容,如果未能解决你的问题,请参考以下文章

如何从 YouTube Analytics API 获取属于当前用户的每个视频的指标?

获取 youtube 直播的当前观众人数

获取 YouTube 视频组的视频观看次数

使用 Youtube API 获取视频的隐私设置

YouTube API V3 - 为新提要获取推荐视频

获取只有字幕 Youtube API 的视频列表