python3GUI--做一款某雷影音播放器By:PyQt5
文章目录
- 一.准备工作
- 二.预览
- 1.主界面
- 2.添加本地视频到播放列表
- 3.查看视频信息&播放本地视频
- 4.视频进度、音量调节
- 5.播放在线视频-b站
- 6.播放在线视频-其他
- 7.播放在线电视节目
- 7.登录窗口
- 8.文件删除对话框
- 三.UI设计
- 1.主界面UI:
- 2.登录界面UI:
- 四.程序设计
- 1.程序执行流程示意图:
- 2.用到的一些类及子类:
- 3.左上角提示信息:
- 4.视频播放控制
- 5.鼠标点击实现进度控制
- 五.避坑
- 1.添加了QVideoWidget,播放视频只有声音没有画面:
- 2.程序执行出现了:DirectShowPlayerService::doRender: Unresolved error code 0x80040266 (IDispatch error #102)
- 六.待解决问题
- 七.总结
- 附:参考
- 1.QT指定窗口位置截屏:
- 2.事件类:
- 3.将本地文件移入回收站(不在磁盘上删除):
- 4.左上角提示信息文字宽度自动计算:
- 5.cv2获取视频时长
- 6.滚轮事件:
- 7.点击QSlider跳转到指定进度(或控制音量):
- 8.小图标的使用
- 9.QSS渐变颜色:
- 10.QSS窗口圆角:
- 11.B站视频接口分析:
- 12.QT托盘:
- 13.防止程序多开:
本次使用PyQt5开发一款视频播放器,支持本地视频文件播放、在线视频播放,支持解析播放B站视频,撰写本篇用来记录一下开发过程。
一.准备工作
本软件是在Windows系统上使用PyQt5开发的视频播放器GUI。
使用时需要安装解码器,这里推荐LAVFilters解码器
LAV Filters是一种使用libavformat播放各种媒体文件的多格式媒体拆分器/解码器。对MKV/WebM、AVI、MP4/MOV、MPEG-TS、FLV、OGG进行测试并注册。其他格式可以使用GraphStudio进行测试。H264/AVC、H265/HEVC、VC-1、MPEG4-ASP(Divx/Xvid)、VP8、VP9已测试,运行良好。DTS,AC3,TrueHD,MP3,Vorbis已经过测试。字幕支持。流切换。
下载地址:
https://github.com/Nevcairiel/LAVFilters/releases
如果访问太慢可以去我的蓝奏云下载:
https://wwe.lanzoul.com/iehNz0167ewb
二.预览
1.主界面
主界面为软件的启动界面,打开软件后会进入主界面。
2.添加本地视频到播放列表
点击右上角按钮,添加本地文件到播放器列表。
3.查看视频信息&播放本地视频
鼠标放在视频名称上,可以查看完整视频名称、视频大小以及时时长。双击视频即可开始播放。
4.视频进度、音量调节
通过点击、拖动视频进度条、敲击键盘←、→键改变视频播放进度,通过点击、拖动音量调节滑块、敲击键盘↑、↓键或者上下滚动鼠标滚轮上下滚动改变当前播放器的音量。
5.播放在线视频-b站
在首页的输入框中输入b站视频地址,播放器自动解析视频,即可实现b站视频播放(暂不支持弹幕)。
测试视频地址:https://www.bilibili.com/video/BV1fi4y1C7qE?spm_id_from=333.337.search-card.all.click
6.播放在线视频-其他
在首页的输入框中输入其他视频地址,也能实现在线视频的播放。
测试视频地址:http://vfx.mtime.cn/Video/2019/03/09/mp4/190309153658147087.mp4
7.播放在线电视节目
播放器支持解析.m3u8地址,继而实现在线电视节目播放
m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8。
m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。使用m3u8格式文件主要因为可以实现多码率视频的适配,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一个合适的码率文件进行播放,从而保证视频的流畅度。
7.登录窗口
模仿着写了一个登录窗口,没有写具体功能。PS:由于CSDN图片限制,抹去了二维码。
值得一提的是,若3分钟内不扫描此二维码,会自动提示“二维码已失效,点击刷新”即可展示原二维码。
8.文件删除对话框
右击播放列表某一个视频,选择“删除本地文件”。
三.UI设计
1.主界面UI:
主界面采用整体垂直布局,局部水平或者垂直布局。存在重写的组件(QVideoWidget、两个QSlider),整体样式设计采用QSS。
2.登录界面UI:
四.程序设计
1.程序执行流程示意图:
程序执行流程示意图如下图所示
2.用到的一些类及子类:
类名 | 作用 |
---|---|
QMainWindow | 主窗口 |
QHeaderView | 主设置表格表头 |
QAction | 执行一些动作 |
QMenu | 创建菜单 |
QSystemTrayIcon | 托盘 |
QMediaPlaylist | 播放列表 |
QMediaContent | 添加到播放列表的内容 |
QMediaPlayer | 播放器主体 |
QMessageBox | 消息提示框 |
QTimer | 定时器,控制提示信息 |
QUrl | 将url转化为qt识别的url |
QMessageBox | 消息提示框 |
QDateTime | 进行时间转换 |
Qt | 存储一些QT5常量 |
pyqtSlot | 槽 |
3.左上角提示信息:
声明一个QLabel,使用QSS设置其样式(背景透明,字体颜色为黄色),设置其父窗口为frame,使用信号与槽机制并且使用QFontMetrics(),动态计算此label宽度,将其以合适的大小展示在适当的位置,在使用定时器QTimer定时销毁此label,实现左上角提示信息的显示。
4.视频播放控制
在视频播放时,用户可以通过键盘改变播放进度,鼠标左键双击控制是否全屏,使用鼠标左键单击控制视频播放与暂停,又或者使用鼠标滚轮控制播放器的音量。我自定义了一个QVideoWidget,通过重写其中的mouseReleaseEvent()方法实现播放与暂停控制,重写mouseDoubleClickEvent()实现左键双击全屏,重写wheelEvent()实现鼠标滚轮控制播放器音量,归根结底还是信号与槽。
5.鼠标点击实现进度控制
原生的QSlider仅仅给我们提供了sliderMoved(),sliderPressed(),sliderReleased()等方法,如果我们想通过点击slider的某一个位置实现视频进度、播放器音量的调节呢?这就需要我们自定义QSlider的mouseReleaseEvent()事件了,通过重写mouseReleaseEvent()函数,判断鼠标松开事件是鼠标左键发出的,继而确定鼠标点击位置,将slider的值设置为鼠标点击位置的值,并且用信号将此值发射给播放器,这就实现了鼠标点击指定位置改变进度/音量。
五.避坑
在此记录下开发过程中的坑
1.添加了QVideoWidget,播放视频只有声音没有画面:
分析:可能设置了主窗口背景透明self.setAttribute(Qt.WA_TranslucentBackground)
2.程序执行出现了:DirectShowPlayerService::doRender: Unresolved error code 0x80040266 (IDispatch error #102)
分析:缺少LAVFilters-0.76-Installer.exe解码器
六.待解决问题
软件只是实现了某雷影音播放器的一点点功能,当然还存在一些问题。
1.播放列表不支持增量添加
2.没有播放历史进度记录
3.在线视频播放地址解析错误会造成软件直接崩溃产生DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x800c0008 (???)
等等…
七.总结
本次使用PyQt5仿照某雷影音开发了一款视频播放器,支持在线、本地视频播放、b站视频解析播放,播放进度调节、音量调节、全屏、视频截图、信息提示…播放器功能基本实现,其他额外的功能暂未实现。ps:本打算在软件中加入自定义的广告,但是没加。以后还有可能做一款视频播放器,也像b站那种,可以播放弹幕,知易行难,任重而道远。(程序晚几天打包好放链接)觉得还行的话,点个赞吧~
软件试用:蓝奏云
附:参考
1.QT指定窗口位置截屏:
Qt实现截屏并保存(转载)
2.事件类:
Qt5的QEvent事件类
3.将本地文件移入回收站(不在磁盘上删除):
Python 组织文件:shutil模块与os,send2trash安全删除模块
4.左上角提示信息文字宽度自动计算:
QFontMetrics 实现文字显示长度控制
5.cv2获取视频时长
OpenCV学习笔记(2):间隔截取视频帧
6.滚轮事件:
8-使用QT5的鼠标事件和滚轮事件
7.点击QSlider跳转到指定进度(或控制音量):
QT应用编程: QSlider设置滚动块定位到鼠标点击的地方
8.小图标的使用
QT 使用 qtasome图标 (python版)
9.QSS渐变颜色:
Qss 渐变颜色设置
10.QSS窗口圆角:
Qt 之 设置窗口边框的圆角(使用QSS和PaintEvent两种方法)
11.B站视频接口分析:
关于bilibili视频下载的一些小思路
12.QT托盘:
(1)
qt 之 QSystemTrayIcon(托盘程序整个例子)
(2)
Qt浅谈之三十系统托盘(QSystemTrayIcon)
(3)
Qt 之 QSystemTrayIcon
13.防止程序多开:
QT防止程序多次启动
python3GUI--做一款某雷影音播放器By:PyQt5相关推荐
- python3GUI--做一款某雷影音播放器(第二弹v1.5)By:PyQt5(附下载地址)
文章目录 一.准备工作 二.预览 1.主界面 2.添加本地文件 1.静图展示 1.列表视图 2.缩略图视图 2.动图演示 3.查看视频信息&视频调节 1.视频信息-toolTip 2.视频信息 ...
- 影音之星:一款纯绿色的万能影音播放器
影音之星是一款纯绿色的万能影音播放器,界面简洁易用,支持绝大部分网络视频格式(包括SCM格式),不含任何流氓插件,也决不会给用户带来广告的烦恼. 软件截图 播放界面 格式转换 音频调整 设置文件关联 ...
- CMP FLASH影音播放器插件
我搜索视频播放插件很久了,一直没有找到合适的(要么功能不完善.要么有水印.要么界面不美观),今天终于找到了一个不错的视频播放插件--CMP4 Flash 影音播放器插件. CMP是一款免费的在线Fla ...
- 开源项目之Splayer 射手影音播放器
Splayer(射手影音播放器)是一款高画面.低消耗.智能化.精致美观的影音播放器. 具有如下八个独创: 独创ShaderEngineTM图像增强引擎,4倍速驱动,降低画面噪点,锐利画质呈现,低画质视 ...
- 修改射手影音播放器字幕保存路径的两种方法
射手影音播放器--高清时代必备的美剧播放利器,除了轻巧的体积和易用的操作,最大的亮点莫过于可以通过射手网智能匹配下载字幕.不知出于何种考虑,在新版的射手影音中取消了很多高级设置,比如修改字幕保存路径的 ...
- 强大的多媒体播放器:射手影音播放器SPlayer for Mac
射手影音SPlayer for Mac是一款功能齐全的媒体播放器,射手影音能够播放几乎所有类型的视频文件.splayer具有内置翻译系统,集成了实时语音识别和NLP(自然语言改进)技术,可帮助您添加字 ...
- 三款Android平台音乐播放器多方位对比
音乐播放器作为重要的娱乐工具,在PC端异常重要,在移动端同样如此.移动端的音乐播放器很多,巨头们纷纷在这个领域布局,腾讯百度等均拥有各自的移动端音乐播放器.爱好音乐的机友们也面临较多的选择. 小编在这 ...
- 视频播放器 影音播放器PotPlayer v1.7.17891 绿色无广告版
说明 PotPlayer是韩国最大门户网 Daum 公司为旗下TV吧/点播吧/实况吧量身打造的一款多媒体免费视频播放器.集点播,视屏收视,媒体分享,在线聊天为一体.内置 DXVA1/2 源生支持MPE ...
- 【原创】关于视频播放器如何做到边播边缓存?【如何用Vitamio做一款功能强大的视频播放器补充篇】
上一章传送:https://blog.csdn.net/mzy24511cs/article/details/80577418. PS:最新补充说明,Vitamio各版本之间存在差异,我最近升级了5. ...
- C++基础入门:实现类似暴风影音的影音播放器!(源码展示)
VC++影音播放器源代码,基于DX技术实现,常规的WAV/MP3/AVI/WMV等格式都能很好的支持.界面酷似早期的暴风影音播放器,那种经典风格的. 项目如下: 代码如下: 众所周知,RTMP是以fl ...
最新文章
- oracle直查和call哪个更快,让oracle跑的更快1读书笔记二
- 一本关于 女仆小说的构思,有能力写的看下
- vs2012编译使用lua 5.2静态库
- “乞讨者”王小波与“怪物”巴尔扎克
- java入门5-asp.net关注
- ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰
- python字符串前面加u_Python 字符串前面加u,r,b,f的含义
- 【每日算法Day 87】今天我脱单了,所以大家不用做题了!
- Swift观察者模式
- USACO26 moofest 奶牛集会(归并排序)
- afuwin64教程_AMI刷BIOS工具下载|AFUWIN(AMI刷BIOS工具) v4.47官方最新版 附使用教程_星星软件园...
- 管道爬行机器人内部陀螺仪_管道爬行机器人组成部分
- echarts markline X轴 Y轴 添加标识线
- 北航大学计算机教学平台,信息学院赴北京航空航天大学计算机教学实验中心参观交流...
- Micropython八位共阴数码管驱动模块分享
- TestCenter测试管理工具功能详解一(F)
- Oracle Spatial 空间分析之缓冲区分析
- 关于全球时间的一点理解
- Java中如何不用中间变量来使两个变量交换值
- QTableView 例三(代理)