PyQt5 – вместо видео в QWebEngineView/QMediaPlayer вижу только серый прямоугольник (Win 10)
Пилю "настольную ОС" на PyQt5. Есть два способа показать mp4‑файл:
HTML‑плеер на Chromium (QWebEngineView)
- гружу локальный файл через <video>
Нативный плеер (QMediaPlayer + QVideoWidget)
Оба варианта дают одинаковый результат - серое полотно, звук молчит.
Код максимально упрощён; путь к файлу 100 % верный, файл играет в обычном VLC
.
VIDEO_EXTS = (".mp4", ".mov", ".avi", ".mkv")
class HTMLVideoPlayer(QWidget):
def __init__(self, path):
super().__init__(None, Qt.FramelessWindowHint | Qt.Tool)
self.resize(900, 560)
view = QWebEngineView(self)
html = f"""
<video controls autoplay style="width:100%;height:100%">
<source src="file:///{path.replace('\\', '/')}" type="video/mp4">
</video>"""
view.setHtml(html)
А вот нативный вариант (тот же эффект):
player = QMediaPlayer()
widget = QVideoWidget()
player.setVideoOutput(widget)
player.setMedia(QMediaContent(QUrl.fromLocalFile(path)))
player.play()
Логи, когда использую QMediaPlayer
:
DirectShowPlayerService::doRender: Unresolved error code 0x80040266 (IDispatch error #102)
В QWebEngineView
ошибок нет - только серое «тело» video‑тега.
Что пробовал
Кодеки K‑Lite / LAV Filters - не помогло.
Конвертировал видео - H.264/AAC (HandBrake, CRF 20) - без изменений.
Смотрел через ffprobe
- файл валиден.
Пробовал PyQt 6.7 - та же история.
Как заставить хотя бы один из плееров нормально декодировать mp4?