车载信息娱乐系统与报站系统作为地铁列车必不可少的配置显得尤为重要,可以使乘客准确地确定到站站点、缓解乏味的旅途,也可以轻松地获得各站点的换乘路线、乘车指南等有意义的信息。
早期车载多媒体播放器多是传统的磁带收音机、CD播放器、DVD播放器等,磁带机的缺点是音质不好且由于传动机械的故障会出现卡带的现象,现基本已淘汰。车载CD播放器最近几年才应用于车载系统,在音质方面有了很大的提高,但只能读取CD光盘不能下载网络媒体,具有歌曲更换不便的缺点,同时缺少可视效果[1]。DVD是采用MPEG2标准压缩的全数字影音光盘,它的特点是音质高、画质高、容量大,但成本相对较高,同时也具有CD播放器媒体文件更换不便的缺点[2]。现阶段的车载媒体播放系统多采用嵌入式技术,如以三星S3C2440A处理器为核心的车载信息服务系统,可实现信息提示、导航定位、多媒体播放等功能[3]。其中媒体播放多基于嵌入式流媒体技术,如通过GStreamer和RTP/RTCP流媒体协议设计流媒体播放器[4]。但此方式对于列车这种单一源多接收端拓扑结构,其带宽占用高,易造成堵塞。
现有公交报站系统仅是音频广播报站,地铁的报站提示是通过三色LED的颜色变化与音频广播来实现的,报站形式单一,且缺少换乘路线、乘车指南等信息的提示,同时与媒体播放系统相分离。例如通过在站台与列车上分别放置RF无线节点来实现自动报站。其系统使用射频与接收芯片CC1100、语音播放芯片VS1003和单片机控制,通过对每一个车站进行ID编码,利用身份识别技术实现自动报站功能[5]。此外,也有基于ZigBee技术的定位解决方案,通过放置无线节点组成ZigBee网络,根据射频接收信号强度指示计算出所需定位的位置[6],此方法对于实现报站功能成本过高。由于地铁运行于地下,乘客没有可参考的建筑物标识来判断即将到达的站点,因此其报站系统十分重要。而实现地铁的自动报站并非易事,它不能像地面公交系统那样通过GPS定位系统[7]来实现车辆的定位与报站。
针对以上问题,本文开发了一种基于PXA270硬件平台与WinCE嵌入式操作系统的车载媒体报站系统。此系统集媒体播放、站点信息播报与换乘信息提示于一体,媒体文件更换方便快捷。系统采用分布式布局,各车载播放终端通过软件升级后,完全可以作为车载广播中心使用,因此进一步增加了系统的稳定性。系统采用嵌入式技术,专用性强、特色功能易实现,如可根据站点的具体布局提示乘客换乘路线等。同时采用WinCE嵌入式操作系统,具有实时性好的特点。
1 系统硬件平台设计
系统采用Xscale PXA270芯片为核心处理器,主频为520 MHz,SDRAM为64 MB,Flash为32 MB[8-9]。由于报站同步性的需要,通过IP组播的方式将站点信息与媒体文件传输至各节车厢,这样既方便了多媒体文件的更新,同时也减少了系统的成本。系统主体框图如图1所示,采用分布式布局,即在列车的车头放置车载广播中心,实现站点的接收、媒体文件的存储、通过IP组播将到站离站信息与媒体文件传输至各节车厢。在各节车厢放置车载播放终端,负责接收站点信息与媒体文件,并完成多媒体播放与站点信息的广播报站功能。同时各节车厢的车载播放终端也可以作为车载广播中心进行工作,这样系统更加稳定可靠。
1.1 车载广播中心
车载广播中心放置在车头,负责站点信息与媒体文件的广播,其框图如图2所示。U盘负责存储媒体文件,触摸屏用于播放列表的制作与更换,按键则用于离站的信号触发,网络控制器则负责将站点信息与媒体文件传输至各车载播放终端。
1.2 车载播放终端
车载播放终端负责媒体文件与报站信息的接收和播放,其框图如图3所示。网络控制器用于接收报站信息与媒体文件,U盘用于存储各站点的报站音频与信息提示文件,LCD则用于视频与站点信息的显示,喇叭用于音频的播放。
1.3 站台节点与车载节点
站台节点采用STC89C52单片机为微处理器,通过其P0口连接8位拨码开关,实现对各站点的编码标识。NRF905模块与STC89C52单片机之间通过SPI串行外设接口通信,STC89C52 P1.4~P1.7引脚分别与NRF905模块的MISO、MOSI、SCK和CSN引脚相连,通过C程序模拟SPI时序完成数据的传输。站点的标识通过NRF905模块发送。站台节点原理图如图4所示。
车载节点上的NRF905模块负责接收站点标识,并通过串口将站点标识数据传输至车载广播中心。NRF905模块的连接方式同站台节点。车载节点原理图如图5所示。
2 系统软件构建
2.1 操作系统的选择与定制
WinCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的嵌入式操作系统[10]。WinCE是从整体上为有限资源平台设计的多线程、完整优先权、多任务的操作系统,模块化的设计使WinCE系统可大可小,具有很好的稳定性与移植性;支持多种外围硬件与设备,图形界面出色,其强大的图形界面开发能力是其他嵌入式操作系统所不具备的,因此很适合作为车载平台的操作系统。[page]
利用WinCE进行嵌入式系统开发的首要工作是操作系统的定制,即根据实际需要进行裁剪、添加所需的组件与驱动,以及配置文件的修改。系统定制[11]的主要步骤如下:
(1)创建新工程
通过微软提供的Platform Builder5.0新建工程,在选择BSP包时,选择开发板提供的XSBASE270:ARMV4I。由于此系统的主要功能是多媒体的解码播放,因此设计模板选择为Digital Media Receiver。之后根据实际需要选择相应的组件完成工程的创建。
(2)配置平台
此过程主要是添加相关组件,是整个定制车载多媒体系统过程中的重点。其中主要有Usb Activesync(File Sync)、USB Mass Storage、中文字体(Chinese[Simplifiled])、Fat File System、键盘驱动(用于按键触发)、网卡驱动(用于网络传输)、触摸屏驱动(用于多功能操作)、DirectShow组件以及mp3、MPEG-1的解码Filter(用于媒体播放)等。通过Platform Builder 5.0编译生成的NK.bin文件下载至开发平台。
(3)导出SDK
导出的车载多媒体系统SDK用于在PC宿主机上通过Visual Studio 2005开发车载广播中心端MyNetSend以及车载播放终端MyNetPlayer应用程序。首先Configure SDK对SDK进行相应的配置,之后Build SDK等待完成后将生成的SDK安装于PC宿主机。
2.2 软件工作流程
车载广播中心完成媒体文件的IP组播发送、播放列表制作、站点信息接收和按键触发报站功能。具体流程如图6所示。
MyNetSend发送端程序启动后首先进行页面的初始化、播放列表的加载,之后启动发送线程,将列表中的文件依次组播发送。当接收到到站信号后将发送线程挂起,之后调用进站信息发送函数,等待报站音频播放结束后恢复发送线程。当有按键按下时产生WM_KEYDOWN消息,再将发送线程挂起,之后调用离站信息发送函数,等待报站音频播放结束后恢复发送线程。如此往复循环。
车载播放终端负责媒体文件的接收与播放、语音报站以及到站与换乘信息提示。具体流程如图7所示。MyNetPlayer接收端程序启动后创建DirectShow的滤波器链表FilterGraph,启动接收线程,解析接收到的组播报的报头,如果是DATA_MEDIA则将数据报通过DirectShow技术解码播放;如果是ARRIVE**则向窗口类发送WM_ARRIVE**消息,窗口类接收到对应的到站消息后则调用对应的到站处理函数,即播放到站提示音频与显示到站与换乘提示信息;如果是LEAVE**则向窗口类发送WM_LEAVE**消息,窗口类接收到对应的出站消息后则调用相应的出站处理函数,即播放出站提示音频与下一站的换乘提示信息。
2.3 功能实现
2.3.1 媒体文件的IP组播与接收
IP组播是通过使用特定的IP组播地址,将IP数据报传输到一个组播群组,所有加入该组的网络接收者均可以收到这份数据,这样极大地减小了网络负载。媒体文件的组播是通过CMulticastAdmin类来实现的,具体过程如下:
(1)发送端
①创建组播组
mMulticaster->CreateMulticaster();
②获取媒体路径名
SourceFile=mProgramListCtrl.GetItemText(NowListNum,1);
③打开媒体文件
m_objFile.Open(m_strSourceFile,CFile::modeRead|CFile::typeBinary)
④读取媒体文件数据
nRead=m_objFile.Read(pBuf+sizeof(MSG_HEADER),MPEG1_PACK);
⑤设置数据报报头
pMsg->nMsgType=DATA_MEDIA;
⑥组播
Multicast(pBuf,nMsgSize);
(2)接收端
①开启接收线程
m_pReceiver->StartReceiving();
②接收数据
nret=Receive(buff,nMsgSize);
③解析报头
PMSG_HEADER pMsg=(PMSG_HEADER)buff;
nMsgType=pMsg->nMsgType;
2.3.2 DirectShow解码播放
DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM的流媒体处理的开发包[12]。DirectShow使用Filter Graph的模型来管理整个数据流的处理过程,各个Filter在Filter Graph中按一定的顺序连接成一条“流水线”协同工作。按照功能划分,Filter大致分为三类:Source Filters、Transform Filters和Rendering Filters。首先通过Source Filters负责取得网络组播数据,然后将数据往下传输,之后经Transform Filters进行数据的格式转换、传输,最后Rendering Filters将数据传送给显示与音频设备进行多媒体的演示。接收端MyNetPlayer进行解码播放的过程如下:
(1)创建滤波器链表管理器m_pGB
HRESULT hr=CoCreateInstance(CLSID_FilterGraph,
NULL,
CLSCTX_INPROC,
IID_IGraphBuilder,
(void**)&m_pGB);
(2)查询媒体控制接口
hr=m_pGB->QueryInterface(IID_IMediaControl,(void**)&m_pMC);
(3)添加自己制作的接收网络数据的SourceFilter
hr=m_pGB->AddFilter(m_pSourceReader, NULL);
(4)构建滤波器链表,渲染媒体文件
HRESULT hr=m_pGB->Render(m_pSourceReader->GetPin(0));
(5)进行播放
hr=m_pMC->Run();
2.3.3 自动报站
自动报站是通过向窗口类发送自定义的到站与离站消息来实现的。当窗口类接收到到站或离站消息后再调用相应的消息处理函数,从而实现自动报站。下面是WM_MESSAGE_ARRIVE1站点1的到站消息处理函数,其他消息处理函数与其类似。
LONG CMyNetPlayerDlg::OnMessageARRIVE1(WPARAM wParam, LPARAM lParam)
{
m_pGraph->m_pVW->put_Visible(OAFALSE);
//将视频画面屏蔽
InitMyGraph();
//初始化用于播放mp3音频文件的GraphFilter
bmp.LoadBitmap(IDB_BITMAP1);//加载到站位图
drawbitmap();//显示位图
m_StaText.SetWindowText(L"十三号街站到了");
//显示到站信息
HRESULT hr;
long evCode;
hr=pGraph->RenderFile(L"/硬盘/stationin/1.mp3",NULL);//构建滤波器链表,渲染报站音频文件
hr=pControl->Run();//播放
pEvent->WaitForCompletion(INFINITE,&evCode);
//等待音频播放完毕
pControl->Release();//释放资源
pEvent->Release();
pGraph->Release();
CoUninitialize();
bmp.DeleteObject();
m_pGraph->m_pVW->put_Visible(OATRUE);
//显示原视频画面
return 0;
}
3 系统测试实验
在实验室内模拟列车运行流程进行测试,通过三个开发平台完成实验,其中之一运行MyNetSend程序作为车载广播中心,其余两个运行MyNetPlayer程序,模拟为车载播放终端。[page]
3.1 车载广播中心的媒体文件发送
车载广播中心通过车载节点接收站台信息实现到站与离站信息的提示。发送终端软件界面如图8所示,可通过添加与删除按钮进行媒体文件的添加删除,从而完成媒体文件列表的制作,车载广播中心软件则根据该文件列表顺序循环广播。其主要特点是根据站台节点发送的站台信息报站,报站准确无误,且当有多次按键触发时不乱报。
3.2 车载播放终端的媒体播放与自动报站
车载播放终端完成了将接收的媒体文件解码播放,到站与离站信息的播报。图9为模拟列车运行中(无偶次按键触发、无站台节点信息)播放媒体文件时的显示界面,此时终端界面底部循环显示日期、时间、下一站信息和换乘信息,上部播放接收到的媒体文件,界面简洁人性化。
本文提出了基于PXA270微处理器与WinCE嵌入式操作系统的地铁媒体报站系统实现方案,系统能够充分完成媒体文件的传输播放与到站、离站信息的准确提示。车载广播中心可通过更改播放列表完成媒体文件的更新,既方便快捷又经济。车载播放终端界面简洁人性化。同时通过软件升级可支持更多种媒体文件的播放。
上一篇:基于ARM和ADIS16355的汽车二自由度数据采集系统
下一篇:LPC2000系列32位ARM微控制器内嵌的CAN总线验收滤波器应用
推荐阅读最新更新时间:2024-03-16 13:44