PyQt6 6.7.0 — Как исправить ошибку: бэкэнды QtMultimedia не найденыPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 PyQt6 6.7.0 — Как исправить ошибку: бэкэнды QtMultimedia не найдены

Сообщение Anonymous »

Проблема в Windows 10 и Windows 11 с использованием Anaconda.
Вот полное сообщение об ошибке для PyQt6=6.7.0:

Код: Выделить всё

No QtMultimedia backends found. Only QMediaDevices, QAudioDevice, QSoundEffect, QAudioSink, and QAudioSource are available.
Failed to initialize QMediaPlayer "Not available"
Failed to create QVideoSink "Not available"
Установил PyQt6 с использованием файла требований:

Код: Выделить всё

PyQt6
PyQt6-WebEngine
requests
pyserial
pynput
Вот несколько вещей, которые я попробовал:
  • Откатить версию обратно на PyQt6=6.6.1. Это также приводит к ошибке: ImportError: Ошибка загрузки DLL при импорте QtGui: указанная процедура не найдена.
  • Я думал, что может отсутствовать ffmpeg проблема, поэтому я установил ее, но проблема остается.
  • Попробовал настройку в Ubuntu (WSL2), проблема исчезла, но остался только черный экран, и в виджете ничего не отображается. . (РЕДАКТИРОВАТЬ: все заработало, проблема заключалась в различиях в путях к файлам в Linux и Windows.)
Я Я новичок в PyQt, поэтому любые указатели будут полезны!
Изменить: вот общий код (взятый отсюда), который выдает ту же ошибку:

Код: Выделить всё

from PyQt6.QtGui import QIcon, QFont
from PyQt6.QtCore import QDir, Qt, QUrl, QSize
from PyQt6.QtMultimedia import QMediaPlayer
from PyQt6.QtMultimediaWidgets import QVideoWidget
from PyQt6.QtWidgets import (QApplication, QFileDialog, QHBoxLayout, QLabel, QStyleFactory,
QPushButton, QSizePolicy, QSlider, QStyle, QVBoxLayout, QWidget, QStatusBar)

class VideoPlayer(QWidget):

def __init__(self, parent=None):
super(VideoPlayer, self).__init__(parent)

self.mediaPlayer = QMediaPlayer()

btnSize = QSize(16, 16)
videoWidget = QVideoWidget()

openButton = QPushButton("Open Video")
openButton.setToolTip("Open Video File")
openButton.setStatusTip("Open Video File")
openButton.setFixedHeight(24)
openButton.setIconSize(btnSize)
openButton.setFont(QFont("Noto Sans", 8))
openButton.setIcon(QIcon.fromTheme("document-open", QIcon("D:/_Qt/img/open.png")))
openButton.clicked.connect(self.abrir)

self.playButton = QPushButton()
self.playButton.setEnabled(False)
self.playButton.setFixedHeight(24)
self.playButton.setIconSize(btnSize)
self.playButton.setIcon(self.style().standardIcon(QStyle.StandardPixmap.SP_MediaPlay))
self.playButton.clicked.connect(self.play)

self.positionSlider = QSlider(Qt.Orientation.Horizontal)
self.positionSlider.setRange(0, 0)
self.positionSlider.sliderMoved.connect(self.setPosition)

self.statusBar = QStatusBar()
self.statusBar.setFont(QFont("Noto Sans", 7))
self.statusBar.setFixedHeight(14)

controlLayout = QHBoxLayout()
controlLayout.setContentsMargins(0, 0, 0, 0)
controlLayout.addWidget(openButton)
controlLayout.addWidget(self.playButton)
controlLayout.addWidget(self.positionSlider)

layout = QVBoxLayout()
layout.addWidget(videoWidget)
layout.addLayout(controlLayout)
layout.addWidget(self.statusBar)

self.setLayout(layout)

#help(self.mediaPlayer)
self.mediaPlayer.setVideoOutput(videoWidget)
self.mediaPlayer.playbackStateChanged.connect(self.mediaStateChanged)
self.mediaPlayer.positionChanged.connect(self.positionChanged)
self.mediaPlayer.durationChanged.connect(self.durationChanged)
self.mediaPlayer.errorChanged.connect(self.handleError)
self.statusBar.showMessage("Ready")

def abrir(self):
fileName, _ = QFileDialog.getOpenFileName(self, "Select Media",
".", "Video Files (*.mp4 *.flv *.ts *.mts *.avi)")

if fileName != '':
self.mediaPlayer.setSource(QUrl.fromLocalFile(fileName))
self.playButton.setEnabled(True)
self.statusBar.showMessage(fileName)
self.play()

def play(self):
if self.mediaPlayer.playbackState() == QMediaPlayer.PlaybackState.PlayingState:
self.mediaPlayer.pause()
else:
self.mediaPlayer.play()

def mediaStateChanged(self, state):
if self.mediaPlayer.playbackState() == QMediaPlayer.PlaybackState.PlayingState:
self.playButton.setIcon(
self.style().standardIcon(QStyle.StandardPixmap.SP_MediaPause))
else:
self.playButton.setIcon(
self.style().standardIcon(QStyle.StandardPixmap.SP_MediaPlay))

def positionChanged(self, position):
self.positionSlider.setValue(position)

def durationChanged(self, duration):
self.positionSlider.setRange(0, duration)

def setPosition(self, position):
self.mediaPlayer.setPosition(position)

def handleError(self):
self.playButton.setEnabled(False)
self.statusBar.showMessage("Error: "  + self.mediaPlayer.errorString())

if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
player = VideoPlayer()
player.setWindowTitle("Player")
player.resize(900, 600)
player.show()
sys.exit(app.exec())
Видео, которые я хочу воспроизвести, находятся в той же папке, что и этот файл .py.
Конда conda (python 3.9.2), над которой я работаю, имеет следующие пакеты:

Код: Выделить всё

certifi                     2024.6.2
charset-normalizer          3.3.2
idna                        3.7
pip                         24.0
pynput                      1.7.6
PyQt6                       6.7.0
PyQt6-Qt6                   6.7.1
PyQt6-sip                   13.6.0
PyQt6-WebEngine             6.7.0
PyQt6-WebEngine-Qt6         6.7.1
PyQt6-WebEngineSubwheel-Qt6 6.7.1
pyserial                    3.5
requests                    2.31.0
setuptools                  69.5.1
six                         1.16.0
urllib3                     2.2.1
wheel                       0.43.0
PS: Похоже, у MacOS та же проблема.

Подробнее здесь: https://stackoverflow.com/questions/785 ... ends-found
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»