我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PyQt5 视频播放--在QVideoWidget上显示视频

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PyQt5 视频播放--在QVideoWidget上显示视频

1、功能概述
(1)QMediaPlayer不仅可以播放音频文件,还可以播放wmv、avi等视频文件。

2、主要函数
(1)setMedia(QMediaContent):指定一个媒体资源;
(2)setPlaylist():指定一个播放列表;
(3)setVideoOutput(QVideoWidget):指定一个界面组件用于视频显示;
重构参数:
setVideoOutput(self, QVideoWidget)
setVideoOutput(self, QGraphicsVideoItem)
setVideoOutput(self, QAbstractVideoSurface)
(4)setNotifyInterval(1000):设置信息更新周期,1000ms。
(5)setFullScreen(True):设置全屏。

3、主要类
(1)QVideoWidget是从QWidget和QMediaBindableInterface双重继承的类,是一个类似于QWidget的类,但是可以显示视频画面。
(2)QGraphicsVideoItem是从QGraphicsObject和QMediaBindableInterface双重继承的类,是Graphics View架构里的一种图形项,用于在Graphics View架构里显示视频画面。
(3)QAbstractVideoSurface是从QObject直接继承的用于视频显示的抽象类,它提供了用于视频画面显示的标准接口,用户需要从这个类继承一个类,实现解码视频帧内容的自定义显示。

4、详细代码
示例使用QMediaPlayer播放视频文件,然后在QVideoWidget组件上显示视频画面。本示例的UI界面如图所示。UI界面的设计过程不作过多介绍。
在这里插入图片描述
使用QVideoWidget显示画面的视频播放器

在这里插入图片描述
MainWindow.ui设计时的效果和布局层次

注意:组件面板里并没有QVideoWidget类,需要用提升法将一个QWidget组件提升为QVideoWidget类。右键点击该组件,将其从QWidget提升为QVideoWidget。
在这里插入图片描述
组件类型提升对话框

组件提升法可以将一个组件提升为一个Qt已有的类,也可以提升为一个自定义的类,但是提升后的类必须是基类的子类或更下级的类。

具体代码如下:

import sysfrom PyQt5.QtWidgets import  QApplication, QMainWindow,QFileDialogfrom PyQt5.QtCore import  pyqtSlot,QUrl,QDir, QFileInfo,Qt,QEventfrom PyQt5.QtGui import QIcon,QKeyEvent,QMouseEventfrom PyQt5.QtMultimedia import QMediaContent,QMediaPlayerfrom ui_MainWindow import Ui_MainWindowclass QmyMainWindow(QMainWindow):def __init__(self, parent=None):      super().__init__(parent)   #调用父类构造函数,创建窗体      self.ui=Ui_MainWindow()    #创建UI对象      self.ui.setupUi(self)      #构造UI界面      self.player = QMediaPlayer(self)    #创建视频播放器      self.player.setNotifyInterval(1000) #信息更新周期, ms      self.player.setVideoOutput(self.ui.videoWidget) #视频显示组件  self.ui.videoWidget,installEventFilter(self) #事件过滤器  self.__duration = ""  self.__curPos = ""           self.player.stateChanged.connect(self.do_stateChanged)      self.player.positionChanged.connect(self.do_positionChanged)      self.player.durationChanged.connect(self.do_durationChanged)##  ==============自定义功能函数========================##  ==============event处理函数==========================   def closeEvent(self,event):  #窗体关闭时   # 窗口关闭时不能自动停止播放,需手动停止      if (self.player.state() == QMediaPlayer.PlayingState):         self.player.stop()   def eventFilter(self, watched, event):     ##事件过滤器      if (watched != self.ui.videoWidget):         return super().eventFilter(watched, event)      #鼠标左键按下时,暂停或继续播放      if event.type() == QEvent.MouseButtonPress:         if event.button() == Qt.LeftButton:            if self.player.state() == QMediaPlayer.PlayingState:               self.player.pause()            else:               self.player.play()      #全屏状态时,按ESC键退出全屏      if event.type() == QEvent.KeyPress:         if event.key() == Qt.Key_Escape:            if self.ui.videoWidget.isFullScreen():               self.ui.videoWidget.setFullScreen(False)              return super().eventFilter(watched,event)##  ==========由connectSlotsByName()自动连接的槽函数============           @pyqtSlot()    ##打开文件   def on_btnOpen_clicked(self):      curPath = QDir.currentPath()  #获取系统当前目录      title = "选择视频文件"       filt = "视频文件(*.wmv *.avi);;所有文件(*.*)"      fileName, flt = QFileDialog.getOpenFileName(self, title, curPath, filt)      if (fileName == ""):         return      fileInfo = QFileInfo(fileName)      baseName = fileInfo.fileName()      self.ui.LabCurMedia.setText(baseName)      curPath = fileInfo.absolutePath()      QDir.setCurrent(curPath)   #重设当前目录       media = QMediaContent(QUrl.fromLocalFile(fileName))      self.player.setMedia(media)   #设置播放文件      self.player.play()   @pyqtSlot()    ##播放   def on_btnPlay_clicked(self):      self.player.play()   @pyqtSlot()    ##暂停   def on_btnPause_clicked(self):      self.player.pause()   @pyqtSlot()    ##停止   def on_btnStop_clicked(self):      self.player.stop()   @pyqtSlot()    ##全屏   def on_btnFullScreen_clicked(self):      self.ui.videoWidget.setFullScreen(True)   @pyqtSlot()    ##静音按钮   def on_btnSound_clicked(self):      mute=self.player.isMuted()      self.player.setMuted(not mute)      if mute:         self.ui.btnSound.setIcon(QIcon(":/icons/images/volumn.bmp"))      else:         self.ui.btnSound.setIcon(QIcon(":/icons/images/mute.bmp"))            @pyqtSlot(int)  ##音量调节   def on_sliderVolumn_valueChanged(self,value):      self.player.setVolume(value)   @pyqtSlot(int)  ##播放进度调节   def on_sliderPosition_valueChanged(self,value):      self.player.setPosition(value)##  =============自定义槽函数===============================           def do_stateChanged(self, state):    ##状态变化      isPlaying = (state == QMediaPlayer.PlayingState)            self.ui.btnPlay.setEnabled(not isPlaying)      self.ui.btnPause.setEnabled(isPlaying)      self.ui.btnStop.setEnabled(isPlaying)   def do_durationChanged(self,duration):    ##文件长度变化      self.ui.sliderPosition.setMaximum(duration)    #先把ms化为s,再转换为min      secs = duration / 1000   #秒      mins = secs / 60         #分钟      secs = secs % 60       #余数秒      self.__duration = "%d:%d"%(mins, secs)      self.ui.LabRatio.setText(self.__curPos + "/" + self.__duration)   def do_positionChanged(self, position): ##当前播放位置变化      if (self.ui.sliderPosition.isSliderDown()):         return  #如果正在拖动滑条,退出      self.ui.sliderPosition.setSliderPosition(position)      secs = position/1000   #秒      mins = secs/60         #分钟      secs = secs % 60       #余数秒      self.__curPos = "%d:%d"%(mins, secs)      self.ui.LabRatio.setText(self.__curPos + "/" + self.__duration)

