标题 | 基于Qt框架的视频播放组件的设计开发 |
范文 |
摘 要:随着国产操作系统的逐渐普及,跨平台的视频播放组件急需开发。本文首先对LibVLC进行概述分析,并对Qt编程框架进行简要介绍,然后给出视频播放组件的设计开发方法,最后在Windows平台和Linux平台上进行仿真验证。结果表明:该视频播放组件满足实际应用需求。 关键词:视频播放;断点续播;组播;LibVLC 中图分类号:TP317;TN946 文献标识码:A 文章编号:1003-5168(2020)13-0021-03 Design and Development of Video Play Component Based on Qt Framework ZHANG Qi (The 27th Research Institute of China Electronic Technology Corporation,Zhengzhou Henan 450015) Abstract: With the popularity of domestic operating system,cross-platform video playback components need to be developed urgently. In this paper, libVLC was analyzed and QT programming framework was introduced. Then the design and development method of video playing component was given. Finally, the simulation was carried out on Windows platform and Linux platform. The results show that the video playing component can meet the practical application requirements. Keywords: playback;interrupted stream continuation;multicast;LibVLC 随着国产操作系统的逐渐普及,特别是在军用产品中的普及,跨平台、通用化的视频播放组件急需开发。本文结合实际工程的需求,以Qt为编程框架,以LibVLC播放器代码为基础,设计开发一种跨平台、通用化、能播放网络组播视频及本地视频文件、支持实际项目特定网络直播视频(M4V)断点续播的视频播放组件。 1 LibVLC及Qt框架介绍 1.1 LibVLC概述 VLC多媒体播放器[1]是一个可以用来播放各种各样的音视频的多媒体播放器。其支持众多音频与视频解码器及文件格式,同时也能作为单播或组播的流式服务器[2-3]在IPv4或IPv6的网络连接下使用[4]。基于Qt框架的视频播放组件将采用VLC视频播放内核组件,并在VLC内核LibVLC组件基础上进行修改,以实现断点续播功能,并在国产操作系统上进行使用。 LibVLC是VLC的核心部分,它是一个提供接口的库,比如,给VLC提供些功能接口:流的接入、音频和视频输出、插件管理、线程系统。 1.2 Qt框架概述 Qt是一个跨平台C++图形用户界面[5]应用程序开发框架,它是面向对象的框架,使用特殊的代码生成扩展[元对象编译器(Meta Object Compiler,MOC)]以及一些宏,易于扩展,允许组件编程。 Qt的良好封装机制使得其模块化程度非常高,可重用性较好,对用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代callback,使得各个元件之间的协同工作变得十分简单[6]。 2 视频播放组件设计 本文设计的视频播放组件以VLC核心LibVLC为基础,同时以Qt为编程框架,主要包括以下两个部分:核心模块和界面模块。核心模块主要包括媒体部件、媒体播放器部件、媒体列表部件、媒体列表播放器部件、视频部件、VLC实例部件、视频元部件;界面模块主要包括音频控制控件、视频控制控件、视频窗口控件、声音滑块控件。播放组件组成具体如图1所示。 2.1 核心模块 视频播放组件的核心模块主要实现将LibVLC相关核心组件在Qt框架下进行封装。这里以媒体部件模块设计为例进行描述(见图2):创建Media类,该类继承于QObject;创建公共函数和私有函数,主要包括初始化VLCMedia类函数initmedia、核函数core、获取当前位置函数currentLocation、复制媒体函数duplicate、录制函数record、设置参数函数setOption。 2.2 界面模块 对于界面模块的设计,以视频窗口控件模块设计为例进行描述(见图3):①创建VLCVideoWidget类,该类继承于QObject;②创建公共函数和私有函数,主要包括视频窗口控件初始化函数initVideoWidget、全屏切换函数toggleFullscreen、设置媒体播放器函数setMediaPlayer等。 2.3 断点续播设计 断点续播基于实际项目需求,主要为了解决在播放某种特定实时UDP视频流时,达到即时加入即时播放的目的。分析原有LibVLC代码可知,在以UDP方式播放视频流时,首先要检测一个视频头才能正常播放,在播放器即时加入时,实时视频流视频头此时已发送到网络上,播放器将因为错过视频头而不能达到视频播放的目标。通过分析LibVLC代码可知,UDP视频流输入时需要首先经过核心模块的视频部件中的UDP输入模块,本设计在UDP输入模块的数据块检测BlockUDP函数中增加视频头检测代码,若未检测到视频头,每经过一定数据块则增加一个视频数据块,以此来解决播放器错过视频头的问题,具体流程如图4所示。 3 试验测试 研究者在Windows平台、Linux平台上测试视频播放软件,其中Linux平台包括国产中标麒麟操作系统(64位和32位)和其他Linux操作系统(ubuntu 操作系统32位和64位),测试结果如图5至图9所示。 4 结论 经过多平台多系统测试,该视频播放组件基本满足视频播放需求,且可满足多种视频格式播放需求,同时可针对项目中特定视频格式进行断点续播。 参考文献: [1]张晓霞.基于VLC的校园信息发布系统[J].通信技术,2011(7):86-88. [2]贾友波.VLC Media Player在教学中的应用探索[J].中国教育现代装备,2011(19):24-26. [3]王鑫.建立IPv6流媒体服务系统[J].网管员世界,2008(7):54-55. [4]孔晓东,曾贵华.智能视频监控技术研究[D].上海:上海交通大学,2008. [5]彭均键,史步海,劉洋.基于Qt的嵌入式GUI开发平台的搭建[J].微型电脑应用,2010(2):40-42. [6]曾剑元.ARM9平台上基于Qt/Embedded的嵌入式GUI的研究与实现[D].长春:吉林大学,2010. 收稿日期:2020-04-11 作者简介:张琪(1988—),男,硕士,工程师,研究方向:光电导航专业。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。