欢迎来到学术参考网

嵌入式的车载多媒体软件开发

发布时间:2016-06-14 15:50

  设计了一种基于嵌入式系统的高清晰、便携式的车载播放系统。该播放系统的软件开发设计以Mplayer为后台,实现对音视频文件的解码播放等工作,并以Qt的基础类库为基础设计了嵌入式多媒体播放器的前端控制图形界面,通过创建QProcess进程,实现对播放过程的控制,与后台Mplayer进行通信,实时获取并显示播放信息,并在指定窗口对音视频码流进行输出显示。

 

  目前,国内车载电子设备市场极度缺乏多媒体综合软件,该软件能有效地将车载导航、影音图像、倒车雷达、娱乐互动等多个功能整合,方便乘客和车主的使用[1]将多种娱乐和使用功能整合统一,使得设备简洁美观,同时降低了重复安装的成本和投入。可以极大地减少车内空间消耗,降低整车油耗[2]。多媒体共屏展示也能保证驾驶员的操作强度,保证行车安全。因此,将行车信息、娱乐互动、交流通信、车载导航等功能集于一体的嵌入式综合媒体系统符合市场和环境的发展要求[3]

 

  1 车载嵌入式播放器总体设计

 

  出于应用领域、自带资源、可扩展资源、功耗等多方面的考虑,选择Linux 内核为嵌入式多媒体播放器的操作系统核心。将多媒体技术应用于嵌入式系统中面临着诸多的技术难题,嵌入式设备的特点决定了其资源通常非常有限,而有限的资源意味着需要进行多方面技术的优化[4]

 

  首先,嵌入式设备采用蓄电池提供能源,所以对系统的功耗要求比较严格;第二,嵌入式设备上通常没有实用的图像加速器,声卡等硬件加速设备的支持;第三,不存在DirectXDirectShow等高层多媒体的支持。基于上述考虑,有必要设计适用于嵌入式应用的嵌入式处理器,嵌入式操作系统。根据嵌入式多媒体播放器的功能需求及技术特点,通常将嵌入式多媒体播放器的体系结构划分为硬件层、内核层和应用层,具体如图1所示。

 

  系统的硬件层的硬件平台包括嵌入式微处理器和外围设备,通过合理选型和匹配可以完成满意的底层硬件组合。本系统的嵌入式MCU使用三星公司的S3C2410高速微处理器,S3C2410高速微处理器作为整个硬件系统的控制核心,接收、处理相关数据并实时发出控制指令。与其配合的系统外围设备是完成系统功能的必要组建和模块,涉及系统存储模块FLASHE2PROMLCD输出单元、主控外围电路和音频输出模块等。

 

  软件部分包含应用层和内核层两个部分。应用层包含嵌入式Linux操作系统和硬件驱动程序,包括BootLoaderLinux内核,根文件系统3部分。应用层包含嵌入式用户应用程序、音频解码器和GUI。本系统选择嵌入式Linux操作系统作为操作系统[5]

 

  2 操作系统平台的构建

 

  内核是整个Linux系统的核心,根据实际情况针对内核的配置进行选择,本质上指根据开发系统的功能需求对已有的操作系统进行选择,保留开发需求的系统单元,删除不需要的模块单元。在本系统中,嵌入式Linux内核选择ARM?Linux内核。Linux内核的配置系统由Makefile、配置文件()、配置工具组成[6]。完成内核的数据参数配置后,不能将程序数据直接下载到嵌入式系统中进行调试运行,因为此时数据仍然以源代码的形式存在。此时,为了生成最终能在嵌入式操作系统上运行的可执行代码[7],需要进一步对内核进行编译。

 

  过程结束后,ImagezImage两个内核映像文件会在arch/arm/boot目录下生成,zImage为压缩后的映像文件,Image为正常大小的映像文件。得到内核映像文件后,首先在开发板使用的宿主机(PC)上建立一个tftp服务,使用DNW工具,在开发板上电时按任意键进入U?Boot提示符,执行以下命令:

 

  在嵌入式操作系统正常运行时,需要使用根文件系统支持各种功能[8],在内核刚启动运行时根文件系统需要挂载起来用于支持访问外部设备,同时完成内核模块应用程序的装载和运行,避免出现Kernelpanic的情况,防止系统内核在启动时没有根文件的支持。在实际应用中,嵌入式操作系统使用动态随机存取器、同步动态随机存取器、FLASH存储器作为存储设备[9]。基于存储设备,使用JFFS2YAFFSCRAMFSROMFSRAMFS等常见系统作为存储设备的嵌入式文件系统。在本系统中,选择NANDFLASH作为硬件提案所使用的存储芯片,选用NANDFLASH上使用比较广泛的Cramfs文件系统作为嵌入式根文件系统。

 

  嵌入式Linux 操作系统的启动流程如图2所示。系统启动流程包括六个步骤:

 

  (1) 系统复位,从地址0x00开始执行,进入步骤(2);

 

  (2) 启动Bootloader模块,进入步骤(3);

 

  (3) 判断系统是否进入Linux,启动Linux内核映像,不启动则进入U?boot的命令操作环境,如果启动内核,进入步骤(4);

 

  (4) 系统从NANDFLASH加载内核到内存中,完成对硬件设备的初始化工作,进入步骤(5);

 

  (5) 挂载根文件系统,执行init进程,并从/etc/inittab取得配置文件,进入步骤(6);

 

  (6) 提示执行用户应用程序或用户登录信息。

 嵌入式的车载多媒体软件开发

  3 视频播放器软件设计

 

  3.1 基于Mplayer实现多媒体播放器

 

  Mplayer是一个Linux下的电影播放器(也能运行在许多其他的Unices和非X86CPU)Mplayer的逻辑结构可以分为四个层次,即:输入层、分流层、解码层和输出层,其结构如图3所示。

 

  本文选择Mplayer作为后台设计播放软件。利用Qt/E软件平台设计GUI图形控制界面,对多媒体播放器的播放过程进行控制。由于条件限制,本实验在宿主机上编译并安装了Mplayer,通过Qt设计基于X86的多媒体播放器。

 

  3.2 软件总体模块设计

 

  由于Qt/Embedded工具可以绕过X Windows System协议客户端库,直接读/写帧缓存的FrameBuffer的数据信息,因此实现Qt类库对帧缓存的直接读/写操作,使用基于Qt/Embedded的应用程序可以完成。本系统使用嵌入式Linux作为操作系统,通过Qt的图形平台和函数库完成嵌入式多媒体综合播放。多媒体播放系统采用模块化设计思想,其架构如图4所示。

 

  嵌入式多媒体播放器包含五个主要的模块:

 

  (1) I/O(输入/输出模块):用于多媒体文件的读入和输出。

 

  (2) UI(用户界面单元):用户界面单元的作用是方便用户操作嵌入式媒体播放器的各项功能,提供良好的人机操作互动界面和使用体验。

 

  (3) 插件接口单元:读入多媒体数据(通过输入插件获取I/O模块发送过来的数据)、调用Mplayer对文件进行解码播放、文件总的时间长度、编码类型、比特率等信息的获取、暂停、快进、快退、停止、输出、输入等的动作,输入动作具体指将输出插件完成解码的数据信息传送到系统输出输入单元的过程。

 

  (4) Mplayer解码单元:为了对不同类型的多媒体文件进行解码操作,系统选择的Mplayer解码单元由分离器、音视频解码器等部分组成。

 

  (5) GUI单元:为了方便快捷的产生读/FrameBuffer以及用户界面, GUI单元通过使用Qt/E嵌入式工具作为底层图形库。

 

  软件总体模块中各单元之间的相互连接关系是:通过输入/输出单元读入音视频信息数据,用户界面单元在接收到播放信息指令后,调用插件模块相应的函数,产生相应的信号,调用Mplayer完成对多媒体文件的解码,完成解码之后将数据送到I/O模块输出。

 

  3.3 控制流程设计

 

  主程序设计流程如图5所示。当从菜单项打开视频文件时会触发triggered()信号,执行slotopen()槽函数,调用QfiledialoggetOpenFileName()函数从对话框中选择要播放的视频文件。系统首先判断文件格式是否为*.avi格式,如果是,则创建一个Qprocess进程,通过该进程调用Mplayer后台对视频文件进行播放,并在指定区域进行输出显示。

 

  4 交互式图形界面设计

 

  QImage类提供了一种与硬件访问无关的图片存储方式。QPainter则主要用来完成绘图事件。QPushButton提供了图形用户界面最长用到的命令按钮部件。此GUI交互界面利用Qt DesignerQMainWindow类为基础设计了主框架,包括菜单栏以及状态栏等;同时,以QWidget类为基础创建了一个对视频播放进行控制的插件接口,并通过合理的布局与主窗体组合在一起。

 

  在指定目录打开avi格式视频文件,运行效果如图7所示。在播放过程中,通过状态栏实时显示当前视频文件的播放时间。通过界面下方的按钮对播放器的播放过程进行音量调节、暂停、快进、快退、停止等控制,基本达到了预期的效果。打开视频文件时,终端开始输出文件的加载路径,开始读取并输出ANS_TIME_POSITION(视频播放时间)参数值,在QtMplayer之间完成了通信。

 

  当在控制台实施各种控制操作时,在终端输出执行的操作动作并发送该信号,调用相应的槽函数完成对视频播放的控制动作。

 

  以上是在主机上运行播放程序执行播放控制的过程。在主机上运行的Qt程序是基于X结构的,而在实际的嵌入式开发中,需要直接通过FrameBuffer进行显示。由于条件限制及其他因素,通过qvfb模拟程序在嵌入式开发板中运行的情况,如图8所示。

 

  从图8中可以看出,在qvfb中运行该程序时,菜单项的中文显示出现了方块型的乱码,这说明菜单项已经得到了识别,只是qtopia中缺少相应的中文字体库,在默认的情况下,qvfb会调用字体库中的默认字体,这样在显示中文时会出现如上问题。可以在网络上下载相应的中文字体库并拷贝到Trolltech/Qtopiacore?opensource?4.3.0/lib/fonts中。

 

  5 结 论

 

  本文通过对车载播放系统的设计,根据车载嵌入式多媒体播放器的功能需求和技术特点,选择一款合适的嵌入式处理器,在此平台上构建了功能完整的嵌入式Linux系统开发平台。经过对QtGUI设计的研究,以Qt的基础类库为前端设计嵌入式多媒体播放器的前端控制图形界面。通过创建QProcess进程,实现了对播放过程的控制,与后台Mplayer进行通信,实时读取并显示播放信息,并在指定窗口对音视频码流进行输出显示。通过测试表明,本系统达到了应用于车载音视频播放的要求,对相关开发具有重要参考价值。

 

  作者:李飞 来源:现代电子技术 20169

上一篇:基于CAD图形引擎的接触网腕臂结构安装图绘制软

下一篇:移动学习类软件的设计与开发