Linux平台在网络广告机设计中应用
入到Qt本地或者Mplayer 本地套接字服务器,并存储在本地Linux 文件系统中。Mplayer 播放器和Qt 播放程序读取文件系统中各自本地套接字的控制信息,调用相应的音视频驱动程序来控制音视频文件在Qt界面和Mplayer 端的显示和播放。

图2 系统功能模块原理图
3 关键算法设计
3.1 数据库设计
根据广告机监控终端所监控媒体种类的不同,使用Sqlite3 数据库维护媒体视频播放、图片背景和Qt字幕的信息。数据库原理见参考文献[3]。对于广告机监控管理员以及管理者的身份,需要设计管理者的ID、登录密码和对应的用户名信息,以便对广告机的监控和管理。就视频和图片媒体而言,都涉及对相应媒体对象的插入、删除、更新和播放顺序等控制操作,因此分别设置ID、文件名、加入时间和排序序号来进行相应的维护和控制管理。对应的数据库设计原理图如图3所示。

图3 数据库设计原理图
3.2 广告机显示终端
广告机显示终端的Qt图形界面原理如图4所示。Qt界面的设计原理见参考文献。开发板通电之后,主程序程序开始执行,Mplayer媒体播放器读取存储在开发板上的视频文件进行循环播放,同时将*自己的本地套接字。当网络通信模块将控制终端传来的控制命令写到Mplayer播放程序的本地套接字之后,Mplayer将根据控制命令执行相应的响应,如暂停、播放下一首、重头开始播放等。Qt图形界面程序开始执行时,先读取本地图片文件和文本文件,进行循环播放。同时,Qt图形界面程序的*命令线程将*Qt图形界面的本地套接字。当接到控制命令时,Qt图形界面程序将执行相应的操作,如关闭、打开、更新滚动字幕等。

图4 Qt图形界面原理图
本地套接字与本地TCP Socket Server 端进行通信,并将相关控制命令最终上传,而本地TCP Socket Server命令则是来源于控制中心TCP Socket Client 端对控制命令的上传。本地Socket Server套接字的部分控制代码如下:
while(1){//*、解析、接收来自服务器端连接的命令
write_domain_socket_qt( ); //Qt套接字
……
write_domain_socket_player( );//播放器
……
}
3.3 服务器控制中心
服务器控制中心通过传递管理员用户的控制命令,来控制显示终端图片、视频以及文字媒体的更新和播放状态的改变。管理者用户通过点击Qt或者Mplayer控制页面的各种控制按钮和媒体更新文件操作,触发监控中心的各种CGI例程,因此监控终端的各种控制操作便与相应的CGI控制操作例程一一对应。CGI例程通过TCP Socket网络通信向显示终端服务器递交相应的控制命令和相关控制信息,就可以完成对各种媒体信息的操作控制。Linux 系统网络套接字编程见参考文献[6]。
由图2可知,显示终端分为Qt和Mplayer模块。其中,Qt模块用来播放媒体图片和字幕信息,Mplayer负责播放各种视频文件。对于媒体视频和图片文件信息,控制的方式基本上分为两种:一种是不带上传内容的单纯媒体运行方式的控制操作(如视频文件的播放暂停、视频播放调序等),只需要点击相关的控制按钮即可完成;另一种是基于文件上传的媒体更新的操作,例如视频文件、图片库的更新等操作。因此,将结合上述不同的控制方式给出广告机字幕滚动、纯命令控制和文件上传的关键算法设计。
Qt更新显示终端滚动字幕的表单部分如下所示:
form actiON=qt_change_liST.cgi method=post>
input type=hiddenname=order
value=chang_list>
input type=submit nAME=action
value=窀新文字> TEXTAREA
name=up_txtcols=30rows=8wrap=>
/TEXTAREA> /form>
用户通过Qt控制页面添加更新的文字内容,点击更新字幕按钮会触发改变字幕的CGI例程。qt_change_list.cgi例程将创建从本地到显示开发板上的TCP Socket Server 端的TCP套接字连接,并将控制命令“更新文字”与文字内容一起上传到TCP Socket Server端服务器。
广告机控制命令的控制表单部分设计如下:
对于单纯的控制命令,广告机终端的设计比较简单,对于每一种控制命令均对应有不同的CGI例程和命令宏定义,每个例程将对应的控制命令通过Socket 上传就可以实现。
form action=***_ctl_cmd.cgi method=post>
input type=hidden name=order value=start>
input type=submit name=action
value=窨刂泼令>
上传文件关键表单部分设计:
form action=add_***.cgi method=post>
input name=filename type=FILE
size=25 maxlength=100>
input type=submit name=action value=***>
文件上传将根据Qt图片和视频文件的不同调用相应的上传例程。这里除了要将图片或者视频文件上传到开发板显示终端外,还要向服务器监控中心的Sqlite3 数据库中添加相应的资源信息和状态信息,根据前面数据库对不同媒体类别的设计属性域添加相应的相关信息,以便后续的插入、排序、删除和更新操作。其中,使用多线程传输模型设计上传程序my_scp实现对较大视频和图片文件的快速传输,关于多线程编程见参考文献[7]。上传文件的部分代码如下所示:
- 基于FPGA的DSP设计方法(08-26)
- 电力电子装置控制系统的DSP设计方案(04-08)
- 基于DSP Builder的VGA接口设计(04-10)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)
- 数字信号处理(DSP)应用系统中的低功耗设计(05-02)
- 基于DSP的嵌入式显微图像处理系统的设计(06-28)
