首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Windows Mobile >

施用 Windows Mobile 5.0 中的图片、视频和照相机

2012-09-29 
使用 Windows Mobile 5.0 中的图片、视频和照相机使用 Windows Mobile 5.0 中的图片、视频和照相机本页内容

使用 Windows Mobile 5.0 中的图片、视频和照相机
使用 Windows Mobile 5.0 中的图片、视频和照相机

本页内容施用 Windows Mobile 5.0 中的图片、视频和照相机返回页首

检查业务过程

尽管在许多不同行业中都有检查任务,但这类任务通常是现场执行的。检查员一般是移动工作人员,他们的大部分工作实际上是收集数据。他们所面临的问题是需要收集尽可能多的信息,这样才能将因检查的不同感知而产生差异的风险降至最低,并最大限度地扩大涉及到的各方之间的信任。例如,一辆汽车在变更车主之前,车检员要进行检查,检查的准确性可能是买卖双方最关注的。然而,该工作在实地进行并且需要收集大量信息时,就出现了一个非常棘手的情况。

在检查过程中使用传统的解决方案(如在纸上手写记录)可能看似有效率,但是不以数字方式记录信息在检查之后可能会产生很多问题。手写记录需要输入到信息系统中,这通常由除检查员之外的其他人输入信息。这种情况通常会导致较差的信息质量,有时甚至会丢失信息。

由于文本不可能记录所有的信息,因此检查员在很长一段时间内都使用照片。但是传统的照片也会在检查后引发问题,因为照片的质量可能不合格,而且只有在这些照片由开发过程返回后才会发现质量问题。

对于所有这些问题,使用配备有照相机(能够捕获记录、照片甚至视频)的移动设备这一想法似乎是最佳解决方案。但在诸如 Pocket PC 这样的移动设备上以文本形式捕获信息仍然是个挑战,所以多媒体的作用变得更为重要。将通过集成手段捕获文本、照片、口述内容以及具有音频的视频合为一体,可能是成功的诀窍。本文重点讲述如何使这种愿景成为现实,不过首先要确定需求。用于检查的一般业务过程定义如下:


返回页首

应用程序设计

Northwind Pocket Service: Field Service for Windows Mobile-based Pocket PCs 一文很好地介绍了移动解决方案中体系结构的工作。Northwind Pocket Inventory: Logistics for Windows Mobile 2003-based PocketPCs 一文包括对该应用程序设计(该设计实际上从用例的定义开始)中最重要的可交付物(构件)的描述。因为本文主要关注多媒体,因此图 2 显示示例应用程序中实现的一些最有趣的用例。

施用 Windows Mobile 5.0 中的图片、视频和照相机



返回页首

示例应用程序演练

该示例客户端方案是通过 Microsoft Visual Studio .NET 2005 用 C# 编写的 Pocket PC 应用程序,它针对的是 Microsoft .NET Compact Framework 版本 2.0。

该应用程序显示如何使用 Pocket PC 支持检查业务过程。为了使该示例更真实,使用了一个具体的检查方案 - 车检员。该应用程序的用户执行不同目的检查。例如,用户可以在发生或者车辆进行修理后进行检查。其他的示例还有,在签订新保险策略之前或者在车辆变更车主时进行的常规检查。该演练涵盖一般类型的检查(用户界面有时称之为"检验")。该方案是在后台创建检查,当检查员与后台服务器同步时,新的检查就下载到设备上。

本文将在该应用程序的演练过程中对一些设计选择进行评论。另请注意,本文在描述该应用程序的用户界面设计之后探究部分代码。

主屏幕

启动该应用程序时,第一个屏幕是可用于搜索和选择检查的主屏幕,如图 5 所示。

施用 Windows Mobile 5.0 中的图片、视频和照相机










返回页首

代码演练

本部分将为您介绍示例客户端方案的一些源代码。您将看到如何在托管代码和本机代码中使用选择图片对话框和照相机捕获对话框。不过,本文的附带源代码中不包括本机代码示例。然后,您将看到如何使用其他包含媒体的应用程序,以及如何将媒体存储到数据库中。

选择图片(托管代码)

