前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyQt5:QMediaplayer,QVideowidget播放视频

PyQt5:QMediaplayer,QVideowidget播放视频

作者头像
何其不顾四月天
发布2023-03-10 13:32:38
1.8K0
发布2023-03-10 13:32:38
举报
文章被收录于专栏:四月天的专栏四月天的专栏

PyQt5:视频播放

前言

最近在一些关于视频管理类的项目,也还有python好久没有更新,所以做一个简单的视频播放器。

环境

代码语言:javascript
复制
IDE:VS2017
Python:py3.6,pyqt5.12
系统:Win10

思路

  • QVideoWidget:这个类主要用作播放视频的控件
  • QMediaPlayer :实现媒体播放的类
  • QMediPlayList:媒体的播放列表,个人理解,用来控制管理播放顺序,方式等

代码片段

  • UI控件 只用了一个Widget,还有放置了一个ListWideget,显示播放列表。
  • 基本框架 Qt的简单格式
代码语言:javascript
复制
库导入区:from *** import ***
主窗体类:class m_window():
Main函数:入口函数,程序退出

-主窗体类(主要功能实现)

1.构造函数(初始化函数)

类的入口函数,写了关于QMediaPlayer声明,初始化。,列表初始化,一些信号槽的连接(播放、暂停、进度条、列表切换)

代码语言:javascript
复制
	def __init__(self):
		super(m_window,self).__init__()
		self.setupUi(self)
		#按钮初始化
		self.PushButtonInit()
		#进度条初始化
		self.ProgressBarInit()
		#播放器、播放列表初始化
		self.mplayer = QMediaPlayer(self)	
		self.ListWidgetInit()
		self.mplayList.setCurrentIndex(0)
		#mVideoWidget控件初始化
		self.mVideoWin = QVideoWidget(self)
		self.mVideoWin.setGeometry(5,5,640,480)
		#nplayer设置视频输出窗体(QVideoWideget)
		self.mplayer.setVideoOutput(self.mVideoWin)
		#信号、槽
		self.play.clicked.connect(self.PlayVideo)
		self.stop.clicked.connect(self.StopVideo)
		self.mplayer.positionChanged.connect(self.PlaySlide)
		self.mplayer.durationChanged.connect(self.MediaTime)
		self.listWidget.itemDoubleClicked.connect(self.GetItem)
		self.Index_Signle.connect(self.SetPlayMedia)

2.按钮初始化函数,包括位置、大小、文字等设置

代码语言:javascript
复制
def PushButtonInit(self):
		self.play = QPushButton(self)
		self.play.setGeometry(5,495,50,20)
		self.play.setText("Play")
		self.play.show()
		self.stop = QPushButton(self)
		self.stop.setGeometry(65,495,50,20)
		self.stop.setText("stop")
		self.stop.show()

3.进度条初始化:声明、定义、类型、位置、大小、量程、显示

代码语言:javascript
复制
	def ProgressBarInit(self):
		self.Slider = QSlider(Qt.Horizontal,self)
		self.Slider.setGeometry(150,495,200,20)
		self.Slider.setRange(0,100)
		self.Slider.show()

4.播放、暂停按钮的槽函数实现

代码语言:javascript
复制
	def PlayVideo(self):
		self.mplayer.play()

	def StopVideo(self):
		self.mplayer.pause()

5.进度条滑块初始位置设置,媒体时长(ms/1000 转换为S)、进度条根据媒体时长设置量程,媒体时间获取信号槽函数

代码语言:javascript
复制
	def MediaTime(self,time):
		self.Slider.setValue(0)
		self.time = self.mplayer.duration() /1000
		self.Slider.setRange(0,int(self.time))

6.媒体播放位置改变信号的槽函数(用来实现进度条功能)

代码语言:javascript
复制
	def PlaySlide(self,val):
		self.Slider.setValue(int(val/1000))

7.播放列表控件,LIstWidget初始化、playList初始化(现在列表的写死的)

代码语言:javascript
复制
	def ListWidgetInit(self):
		self.mplayList = QMediaPlaylist();
		self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile("https://vd1.bdstatic.com/mda-hg6uempmez9u6mqi/sc/mda-hg6uempmez9u6mqi.mp4?auth_key=1562172911-0-0-4c22196ad1d0fcc49402d91336c999c5&bcevod_channel=searchbox_feed&pd=bjh&abtest=all")))
		self.mplayList.addMedia(QMediaContent(QUrl.fromLocalFile("https://vd1.bdstatic.com/mda-hgdizw7w7fpc1pcr/sc/mda-hgdizw7w7fpc1pcr.mp4?auth_key=1562254279-0-0-703eb2eca1f7017eaa49b62a7ef56dda&bcevod_channel=searchbox_feed&pd=bjh&abtest=all")))
		self.mplayer.setPlaylist(self.mplayList)
		self.mplayList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
		self.listWidget.addItem("1")
		self.listWidget.addItem("2")

8.列表切换功能实现槽函数,信号为自定义Index位置索引信号(双击实现播放)

信号

代码语言:javascript
复制
	Index_Signle = pyqtSignal(int)

槽函数

代码语言:javascript
复制
	def SetPlayMedia(self,Index):
		self.mplayer.stop()
		self.mplayList.setCurrentIndex(Index)
		self.mplayer.play()

9.ListWidget双击信号槽函数,Signle_Index信号发射函数

代码语言:javascript
复制
	def GetItem(self,Item):
		self.Index = self.listWidget.row(Item)
		self.Index_Signle.emit(self.Index)

功能截图:

视频1的截图

视频2的播放截图

不足

这个媒体播放器,其实设想的就是一个很简的媒体播放器,只要能实现播放又可以,后来又加了,播放,暂停,进度条,列表等一个修饰性功能。其他功能,进度条拖动,设置播放位置,快进,慢进等功能,在播放列表这一块,本地媒体的获取,在线媒体获取,列表添加媒体,列表Item名称的自动命名等的一些功能实现。由于之前写过一个Qt的音乐播放器,上诉功能也基本实现,也就没有继续往下写,做重复性工作。说一下思路:

本地媒体获取:加一个控件(按钮),利用QFile实现文件选择框,加一下过滤实现本地媒体的选择。

网络媒体获取:加一个LineEidt,用来输入网络在线媒体路径,加入播放列表

进度条拖动:利用Slider信号valuechange等,获取播放位置,利用setPostion设置播放位置

快进:也是对播放位置的处理,设置等间隔时差,实现播放位置的跳跃

列表名单:对本地媒体全路径进行剪切,利用后缀还有‘/’来做切割获取,对ListItem获取,网络媒体就是手动输入了。

列表记录:利用配置文件json、xml等,记录上一次退出时,播放列表名单、播放状态、时间状态等,下一次初始化的时候,进行设置。

源代码

源码

/---------------------------------2019.11.19-------------------------------------*/

上述的窗口自适应大小,快进,慢进功能实现。

PyQt5:QMediaplayer,QVideowidget播放视频2

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PyQt5:视频播放
    • 前言
      • 环境
        • 思路
          • 代码片段
            • 功能截图:
              • 不足
                • 源代码
                相关产品与服务
                云点播
                面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                http://www.vxiaotou.com