如何解决Slick和Youtube视频在播放时暂停,从结束视频开始
我正在使用slick.js在轮播中展示YouTube视频。该视频应在幻灯片可见时自动播放,并在视频结束后显示下一张幻灯片。
我发现了一个很棒的codepen想法,正是我想要的。但是,我只是不知道在播放youtube视频时如何停止滑块的自动播放,并且最后继续播放下一张幻灯片。
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 举报,一经查实,本站将立刻删除。