X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
玄铁RISC-V活动专区
[经验分享] 【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A pyQt视频播放器与遇到问题
DDZZ669
2023-10-2 10:37
楼主
上篇使用Python编写一个音乐播放器的程序,并在LicheePi 4A中进行测试。 本篇继续来设计一个视频播放器。 # 1 视频播放器 ## 1.1 播放器界面布局 可以使用pyQt进行视频播放器界面的设计,目前设计的一个简易视频播放器的界面如下,主体结构和上一篇的音乐播放器类似: ![](https://xxpcb-1259761082.cos.ap-shanghai.myqcloud.com/pic2/LiPi4A/5/1.png) 界面主要包括三部分: - 视频播放窗口 - 播放进度条 - 播放操作按钮 三个部分采用垂直布局。 界面布局的主要代码如下: ```python #进度条 self.startTimeLabel = QLabel('00:00') self.startTimeLabel.setStyleSheet("color:white") self.endTimeLabel = QLabel('00:00') self.endTimeLabel.setStyleSheet("color:white") self.slider = QSlider(Qt.Horizontal, self) self.slider.setValue(0) self.slider.setMinimum(0) #按钮 self.playBtn = QPushButton(self) self.playBtn.setStyleSheet("QPushButton{border-image: url(resource/ic_play.png)}") self.playBtn.setFixedSize(48, 48) self.fastBackBtn = QPushButton(self) self.fastBackBtn.setStyleSheet("QPushButton{border-image: url(resource/ic_back.png)}") self.fastBackBtn.setFixedSize(48, 48) self.fastForwardBtn = QPushButton(self) self.fastForwardBtn.setStyleSheet("QPushButton{border-image: url(resource/ic_forward.png)}") self.fastForwardBtn.setFixedSize(48, 48) self.openBtn = QPushButton(self) self.openBtn.setStyleSheet("QPushButton{border-image: url(resource/ic_open.png)}") self.openBtn.setFixedSize(24, 24) # 视频显示与播放器 self.videoOut = QVideoWidget(self) self.videoOut.resize(self.width(), self.height()) self.videoOut.setStyleSheet("color:white") self.player = QMediaPlayer() self.player.setVideoOutput(self.videoOut) #进度条布局 self.hBoxSlider = QHBoxLayout() self.hBoxSlider.addWidget(self.startTimeLabel) self.hBoxSlider.addWidget(self.slider) self.hBoxSlider.addWidget(self.endTimeLabel) #打开与播放布局 self.hBoxButton = QHBoxLayout() self.hBoxButton.addStretch(1) self.hBoxButton.addWidget(self.fastBackBtn) self.hBoxButton.addWidget(self.playBtn) self.hBoxButton.addWidget(self.fastForwardBtn) self.hBoxButton.addStretch(1) self.hBoxButton.addWidget(self.openBtn) #整体布局 self.vboxMain = QVBoxLayout() self.vboxMain.addWidget(self.videoOut) self.vboxMain.addLayout(self.hBoxSlider) self.vboxMain.addLayout(self.hBoxButton) self.vboxMain.setStretch(0, 1) #视频控件的比例 self.setLayout(self.vboxMain) ``` ## 1.2 播放代码逻辑 使用Qt自带的媒体播放器QMediaPlayer进行视频播放。 QMediaPlayer的视频播放和音频播放基本一样,这里再描述一下主要使用方法: - player = QMediaPlayer() 创建一个播放器 - player.setMedia(QMediaContent(media_file)) 设置要播放的视频 - player.play() 开始播放 - player.pause() 暂停播放 使用QMediaPlayer播放音乐的主要代码如下: ```python # 播放/暂停播放 def playVideo(self): if not self.is_setURL: self.Tips('请先选择视频文件') return if self.is_pause: print("play") self.player.play() self.is_pause = False self.playBtn.setStyleSheet("QPushButton{border-image: url(resource/ic_pause.png)}") else: print("pause") self.player.pause() self.is_pause = True self.playBtn.setStyleSheet("QPushButton{border-image: url(resource/ic_play.png)}") ``` 视频文件的选取,是通过文件选择功能用于手动选取: ```python # 打开文件夹 def openVideoFile(self): media_file,_ = QFileDialog.getOpenFileName(self, "选择文件", "", "*.mp4") if media_file != "": if sys.platform.startswith('linux'): media_file = QUrl("file://" + media_file) #Linux中运行使用这句 else: media_file = QUrl(media_file) #Windows中运行使用这句 print(media_file) self.player.setMedia(QMediaContent(media_file)) # 选取视频文件 self.is_setURL = True self.is_pause = True self.playVideo() ``` # 2 一些问题尝试解决 ## 2.1 系统扩容修正 上篇文章提到,在修改音乐文件的汉字名称时,发现之前扩容的TF卡,好像没有挂载在tfcard目录。 重新看下了文档教程,应该是/etc/fstab修改的不对,之前挂载到/mnt上了,应该改为tfcard目录: ![](https://xxpcb-1259761082.cos.ap-shanghai.myqcloud.com/pic2/LiPi4A/5/2.png) 修改后重启,也可以再使用btop看一下,这次显示的是tfcard了,之前显示的是mnt ![](https://xxpcb-1259761082.cos.ap-shanghai.myqcloud.com/pic2/LiPi4A/5/3.png) 也可以再使用VNC登录确认一下: ![](https://xxpcb-1259761082.cos.ap-shanghai.myqcloud.com/pic2/LiPi4A/5/4.png) 现在这些音乐文件实际上就是存储在TF卡了,可以再创建一个video目录,用于存储视频文件,便于测试本篇的视频播放器。 ## 2.2 视频播放卡顿 实际播放时,视频有点卡顿,特别是刚开始播放的时候,画面卡顿严重,另外运行时有如下信息: ```sh [DBGT] vc8kdec compiled without trace support (ENABLE_DBGT_TRACE switch not enabled) OMX ! decoder_get_parameter OMX_ErrorNoMore (2) ``` ![](https://xxpcb-1259761082.cos.ap-shanghai.myqcloud.com/pic2/LiPi4A/5/5.png) 在网上搜索类似信息,这个输出好像又不是错误信息: ![](https://xxpcb-1259761082.cos.ap-shanghai.myqcloud.com/pic2/LiPi4A/5/6.png) ## 2.3 尝试外接HDMI屏幕运行 SSH登录,利用MobaXtrem的显示功能播放视频卡顿,也可能是网络或其它原因。 那就试下给板子外接HDMI屏幕和鼠标键盘,进行视频播放测试。 在之前的文章:LicheePi 4A 编程环境与系统扩容测试,提到过外接HDMI屏幕运行pyQt程序,会有错误提示: ```sh Cannot find EGLConfig, returning null config Unable to find an X11 visual which matches EGL config 0 Segmentation fault ``` 这次再来试下能不能解决。 网上搜索相关信息,可能与OpenGL有关,先安装一个OpenGL试试: ```sh sudo apt install python3-opengl ``` 安装后仍然会有之前那个错误。 另外,之前也还会有一条警告信息,可以使用如下指令解决: ```sh sudo apt-get install at-spi2-core ``` ![](https://xxpcb-1259761082.cos.ap-shanghai.myqcloud.com/pic2/LiPi4A/5/7.png) 消除第一个警告后,再次运行pyQt程序,仍然会有EGLConfig的错误提示,无法运行pyQt程序。 这个问题暂时搁置。 # 3 演示 先来看下使用MobaXtrem的SSH登录中运行视频播放器的效果(卡顿问题待解决):
video
另外,上次测试音乐播放,喇叭好像被测坏了,现在插上都是噪音,因为不是用的原配的喇叭,可能功率不匹配,现在插上都是噪音,这个视频就没接喇叭。接上耳机听视频里的音频还是正常的,并且音频没有卡顿。 # 4 总结 本篇介绍了使用pyQt编程设计了一个简易的视频播放器,可以选取视频文件,进行基础的视频播放功能。使用MobaXterm SSH登录进行实际的视频播放的测试。
点赞
回复评论 (3)
沙发
lugl4313820
大佬跑的是什么系统呀,换个系统试一下看看。
点赞
2023-10-3 10:19
板凳
DDZZ669
引用:
lugl4313820 发表于 2023-10-3 10:19
大佬跑的是什么系统呀,换个系统试一下看看。
默认的debian
点赞
2023-10-3 14:29
4楼
Jacktang
卡顿确实解决了,厉害
点赞
2023-11-19 22:41
最新活动
有奖直播报名中!抢占工业4.1先机,WT·世健科技日等你来!
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
罗姆有奖直播 | 重点解析双极型晶体管的实用选型方法和使用方法
STM32N6终于要发布了,ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
随便看看
在推挽电路中什么是从负载吸入电流 吐出电流
EEWORLD大学堂----使用CCS调试Linux
进出门欢迎的传感器系统方案?
PIC实现4位数码管扫面显示不正常
虚心请教 tap point
求一个SST烧写程序
有没有谁知道quartus中的时序报告里的元素是什么意思
【i.MX6UL开发】内核,uboot源代码有改动,Yocto如何修改?
Barrie Gilbert的家庭实验室(肯定有你没见过的古董)
LED照明与功率因数之间的关系
求助嵌入式系统题目
看lb8820265的蓝牙平衡小车走起来~~
视频教程——补上这一课:比特币的原理
【nucleo心得】2 mbed新建项目,用PWM实现LD2呼吸灯效果
引脚速度有何作用
论文基于DSP预测癌细胞的大体方向是什么?
出售TX-1C 51单片机开发板
【TI首届低功耗设计大赛】微型LCR测试仪-电容测试与精度对比
WINCE下怎么诊断一个驱动有没存在资源锁死的问题?就是多个线程对同一个资源的访问同步互斥没做好。
关于430F5438和电脑进行网口通信的若干问题
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复