并排播放两个视频:视频不显示

Posted

技术标签:

【中文标题】并排播放两个视频:视频不显示【英文标题】:Playing two videos side by side:Videos not showing 【发布时间】:2021-09-26 17:59:45 【问题描述】:

我正在尝试构建一个 GUI,它由在窗口上不同位置播放的多个视频组成,所有视频都具有 alpha 通道,因为有些视频与其他视频重叠,基于外部设备固件提供的说明。

我正处于项目的最初阶段,所以我只想在同一个屏幕上播放两个视频,然后从那里开始。 (虽然如果你知道一个很好的例子来分享我的最终目标,那也太棒了)。

我看到的适用于这个项目的层次结构是一个 QMainWindow,它包含一个 QGraphicsView,它包含一个 QGraphicsScene,它包含两个 QGraphicsVideoItem,它们是 QMediaPlayer 的“输出”。 (我是不是已经采取了错误的方式?)

打开一个窗口,大小合适,但没有播放视频。我做了很多测试,例如添加布局、更改某些指令的顺序等。但没有。

import sys
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class VideoWindow(QMainWindow):
     def __init__(self):
        super(VideoWindow, self).__init__()
        self.setWindowTitle('QMediaPlayer TEST')
        self.resize(1920, 1080)

        self.vista = QGraphicsView(self)
        self.vista.setGeometry(QRect(0, 0, 1920, 1080))

        self.scene = QGraphicsScene(self.vista)
        self.scene.setSceneRect(0, 0, 1920, 1080)

        self.graphvitem1 = QGraphicsVideoItem()
        self.graphvitem2 = QGraphicsVideoItem()


        self.mediaPlayer1 = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        self.mediaPlayer1.setVideoOutput(self.graphvitem1)
        self.mediaPlayer1.setMedia(QMediaContent(QUrl.fromLocalFile("/Users/elemental/Desktop/pyvids/v1na.mp4")))

        self.graphvitem1.setPos(100, 100)
        self.scene.addItem(self.graphvitem1)


        self.mediaPlayer2 = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        self.mediaPlayer2.setVideoOutput(self.graphvitem2)
        self.mediaPlayer2.setMedia(QMediaContent(QUrl.fromLocalFile("/Users/elemental/Desktop/pyvids/v1na2.mp4")))

        self.graphvitem2.setPos(100, 500)
        self.scene.addItem(self.graphvitem2)


        self.mediaPlayer1.play()
        self.mediaPlayer2.play()
        self.vista.show()


if __name__ == '__main__':
     app = QApplication([])
     window = VideoWindow()
     window.show()
     sys.exit(app.exec_())

【问题讨论】:

【参考方案1】:

你没有在视图上设置场景。

虽然constructor of QGraphicsView 可以接受 QGraphicsScene(将自动在其上设置),但 QGraphicsScene 构造函数没有这样的便利(因为场景可以在多个视图之间共享),并且将视图添加为参数只会将该视图设置为父视图。

        self.scene = QGraphicsScene(self.vista)
        self.vista.setScene(self.scene)

【讨论】:

没错。忘记设置场景了。使用此指令,它可以正常工作。非常感谢。

以上是关于并排播放两个视频:视频不显示的主要内容,如果未能解决你的问题,请参考以下文章

如何在立体声的同一窗口中并排显示 2 个网络摄像头视频?

android代码并排合并两个视频并使其成为一个视频(只想要一个音频)

Android videoview控件不显示视频,只播放音频

排除 youtube api 播放列表中显示“视频不可用”的所有视频

使用 JAVA + Java 小程序从多个 USB 摄像头捕获视频并在 UI 中并排显示

MobileVLCKit 播放视频流不显示