微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Slick和Youtube视频在播放时暂停,从结束视频开始

如何解决Slick和Youtube视频在播放时暂停,从结束视频开始

我正在使用slick.js在轮播中展示YouTube视频。该视频应在幻灯片可见时自动播放,并在视频结束后显示下一张幻灯片

我发现了一个很棒的codepen想法,正是我想要的。但是,我只是不知道在播放youtube视频时如何停止滑块的自动播放,并且最后继续播放下一张幻灯片

我有什么(那些奇怪的标签是Twig标签):

import sys
import os.path
from pyside2.QtCore import *
from pyside2.QtWidgets import *

CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))

class MainWindow(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.playbtn = QPushButton("Play")
        self.nextbtn = QPushButton("Next")
        self.prevbtn = QPushButton("Prev")

        layout = QVBoxLayout()
        layout.addWidget(self.playbtn)
        layout.addWidget(self.nextbtn)
        layout.addWidget(self.prevbtn)

        self.setLayout(layout)

        self.playbtn.released.connect(self.btnplay)
        self.nextbtn.released.connect(self.btnnext)
        self.prevbtn.released.connect(self.btnprev)

    def btnplay(self):
        self.process = QProcess()
        self.process.readyReadStandardError.connect(self.handle_readyReadStandardError)
        self.process.readyReadStandardOutput.connect(self.handle_readyReadStandardOutput)
        self.process.setProgram(sys.executable)
        script_path = os.path.join(CURRENT_DIR,"test2.py")
        self.process.setArguments([script_path])
        self.process.start()

        status = self.playbtn.text()
        if status == "Play":
            command = "play"
            self.playbtn.setText("Pause")
            print("play pressed")
        elif status == "Pause":
            command = "pause"
            self.playbtn.setText("Play")
            print("pause pressed")

        msg = "{}\n".format(command)
        self.process.write(msg.encode())

    def btnnext(self):
        self.process = QProcess()
        self.process.readyReadStandardError.connect(self.handle_readyReadStandardError)
        self.process.readyReadStandardOutput.connect(self.handle_readyReadStandardOutput)
        self.process.setProgram(sys.executable)
        script_path = os.path.join(CURRENT_DIR,"test2.py")
        self.process.setArguments([script_path])
        self.process.start()

        command = "next"
        msg = "{}\n".format(command)
        self.process.write(msg.encode())
        print("next pressed")

    def btnprev(self):
        self.process = QProcess()
        self.process.readyReadStandardError.connect(self.handle_readyReadStandardError)
        self.process.readyReadStandardOutput.connect(self.handle_readyReadStandardOutput)
        self.process.setProgram(sys.executable)
        script_path = os.path.join(CURRENT_DIR,"test2.py")
        self.process.setArguments([script_path])
        self.process.start()

        command = "prev"
        msg = "{}\n".format(command)
        self.process.write(msg.encode())
        print("prev pressed")

    def handle_readyReadStandardError(self):
        print(self.process.readAllStandardError().data().decode())

    def handle_readyReadStandardOutput(self):
        print(self.process.readAllStandardOutput().data().decode())


app = QApplication(sys.argv)

window = MainWindow()
window.show()
app.exec_()

我只是看不到如何仍然可以将轮播设置为自动播放,但是停止了视频的自动播放,并在视频结束后恢复自动播放。还是我的方法错误

解决方法

通过引用youtube api reference,您可以收听事件onStateChange

以下是此事件返回的状态列表:

  • -1(未启动)
  • 0(已结束)
  • 1(正在播放)
  • 2(已暂停)
  • 3(缓冲)
  • 5(视频提示)。

在代码中,看起来像这样

//We create a variable which will contain our youtube `Player` object
var player;

//This function is a YT event that wait the API is ready
function onYouTubeIframeAPIReady() {
        //the `events` parameters lets us chose the different event we want to look after
        player = new YT.Player( 'player',{
          events: { 'onStateChange': onPlayerStateChange }
        });
}


//Now our event is setup,we can design the function that will be fired each time the event is trigger by our YT object
function onPlayerStateChange(e) {
  if(e.data = 0) {
    // THE EVENT.DATA IS EQUAL TO 0
    // YOUR VIDEO COMES TO AN END,INSERT HERE YOUR CODE TO GO TO 
    // THE NEXT SLIDER FOR EXAMPLE
  }
}
<!-- don't forget the id player,the youtube api ready event needs it to target your video as 1rst parameter -->
<iframe width='200' height='200' id='player'src="https://www.youtube.com/embed/tpiyEe_CqB4?enablejsapi=1"></iframe>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。