【问题标题】:Youtube video stop on pause eventYoutube 视频在暂停事件时停止
【发布时间】:2016-07-19 14:54:47
【问题描述】:

我的网站页面上有几个带有电视频道的 youtube iframe。

<div>
<iframe id="ytplayer"  src="https://www.youtube.com/embed/ntBxGznOML0?rel=0&enablejsapi=1&autoplay=0&controls=1&showinfo=0&loop=1&iv_load_policy=3&modestbranding=0" frameborder="0" allowfullscreen></iframe>
</div>
<div>
<iframe id="ytplayer"  src="https://www.youtube.com/embed/zl4aeAfhdro?rel=0&enablejsapi=1&autoplay=0&controls=1&showinfo=0&loop=1&iv_load_policy=3&modestbranding=0" frameborder="0" allowfullscreen></iframe>
</div>
<div>
<iframe id="ytplayer"  src="https://www.youtube.com/embed/URD4UWm-edg?rel=0&enablejsapi=1&autoplay=0&controls=1&showinfo=0&loop=1&iv_load_policy=3&modestbranding=0" frameborder="0" allowfullscreen></iframe>
</div>
<div>
<iframe id="ytplayer"  src="https://www.youtube.com/embed/75j9l956bVs?rel=0&enablejsapi=1&autoplay=0&controls=1&showinfo=0&loop=1&iv_load_policy=3&modestbranding=0" frameborder="0" allowfullscreen></iframe>
</div>

我正在尝试使用一个 java 脚本来播放静音视频并在暂停事件时停止它,但它对我不起作用。脚本如下

var player;

function onYouTubeIframeAPIReady() {
    player = new YT.Player('ytplayer', {
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
            
        }
    });
}
function onPlayerStateChange(event){
     player.stopVideo(0);
         
  }
   

}
function onPlayerReady(event) {
    player.mute();
    player.playVideo();
}

我需要在暂停事件时完全停止视频,因为它是直播电视频道,所以如果我现在按暂停,10 分钟后我会得到一个记录,但不是直播。我怎样才能使我的脚本工作?

【问题讨论】:

    标签: javascript video youtube


    【解决方案1】:

    更新

    OP 有多个播放器并使用纯 JavaScript,以下更改是:

    1. 多个玩家共享同一个 id,现在每个玩家都有一个唯一的 id。
    2. 为每个玩家添加了&lt;button class='stop' data-id='yt*'&gt;STOP&lt;/button&gt;
      • 每个按钮都有一个data-id。它的值对应于它的玩家ID。
    3. &lt;section id='videoChannels'&gt;&lt;/section&gt; 包裹在所有内容周围。
      • eventListener 添加到#videoChannels,因此当单击按钮时,#videoChannels 被称为target.currentTarget,可以与event.target 进行比较以确定被单击的按钮(即event.target )。
      • capture eventPhase 之后,事件链到达event.target(被点击的按钮)并且函数ytCommand() 在对应于该按钮的播放器上被调用(参见步骤2。)

    工作演示

    PLUNKER


    停止 YouTube 播放器

    1. 使用contentWindow方法访问iframe
    2. 使用postMessage API 可以通过 iframe 进行下一次跨域通信。
    3. 来自YouTube iFrame API 的下一个发布命令

    相关代码

    $('#stop').on('click', function() {
    
      $('#ytPlayer')[0].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
    });
    

    工作演示

    FIDDLE

    片段

    <!doctype html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>Stop YTPlayer</title>
    </head>
    
    <body>
      <section id="videoChannels">
        <div>
          <iframe id="yt0" class="player" src="https://www.youtube.com/embed/8IzxdjVr5ZI?enablejsapi=1" frameborder="0" allowfullscreen></iframe>
          <button class='stop' data-id='yt0'>STOP</button>
        </div>
    
        <div>
          <iframe id="yt1" class="player" src="https://www.youtube.com/embed/AhenpCh6BO4?enablejsapi=1" frameborder="0" allowfullscreen></iframe>
          <button class='stop' data-id='yt1'>STOP</button>
        </div>
    
        <div>
          <iframe id="yt2" class="player" src="https://www.youtube.com/embed/HrmF-mPLybw?enablejsapi=1" frameborder="0" allowfullscreen></iframe>
          <button class='stop' data-id='yt2'>STOP</button>
        </div>
    
        <div>
          <iframe id="yt3" class="player" src="https://www.youtube.com/embed/6KouSwLP_2o?enablejsapi=1" frameborder="0" allowfullscreen></iframe>
          <button class='stop' data-id='yt3'>STOP</button>
        </div>
      </section>
      <script>
        var vidCh = document.getElementById('videoChannels');
    
        vidCh.addEventListener('click', ytCommand, false);
    
        function ytCommand(event) {
          if (event.target != event.currentTarget) {
            var btn = event.target.getAttribute('data-id');
            var ytp = document.getElementById(btn);
            ytp.contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
          }
        }
      </script>
    </body>
    
    </html>

    【讨论】:

    • 嗨!感谢您的回答,但我该如何使用该脚本?我在我的文章中插入了它,但它不起作用。
    • 我的错,您使用的是纯 JavaScript,但经过进一步检查,您的所有 iframe 共享相同的 id。 HTML 中最基本的规则之一是您永远不会将 id 分配给多个元素。您需要使每个 id 都是唯一的。我建议您在每个 id 的末尾添加一个数字(例如ytPlayer1ytPlayer2 等)。当然,在这样做时,脚本的其余部分也必须更改。我稍后会提供指示,我必须回去工作。
    • 好的,谢谢。我会等)
    • @Amonnn 准备好接受审查,先生。编码愉快。
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    相关资源
    最近更新 更多