要将多媒体与企业应用程序集成,最重要的是能够使用已经存储在文件系统中的图片(包括照片)和视频。如果该设备没有配备内置照相机,您仍然可以使用该方法集成多媒体。例如,您可能使用单独的数字照相机来拍照或者捕获视频,然后使用红外线端口或蓝牙将照片或视频传输到 Pocket PC。为了满足该需要,Windows Mobile 5.0 平台中包括了一个现成的对话框,该对话框可以在托管 (.NET Compact Framework) 代码中作为"Microsoft.WindowsMobile.Forms"命名空间中的 SelectPictureDialog 类使用。

要创建前面图 9 中显示的文件选择屏幕,可以使用以下代码示例。



将文件读入一个字节数组,然后该数组用于更新数据库中正确的展示行。在上述代码中,保存媒体数据的数据库列 (Media) 被假定为 image 类型。请注意,要使用外部程序(pimg.exe 和 wmplayer.exe)播放媒体,需要将媒体再次写入到一个文件中,然后才能调用外部程序。

将媒体文件存储在文件系统中还是存储在数据库中,这取决于应用程序的要求。这两项技术都有优缺点。将媒体文件存储在文件系统中可以使录制、播放和操作更简单,并且能更容易地分离数据和媒体的存储。例如,数据库可以位于设备上较快的内存中从而提高访问性能,而媒体则存储在存储卡上,这样就可以存储更多信息,但访问速度较慢。然而,当这些文件需要与服务器同步时,就需要自定义解决方案(如 HTTP 上载和 XML Web 服务的附件)。如果媒体存储在数据库中,那么每次需要播放或操作时,都需要将媒体提取到一个文件中。但是这一同步操作较容易,因为数据库同步(如 Microsoft SQL Server Mobile Edition 中的远程数据访问和合并复制)和 XML Web 服务同步(SOAP 上的 DataSet)都支持该数据传输。任何情况下,您都应该考虑在设备上本地压缩媒体,以及当媒体在设备和服务器间传输时压缩媒体这两方面。

多媒体之外的代码重点

既然已经演练了示例应用程序中实现的多媒体功能,那么您可以再演练其他一些代码,因为从企业应用程序角度看,这是值得研究一下的。例如,使用 .NET Compact Framework 2.0 命名空间"Microsoft.Win32"中的 Registry 类获取注册表设置,如下代码示例所示。

返回页首

媒体播放器控件

在许多情况下,将标准媒体播放器作为单独的进程启动(如前面所示)可能会满足业务需求,但如果需要更多地控制视频播放,则可以使用媒体播放器控件。媒体播放器控件(版本 10)包括在 Windows Mobile 5.0 软件中,它使开发人员能够将媒体播放器用作自己应用程序的一个自定义控件。

宿主媒体播放器控件(本机代码)

媒体播放器控件是一个常规 ActiveX 控件(.ocx 文件),熟悉 COM 的本机开发人员使用它时不会有很多问题。首先,您应该查看 Windows Media Player Mobile 代码示例,这些示例包括用于宿主媒体播放器控件的代码。然而,因为这些示例是针对本机智能设备开发的上一代工具 (Microsoft eMbedded Visual C++) 而编写的,所以本文的下载代码示例包括尝试通过 eMbedded Visual C++ Upgrade Wizard for Visual Studio 2005 Beta 2 方法转换媒体播放器示例 (CEWMPHostML) 的结果。

宿主窗口和该控件的创建如下代码示例所示。


返回页首

DirectShow

既然您已经了解了基础知识,现在该看看 Windows Mobile 5.0 软件中多媒体支持的更高级的用法了。一个最有趣的开发是在 Windows Mobile 5.0 软件中包含 DirectShow API。查看该 API 的主要原因是您需要对应用程序中使用的多媒体进行更多的控制。如果前面描述的高级支持不足以满足应用程序的需求,DirectShow 提供更多的控制和更大的灵活性。DirectShow 是一个本机 API,因此可以通过本机工具集 (Visual C++) 使用,如本文后面的代码示例所示。

如果想在托管代码中访问 DirectShow,一个解决方案是将 DirectShow 的使用打包到一个本机 DLL 中,托管代码可以使用平台调用来调用该 DLL。这对于媒体捕获这样的功能而言可能是个很好的解决方案,这些功能并不依赖于用户界面组件(如媒体播放)。另一个解决方案是使用 .NET Compact Framework 2.0 中包括的 COM 互操作性来包装 DirectShow COM 组件。有一个称为 DirectShowNET 库的有趣项目,它为桌面计算机上的 DirectShow 提供托管包装,但目前没有可用于 .NET Compact Framework 的版本。

