前言
ffplay是一款功能强大的播放器,qt是目前流行的跨平台界面框架,本文在QT环境下,用ffplay的功能实现了一个简易的播放器。视频显示用QT模块QOpenGLWidget的shader方式显示,该方式能直接渲染yuv图片,降低cpu占用率
一、界面框架

1、MainWindow
最外层部分是MainWindow,继承了QMainWindow。这也是大部分应用的主体框架结构,因为QMainWindow自带菜单栏、工具栏以及状态栏,开发相对方便。
2、CentralWidget
CentralWidget是第二层,MainWindow的中心widget。该层包括三部分,HVideoWidget负责显示视频,HSeekWidget负责进度条的显示,HControlWidget负责视频控制。
3、HVideoWidget
该层是视频业务Widget,里面包含GLWnd(继承于QOpenGLWidget),是QFFPlayer的核心显示Widget,同时也包含视频的业务处理类MyFFplay。
4、HSeekWidget
该层负责视频播放进度条的显示,通过点击进度条能实现播放指定时间的视频,同时显示播放的时长和总时长
5、HControlWidget
负责视频控制部分的功能,比如暂停,快进,快退,逐帧模式,全屏等。
二、HVideoWidget类
该类根据视频的原始宽高比信息,计算出视频的显示区域,并负责视频控制的业务逻辑
1、GLWnd类
GLWnd继承于QOpenGLWidget,负责渲染YUV视频的显示。
2、MyFFplay类
基于原生ffplay,封装的MyFFplay类,包括ffplay的音频播放功能,音视频同步功能,解码功能等。通过MyFFplay的成员函数调用原生ffplay的静态函数,实现视频的控制,播放功能。
3、HFullScreenControlWidget类
窗口在全屏模式时,视频操作的控制面板。鼠标移动时自动出现,鼠标4秒未移动后自动消失

三、进度条控制类HSeekWidget
1、HSeekWidget.ui文件

左右有两个QLabel,分别显示已经播放的时长和视频总时长,中间的MySlider是进度条,负责显示视频的播放进度,点击进度条可以跳转到指定的时间点播放。
运行时效果图

四、视频控制HControlWidget类
1、HControlWidget.ui文件

该类主要负责视频控制,目前的按钮有暂停,恢复播放,停止播放,快进,快退,逐帧模式,全屏模式。
界面如下:
![]()
下载链接:
https://download.youkuaiyun.com/download/pinghe2024/92085640
1051

被折叠的 条评论
为什么被折叠?



