【发布时间】:2019-02-08 20:43:10
【问题描述】:
我正在尝试使用QMediaPlayer 创建一个.. 媒体播放器。我希望能够在按下按钮时倒带视频。
但通过QMediaPlayer.setPlaybackRate 设置负值playbackRate 似乎并没有让视频倒带。它只是继续向前播放。
我不想改变视频的位置,我希望视频以负速播放。通过我的一些逻辑,将playbackRate 设置为负值将使视频反向播放。但这不会发生。如果你不能清楚地理解我,这里是一个video 播放应该是什么样子的。
这里是重现问题的一些准系统代码:
import sys
from PyQt5.QtCore import Qt, QUrl, QEvent
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import QMainWindow, QApplication
class VideoWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
videoWidget = QVideoWidget()
self.setCentralWidget(videoWidget)
self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
self.mediaPlayer.setVideoOutput(videoWidget)
self.mediaPlayer.setMedia(
QMediaContent(QUrl.fromLocalFile(r"<some video file>.mp4"))
)
self.mediaPlayer.play()
app.installEventFilter(self)
def eventFilter(self, source, event):
if event.type() == QEvent.KeyPress:
key = event.key()
if key == Qt.Key_A:
self.mediaPlayer.setPlaybackRate(1.0)
elif key == Qt.Key_Y:
self.mediaPlayer.setPlaybackRate(-1.0) # This doesn't work! :(
return super().eventFilter(source, event)
def closeEvent(self, event):
self.mediaPlayer.setMedia(QMediaContent())
if __name__ == '__main__':
app = QApplication(sys.argv)
player = VideoWindow()
player.resize(640, 480)
player.show()
exitCode = app.exec_()
sys.exit(exitCode)
我尝试寻找解决方案,但我得到的只是documentation 所说的(强调我的):
可以设置小于零的值并指示媒体将倒带 标准配速的乘数。
但是,我没有看到这种效果。
我确实注意到了这一点:
并非所有播放服务都支持更改播放速率。
有没有可能我不能倒带 mp4?也许我需要安装/更改一些东西?
【问题讨论】:
-
对我来说,它在带有 PyQt5 5.11.2 的 Linux 中可以正常工作,你的操作系统和 PyQt5 的版本是什么?
-
@eyllanesc 我有 Windows 10(我相信是 1803,如果相关的话)和相同版本的 PyQt。
-
@S.Nick 我尝试了这个例子,并添加了
self.rateBox.addItem("-2.0x", -2.0),但选择它不会倒带视频。就像我的代码一样,它只是继续以上次设置的正速度播放。 -
@eyllanesc 你知道为什么它可以在 Linux 上运行,但在 Windows 上不行吗?我会错过程序/包/设置/任何东西吗?
标签: python pyqt5 qmediaplayer