基于pyqt5的QMediaPlayer实现视频播放器(拨动进度条,音量,更换播放模式,加入多个播放文件)

前言

最近在学习pytq5的QMediaPlayer模块,其实刚开始是学习的pyside6的,因为pyside6的官方文档相对较详细一些,pyqt5的官方文档大片的文档解释都是TODO,我不太明白这种句式,但是做到添加播放列表QMediaPlaylist的时候,pyside6无法识别这个模块,我很疑惑,查了才发现现在Qt6的QtMultimedia相对与Qt5有较大重写,现在还有很多模块没有补齐,Qt6改动。后面有稍稍改了一下代码,改用pyqt5.
我遇到的一些pyqt6变化

  1. pyside6需要额外setAudioOutput()给视频连接音频的,否者视频播放出来没有声音。
  2. pyside6的设置音量大小的范围是0-1,是float型,而pyqt5的音量的大小范围是0-100,是int型,
  3. pyside6对中文路径不是很支持,文件名是中文都播放不了,此外pyside6的转换.ui文件出来的.py文件,其中的中文也会被改成字母字符,但是你运行出来窗口还是显示中文,比如你在designer中设置button的名字为“确定”,转化的.py文件中会变成一串字母,但是窗口是正常显示,pyqt5不会出现这种情况,
  4. pyside6读取媒体文件是self.player.setSource(QUrl),而pyqt5读取媒体文件时self.player.setMedal(QMediaContent),pyqt5获取url好像中间转了一下,不知道是不是这个原因,我用pyside6打开播放文件很顺畅,而pyqt5刚打开屏幕会闪一下,建议如果要做桌面动态壁纸的可以用pyside6,动态壁纸闪一下真的很影响感觉。

准备工作

  1. 安装pyqt5库
  2. 安装解码器,LAV Filters

没有实现重要功能

  1. 不能全屏
  2. 不能删除播放列表的文件

界面文件

图里面的需要的功能都完成,打开文件分两种的一种是添加单个或者多个文件,另一个是添加文件夹下面的所有文件(不过还没加检索,如果含有其他.txt .py文件也会一股脑添加到播放列表),此外没给控件设置样式,所以有点粗犷简陋。
在这里插入图片描述

如果要自己通过designer设计,需要记得添加一个Qwidget控件提升为QVideoWidget。
提升的类叫QVideoWidget,头文件:PyQt5.QtMultimediaWidgets

# -*- coding: utf-8 -*-

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(623, 446)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setHorizontalSpacing(6)
        self.gridLayout.setObjectName("gridLayout")
        self.nowtime = QtWidgets.QLabel(self.centralwidget)
        self.nowtime.setText("")
        self.nowtime.setObjectName("nowtime")
        self.gridLayout.addWidget(self.nowtime, 2, 4, 1, 1)
        self.playlistBox = QtWidgets.QComboBox(self.centralwidget)
        self.playlistBox.setObjectName("playlistBox")
        self.playlistBox.addItem("")
        self.playlistBox.addItem("")
        self.playlistBox.addItem("")
        self.gridLayout.addWidget(self.playlistBox, 1, 4, 1, 1)
        self.play_button = QtWidgets.QPushButton(self.centralwidget)
        self.play_button.setObjectName("play_button")
        self.gridLayout.addWidget(self.play_button, 3, 0, 1, 1)
        self.videoout = QVideoWidget(self.centralwidget)
        self.videoout.setEnabled(True)
        self.videoout.setObjectName("videoout")
        self.gridLayout.addWidget(self.videoout, 0, 0, 2, 4)
        self.mid_button = QtWidgets.QPushButton(self.centralwidget)
        self.mid_button.setObjectName("mid_button")
        self.gridLayout.addWidget(self.mid_button, 3, 2, 1, 1)
        self.timeSlider = QtWidgets.QSlider(self.centralwidget)
        self.timeSlider.setEnabled(True)
        self.timeSlider.setMaximum(99)
        self.timeSlider.setOrientation(QtCore.Qt.Horizontal)
        self.timeSlider.setObjectName("timeSlider")
        self.gridLayout.addWidget(self.timeSlider, 2, 0, 1, 4)
        self.volumeSlider = QtWidgets.QSlider(self.centralwidget)
        self.volumeSlider.setEnabled(True)
        self.volumeSlider.setOrientation(QtCore.Qt.Vertical)
        self.volumeSlider.setObjectName("volumeSlider")
        self.gridLayout.addWidget(self.volumeSlider, 1, 5, 2, 2)
        self.volume = QtWidgets.QLabel(self.centralwidget)
        self.volume.setObjectName("volume")
        self.gridLayout.addWidget(self.volume, 3, 5, 1, 2)
        self.listvidename = QtWidgets.QListWidget(self.centralwidget)
        self.listvidename.setObjectName("listvidename")
        self.gridLayout
  • 23
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值