引言
随着微电子技术和计算机技术的发展,计算机不断趋向于微型化和嵌入化,使它更广泛地融入人们的工作、生活和娱乐等各个方面。人们已经普遍使用手机、PDA、手持设备和掌上电脑等信息终端来储存和处理各种信息,这正是嵌入式技术应用迅速发展的一个证明。
进入21世纪以来,嵌入式技术逐渐成熟并全面展开,已经成为通信和消费类产品的共同发展方向。在信息家电领域,如网络冰箱、家庭网关、数字机顶盒、数字电视等的发展,使得嵌入式系统正扮演着越来越重要的角色。在个人计算机领域中,嵌入式产品使个人商用、娱乐和通信功能相结合,以自然的人机交互界面和丰富的多媒体处理能力迅速得以推广,并取得了巨大成功,而所有上述产品都离不开嵌入式技术。所以,嵌入式系统的开发,已被人们公认为是一个具有良好发展潜力的行业。
本文介绍了基于Windows CE.Net 4.2 嵌入式操作系统,选用三星公司的SamArmDvk9开发平台(SamArmDvk9是针对S3C2410的高性能开发平台,适合于开发高性能手持式以及便携式智能设备或终端),运用eMbedded Visual C++ 4.0软件开发多媒体视频/音频播放器的完整流程。相对于PC上的多媒体播放器,通常的嵌入式播放器功能比较少,可以播放的类型也不多。本文介绍的基于Windows CE.Net 4.2的多媒体播放器可以播放.wmv,.mpg,.asf等格式的视频文件,可以播放.wma,.mp3,.wav等格式的音频文件,囊括了目前比较流行的媒体文件格式。闪存(SD CARD)中的媒体文件将被自动列在主界面中的列表框中,单击按钮就可以播放列表框中全部媒体文件,而不需要用户进行添加。在播放界面可以实现暂停,停止,重播,音量调节等功能。音量调节以位图形式形象的加以显示。下面具体介绍实现的步骤。
1、 Windows CE.Net 4.2 内核定制及SDK的导出
Windows CE为开发人员提供了一个相对不错的集成开发环境(IDE):Platform Builder。开发人员可以在这个IDE中根据开发的需要完成操作系统镜像的定制、编译与调试。
1.1、启动PB,前期设置
选择Flie菜单中的Manage Catalog Features,将随开发板提供的2410wince4.2bsp文件夹下的 smdk2410.cec导入工程。这样在PB的向导中和Catalog中就会出现针对开发板的 Samsung SMDK2410:ARMV4目录。
1.2、新建工程,完成工程向导,注意要选择SAMSUMG SMDK2410:ARMV4 BSP。
1.3、添加组件
本工程是开发媒体播放器,所以要将Catalog/Core OS/Multimedia Technologies下面的组件加入工程。包括Basic Multimedia文件夹下的组件和Multimedia Components文件夹下的组件。后一个文件夹里包含Audio Codecs and Renderers(音频编码解码器)和Video Codecs and Renderers(视频编码解码器)。
1.4、点击Build菜单中的Build Platform,PB将自动完成整个系统镜像的定制。
1.5、导出针对定制系统的SDK(Software Deveploerment Kit)是为了编写应用程序,选择Platform菜单中的Configure SDK项,配置过程中选择eMbedded Visual C++ 支持, 最后再点击Platform菜单中Build SDK即可生成后缀名为MSI的SDK文件,直接安装即可在EVC中找到对应的SDK。
2、 应用程序的开发
2.1、eMbedded Visual C++4.0简介
eMbedded Visual C++4.0(EVC)是微软专门针对嵌入式操作系统WINCE开发的集成开发环境。EVC集成开发环境与VC的较为相似,只是在工具栏下面多了一个特性工具栏,用于选择嵌入式设备类型、仿真器类型和CPU类型。在上面介绍的SDK安装完成后便可在此栏中出现并选择。打开EVC,建立一个基于对话框的MFC应用程序mediaplay。
2.2在EVC中加入和注册ActiveMovieControlObject控件
第一步、首先找到要加控件的名称和所在文件夹。在EVC中播放多媒体的控件名称是msdxm.ocx,所在的文件夹是 C:\WINDOWS\system32;
第二步、在EVC的菜单栏点击Project\Add to Project\Components and Controls,弹出Components and Controls Gallery对话框,点击Add Control,按照上一步骤中的地址找到msdxm.ocx,打开,这样就将控件加入到Registered ActiveX Controls中;
第三步、注册控件:点击开始\运行,,键入 regsvr32 C:\WINDOWS\system32\msdxm.ocx 确定,过一会有成功注册的信息出现,这样就可以在工程中添加此控件了。
2.3、 媒体文件的寻找
我们的多媒体文件存放在SD卡中,在第一个对话框IDD_MEDIAPLAY_DIALOG(图1)中添加控件ListBox,同时在头文件中定义一个ClistBox的变量m_list。增加一个CmediapalyDlg类的成员函数SearchFile(),用来将SD CARD中的文件列在ListBox中。本函数具体代码如下:
void CMediaplayDlg::SearchFile()
{
file=FindFirstFile(_T("\\StorageCard\\*.*"),&lpFileData);
m_list.AddString(lpFileData.cFileName);
BOOL FileEnd=FindNextFile(file,&lpFileData);
/*下面的while循环将SD CARD中所有文件加入ListBox中*/
while(FileEnd != 0)
{
CString k=lpFileData.cFileName;
m_list.AddString(k);
FileEnd=FindNextFile(file,&lpFileData);
}
}
2.4、 播放全部多媒体文件
第一步、为了使视频范围较大,现增加一个新对话框(图2),将此对话框命名为一个新类CPLAY。在此对话框中单击鼠标右键,选择Insert ActiveX Control,在弹出的对话框中选择ActiveMovieControlObject,这样在CPLAY对话框中就添加了媒体控件,同时在Class View中会自动添加CmediaPlay2的类。现增加一个CMediaplayDlg类的成员函数CONNECT(),用来与CPLAY类联系起来。此函数的功能是将媒体文件的路径找到,再将其传递给CPALY类。同时将MEDIAPLAY对话框隐藏,将PLAY对话框显示出来。
图1 播放器主界面
第二步、增加一个CPLAY类的成员函数PLAYALL(CString b ),用来实现连续播放。这里用EVC自带的定时函数UINT SetTimer(HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ),来定时测试媒体播放状态,当状态为停止时,表明某一个文件已经播放完毕,则可以取得下面一个媒体文件继续播放了。经测试得知:文件播放完毕处于停止状态的状态值为0(播放时为2,暂停为1),我们设定每过3秒定时检查一次。在MFC ClassWizard中选择CPLAY类,加消息映射WM_TIMER,增加成员函数OnTimer。在void CMediaplayDlg::CONNECT()中已经取得媒体文件的总数目conv,当ii累加到等于conv时,用KillTimer(1)消除定时器,表明所有媒体文件已经播放完毕。
2.5、音量控制
在IDD_PLAY对话框中增加一个Button(IDC_VOLUME),实现对音量的控制。当点击IDC_BUTTON时,弹出一个新对话框,在此对话框中进行音量的调节,将此对话框命名为IDD_VOLUME(图3),定义为一个新类Volume。因为音量的调节是针对CPLAY类中的具体媒体文件,所以实际音量增加(用函数VolumeAdd()来实现)和音量减小(用函数VolumeSub()来实现)
的两个函数要放在CPLAY类中。
图 3 播放器音量调节界面
在IDD_VOLUME对话框中添加两个Button:IDC_VOLADD,IDC_VOLSUB。当点击按键时,分别调用CPALY类中的VolumeAdd(),VolumeSub()两个函数。为了形象的显示音量大小的变化,在IDD_VOLUME对话框中添加一个静态文本IDC_BMPSHOW,此区域用来显示音量大小的变化。
预先定制两个条形图片,IDB_BACK、IDB_FORE,前一个浅色作为底色,后一个深色作为音量变化的显示。为了实现上述设计思想,现增加一个新类ProgCtrl,在Volume.h中定义:ProgCtrl m_bmpprog使之与IDC_BMPSHOW联系起来,在MFC ClassWizard 中选择Volume 类,增加 IDC_BMPSHOW的变量m_bmpprog。在ProgCtrl类添加WM_PAINT消息映射。同时在ProgCtrl类中,增加两个函数StepIt(),StepItt(),分别用来显示音量增加、减小的图形显示,可以将调节范围设定从0到100(实际的音量设定从-9640dB~0dB,但小于-4000dB时,音量已经很小,所以我们将音量的调节范围设定为-4000~0对应于0到100的调节区域)。
2.6、暂停、停止、重播功能的实现
这三个功能相对简单,在IDD_PLAY对话框加入Button,添加各自的消息映射处理程序即可。
3. 结束语
本文介绍了基于Windows CE.Net 4.2 嵌入式操作系统开发嵌入式媒体播放器的完整流程,包括操作系统内核定制及SDK的导出、多媒体控件的导入和注册、应用程序的开发过程等。该播放器可以播放Windows CE所支持的所有媒体格式,播放界面友好,易于操作,可以投入实际的市场应用。