一个不错的常用方法是利用托管代码来实现用户界面、业务逻辑、数据库访问和基本的照相机交互。然后,由于需要更多的控制和灵活性,您可以使用媒体播放器控件进行媒体播放,使用 DirectShow 进行媒体捕获(功能包装在一个本机 DLL 中,通过平台调用从托管代码调用)。

开发过程中,DirectShow 在内部称为 Quartz,Quartz 还是主 DLL 的名称。1996 年 7 月,它首次作为 Microsoft ActiveMovie 版本 1.0 发布,当时它针对媒体播放提供了一个 ActiveX 控件,该控件除了支持音频文件外,还支持 Motion Picture Experts Group (MPEG) 1、影音交叉存取技术(Audio-Video Interleaved,AVI)和 QuickTime 视频。DirectShow SDK 作为 Microsoft DirectX SDK 的一部分由来已久,但 DirectShow SDK 现在包括在平台 SDK 中,它为开发 DirectShow 筛选器和应用程序提供工具和信息。

Windows Mobile 5.0 软件的 DirectShow 是用于流媒体的一种体系结构,它提供多媒体流的高质量播放和捕获。它支持很多格式,如波形 (WAV)、MP3(MPEG Audio Layer-3)、AVI、高级数据流格式(Advanced Streaming Format,ASF)和 MPEG。

DirectShow 与 Windows Mobile 5.0 支持的其他两种 DirectX 技术(DirectDraw 和 Direct3D)相集成。DirectShow 使用任何可用的视频和音频加速硬件,也支持不使用加速硬件的系统。

DirectShow 简化了媒体播放和格式转换,但对于需要自定义解决方案的应用程序而言,它还提供对基础流控制体系结构的访问。例如,您可以创建自己的组件来支持新媒体格式或自定义效果。您可以使用 DirectShow 编写的应用程序示例包括:AVI 和 MP3 播放器、AVI 到 ASF 的转换器,以及音频/视频捕获和编辑应用程序。DirectShow 基于 COM 并提供大量 COM 组件。要扩展 DirectShow,您需要实现自己的 COM 组件。

筛选器和筛选器图形

DirectShow 的主构造块是一个称为筛选器的组件。筛选器是一个在多媒体流上执行操作的软件(实际上是一个 COM)组件。例如,筛选器可以读取文件,从视频捕获设备获取视频,解码各种流格式,以及将数据传递到图形卡或声卡。

筛选器接收输入和产生输出,信息通过筛选器针在筛选器之间传递。一个针是一个筛选器端口,它可以是输入端口也可以是输出端口。如果筛选器解码 WMV 视频,则输入是 WMV 编码的流,输出是一系列未压缩的视频帧。在 DirectShow 中,一个应用程序通过将筛选器链连接在一起来执行任何任务,这样一个筛选器的输出就成为另一个筛选器的输入。一组连接的筛选器称为一个筛选器图形,图 18 显示一个用于播放带声音的视频文件的筛选器图形。

施用 Windows Mobile 5.0 中的图片、视频和照相机



该捕获图形由视频和音频控制流阻塞,然后在实际捕获数据之前允许它运行一秒。该延迟为捕获图形提供了时间,以确保分配它所有的缓冲区以及同步所有进程。一个捕获进行 5 秒,然后停止。视频和音频的控制流用于停止该流,最后,一个循环等待一个标志该流停止的事件。

下面的代码片段显示一种更明确的方式来捕获图形正在运行的时刻(与等待 1 秒相比)。

返回页首

小结

Windows Mobile 5.0 软件中针对多媒体的扩展支持可以增强您的托管和本机应用程序,诸如图片选择和照相机捕获对话框这样的高级构造可以轻松集成到应用程序中。对于许多高级媒体播放方案,媒体播放器控件是一个有效的选择。要获取更多的控制和灵活性,DirectShow API 提供低级别功能来捕获、解码、呈现和转换视频和音频流。使用这些资源,您可以实现用户需要的多媒体要求。

热点排行