基于QT 的音视频播放器设计

2022-07-11 01:13徐特
电子技术与软件工程 2022年4期
关键词:播放器音视频调用

徐特

(苏州长风航空电子有限公司 江苏省苏州市 215151)

音视频播放器是指能播放以数字信号形式存储的音频及视频的软件程序。目前市面上存在数十种播放器,适用于桌面端、移动端等各种场景,有的设计精简、有的功能强大,一般都能支持各种常见的媒体格式(.mkv、.rmvb、.mpg、.mp4、.avi 等)。虽然各种播放器性能和功能都各不相同,但也有一些不足之处,如暴风影音占用系统资源大,射手播放器的播放列表并不显示到主界面上等,且通常无法支持六路同时播放。本文将根据特定需求,设计并实现一款界面简洁,操作简单,功能强大,支持多种媒体格式的音视频播放器。

1 功能需求

音视频播放器应具备以下主要功能:

(1)六路音视频同时解码,按数据编码时间戳播放同步播放;

(2)可进行播放、暂停、停止等操作;

(3)可调节音量;

(4)可随意切换“六等分画面”、“主从画面”、“单画面”三种模式进行播放;

(5)单帧前进及单帧后退播放功能;

(6)对文件中标记的时间进行快速跳转查找;

(7)具备时间搜索定位功能,精确到秒级;

(8)支持快进播放和慢放功能;

(9)支持快退播放;

(10)提供主要状态信息查询功能;

(11)具有用户名、密码等权限管理功能;

(12)具备视频截图和视频截取功能;

(13)可将记录载体中的记录数据文件下载到本地硬盘。

2 开发环境介绍

2.1 Qt 开发工具

QT 是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。自QT 进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。信号和槽机制是QT 的核心机制,信号和槽是一种高级接口,应用于对象之间的通信,它是QT 的核心特性,也是QT 区别于其它工具包的重要地方。

Qt 提供了一整套的窗口部件。它们组合起来可用于创建用户界面的可视元素。按钮、菜单、滚动条、消息框和应用程序窗口都是窗口部件的实例。

2.2 mpv播放内核

mpv 是开源播放器mplayer 和mplayer2 的一个分支,界面精简,功能齐全。其在Linux 上拥有广泛的输出设备支持,相对于PotPlayer 它最大的特点是跨平台,支持动态lua 脚本解析,可高度定制化。内置ffmpeg 解码器,支持绝大部分的视频和音频格式,支持ass 特效字幕,GPU 解码能力十分出色,支持本地播放和网络播放。mpv 官方提供了一个Qt 的demo,可以下载学习mpv 的Qt 二次开发。

3 开发准备

(1)QT 官网上下载Qt 5.6.1 mingw32 位安装包并安装完成。

(2)配置mpv。

在mpv 官网上下载mpv 开发包,包含.h 文件、.lib 文件和.dll 文件,在Qt 工程的.pro 文件中添加包含mpv 的.h文件和.lib 文件的路径。将mpv-1.dll 文件拷贝至Qt 生成的.exe 文件所在的路径下。

4 界面设计

4.1 登录界面

软件登录界面设置了用户名和密码输入窗口,实现对用户登录进行权限管理,保障了软件使用的安全性,用户权限分为以下两种:

普通用户:可使用播放器的所有功能

管理员用户:可使用播放器的所有功能,且可以对普通用户进行管理,包括增加、修改、删除用户等。

4.2 播放器主界面

播放器主界面如图1 所示。(1)“文件”可以选择需要播放的视频文件夹;

图1:播放器主界面

(2)“控制”可以选择文件加载,跳转到文件加载界面,还可以选择界面布局,等分或主从;

(3)包括“版本信息”,“检测修复”和“格式化”;

(4)在管理员账号下会显示“管理”菜单,可实现对账号的增加、修改和删除操作;

(5)单个播放界面的开始/暂停和停止按钮;

(6)分别为截图和视频截取按钮,点击截图后可自动将当前画面保存为图片,点击视频截取按钮后会弹出对话框,输入起始时间实现视频截取,如图2 所示。

图2:视频截取

(7)等分和主从模式切换按钮;

(8)跳至上一帧和下一帧;

(9)时间检索输入框,在框内输入需要检索的时间点,按回车键后即可跳转至该时间点播放;

(10)选择播放速度;

(11)备用按键,令其他路视频与第一路同步;

(12)根据mark 文件进行跳转;

(13)根据shoot 文件进行跳转;

(14)音量控制条。

5 功能实现

5.1 解码播放及控制

使用mpv 来解码播放,需要用mpv_node 处理,而Qt中如何转成mpv_node 需要特殊的处理才行,因此自己直接封装多个接口,传入的参数都支持QVariant 类型,提高了兼容性,可以传入各种不同类型的数据参数。

主要通用接口如下:

封装完通用接口后就可以通过命令和属性的调用来实现视频的解码播放和播放控制等,为方便使用,先封装一个mpv 播放器类和一个视频显示窗体类,在mpv 播放器类中封装一些常用的接口,比如播放、暂停、获取视频总长、静音、截图等。

解码播放的流程如下:

(1)调用mpv_create 创建实例。

(2)调用mpv_set_option 设置播放句柄。

(3)调用mpv_set_property 设置一些属性比如启用键盘输入等。

(4)调用mpv_set_option 设置一些参数比如硬解码、超时时间等。

(5)调用mpv_initialize 初始化实例。

(6)调用mpv_command_async 执行命令loadfile 打开文件播放。

(7)调用mpv_terminate_destroy 释放实例。

解码播放的核心代码如下:

用mpv 来读取文件的信息以及设置当前播放进度、音量等是通过读取和设置属性来处理的,具体有哪些属性及各自的含义可以在mpv 官网上查找。

常用的一些属性:

(1)视频原始宽度高度width height

(2)视频保存视频文件 stream-record 为空则表示停止录像

(3)暂停播放 pause yes 表示暂停no 表示继续

(4)视频文件时长 duration

(5)静音 mute yes 表示静音no 表示非静音

(6)获取播放进度 time-pos

(7)设置播放进度 seek

(8)截图 screenshot-to-file

5.2 登录及用户管理

登录及用户管理通过数据库来实现,Qt 中对数据库的操作主要通过QSqlQuery 实现,QSqlQuery 提供了执行数据库语句的方法,在Qt 中利用QSqlQuery 类实现了执行SQL语句。

核心代码如下:

5.3 视频播放效果

经测试,该播放器可同时流畅播放六路音视频,播放效果如图3。

图3:视频播放效果图

6 总结

本文设计的音视频播放器经实际使用,能够满足前面所提的所有需求,可实现六路音视频同时播放,可实现播放、暂停、停止、快进、快退、音量调节和时间显示等播放控制功能,支持多种常见的多媒体格式,画面播放流畅,界面简洁,操作便捷,占用空间小,完成了预期的目标。

猜你喜欢
播放器音视频调用
Walkman诞生40周年 索尼适时发布NW-ZX500和NW-A100系列播放器
核电项目物项调用管理的应用研究
3KB深圳市一禾音视频科技有限公司
基于STM32的MP3播放器设计
Moon ACE播放器/放大器一体机
LabWindows/CVI下基于ActiveX技术的Excel调用
WIFI音视频信号传输的关键问题探究
高速公路整合移动音视频系统应用
基于系统调用的恶意软件检测技术研究
播放器背板注塑模具设计