使用事件过滤器EventFilter为视频显示组件videoWidget提供了鼠标和按键操作功能,使得在画面上点击鼠标左键时可以暂停或继续播放,在全屏状态下按Esc键可以退出全屏状态。

来源地址:https://blog.csdn.net/qq_35412059/article/details/129451553

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PyQt5 视频播放--在QVideoWidget上显示视频

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

过滤运行时在 GLSurfaceView 上播放视频

要在GLSurfaceView上播放视频并过滤运行时,可以按照以下步骤进行操作:1. 创建一个GLSurfaceView实例,并设置渲染器。```javaGLSurfaceView glSurfaceView = new GLSurface
2023-09-26

音频和视频无法在PowerPoint中播放

使用Microsoft的PowerPoint应用程序时,您可能会遇到的一些问题可能是音频和视频问题。PowerPoint用户有时报告说,当他们通过电子邮件发送演示文稿时,收件人将无法播放演示文稿。它只是拒绝加载。尽管很少遇到此问题,但在某些
2023-06-05

如何在html中播放视频

本篇文章为大家展示了如何在html中播放视频,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。html播放视频在 HTML 中播放视频并不容易!您需要谙熟大量技巧,以确保您的视频文件在所有浏览器中(In
2023-06-15

CSS响应式视频:优化视频在不同设备上的播放效果

CSS响应式视频:优化视频在不同设备上的播放效果,需要具体代码示例随着移动设备的普及及网络带宽的提升,视频成为互联网中的重要元素。然而,不同的设备,不同的屏幕尺寸和分辨率,使视频在不同设备上的体验效果存在差异。为了更好地优化视频在不同设备上
CSS响应式视频:优化视频在不同设备上的播放效果
2023-11-18

怎么在HTML5中播放 RTSP 视频

今天就跟大家聊聊有关怎么在HTML5中播放 RTSP 视频,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。目前已有 RTSP 播放方案的对比既然是做直播,就需要延迟较低。当摄像头掉线时
2023-06-09

MediaPlayer音频与视频播放方法示例介绍

这篇文章主要为大家介绍了MediaPlayer音频与视频播放方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

AndroidFFmpeg音视频解码播放示例详解

这篇文章主要为大家介绍了AndroidFFmpeg音视频解码播放示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

python中Pyqt5怎么使用Qlabel标签进行视频播放

本文小编为大家详细介绍“python中Pyqt5怎么使用Qlabel标签进行视频播放”,内容详细,步骤清晰,细节处理妥当,希望这篇“python中Pyqt5怎么使用Qlabel标签进行视频播放”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
2023-06-30

android视频播放简单实现示例(VideoView&MediaPlayer)

如果你看过我的《android音乐播放简单实现(MediaPlayer)》,那么本篇将会毫无压力。首先是主界面的三个按钮和一个播放控件
2023-05-30

ssm如何实现视频的上传与播放

这篇文章主要介绍ssm如何实现视频的上传与播放,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现的功能:1:实现视频的上传与播放。2:使用shiro框架进行登录注册。3:视频分页展示在页面上。4:视频简介5:视频评论
2023-06-14

怎么在Android中使用GSYVideoPlayer播放视频器

怎么在Android中使用GSYVideoPlayer播放视频器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。GSYVideoPlayerGSYVideoPla
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录