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程序,模拟为车载播放终端。
3.1 车载广播中心的媒体文件发送
车载广播中心通过车载节点接收站台信息实现到站与离站信息的提示。发送终端软件界面如图8所示,可通过添加与删除按钮进行媒体文件的添加删除,从而完成媒体文件列表的制作,车载广播中心软件则根据该文件列表顺序循环广播。其主要特点是根据站台节点发送的站台信息报站,报站准确无误,且当有多次按键触发时不乱报。
3.2 车载播放终端的媒体播放与自动报站
车载播放终端完成了将接收的媒体文件解码播放,到站与离站信息的播报。图9为模拟列车运行中(无偶次按键触发、无站台节点信息)播放媒体文件时的显示界面,此时终端界面底部循环显示日期、时间、下一站信息和换乘信息,上部播放接收到的媒体文件,界面简洁人性化。 本文提出了基于PXA270微处理器与WinCE嵌入式操作系统的地铁媒体报站系统实现方案,系统能够充分完成媒体文件的传输播放与到站、离站信息的准确提示。车载广播中心可通过更改播放列表完成媒体文件的更新,既方便快捷又经济。车载播放终端界面简洁人性化。同时通过软件升级可支持更多种媒体文件的播放。
本文关键字:暂无联系方式电动车-摩托车-汽车,电子知识资料 - 电动车-摩托车-汽车
上一篇:威志轿车电动车窗升降控制电路