当前页面: 开发资料首页 → J2ME 专题 → 一个出色的MobileWebCam项目-VideoCoolala
一个出色的MobileWebCam项目-VideoCoolala
摘要: 一个出色的MobileWebCam项目-VideoCoolala  
内容: 
 [J2ME]VideoCoolala(MobileWebCam)设计说明[J2ME] VideoCoolala(MobileWebCam)开源说明作者:郑昀产品名称:VideoCoolala 产品版本:1.12.130关键词: Mobile VideoControl Media 拍照手机 j2me midp midlet WebCam java
摘要:本文档给出VideoCoolala(MobileWebCam)的设计思路和类说明。
第1章 简单描述VideoCoolala(MobileWebCam)的背景、功能和特别之处。
第2章 描述调用VideoCoolala(MobileWebCam)的设计思路。
第3章 给出了 VideoCoolala(MobileWebCam)的设计过程中需要特别指出的问题。
第4章 给出了 各种下载资源。
1背景、功能和特别之处摘要:本章 简单描述VideoCoolala(MobileWebCam)的背景、功能和特别之处。 
我们提供的VideoIM手机自动拍照上传器J2ME版本[开源]就是这么一种概念:
一个可以下载到手机(例如Nokia7610已经确实可以下载安装并正常运行)的Java应用程序,用来自动驱动你的手机摄像头定时拍摄一张图像(默认是Jpeg格式,数据量很小)。然后,后台线程将Jpeg图像(很小,大约几KB)上传到服务器上。手机默默地拍照,默默地上传照片,不用手工干预,比如你可以设置每隔三分钟拍一张照片,然后上传到Flickr这个著名的图片共享站点上,全世界都会看到你的慢速视频。
这样就可以帮助其他系统工作,比如这么一个场景:
PC机上的MSN Messenger用户Vicky正在和你的移动MSN Messenger通过这种方式视频聊天,Vicky的聊天对话框上能够看到你的头像,并且每隔十几秒钟就看到你的手机所看到的画面了,是不是就是一种慢速的移动视频聊天呢?
更多情况参看《[J2ME]VideoCoolala(MobileWebCam)开源说明》。
运行情况:
图1-1 VideoCoolala的主界面
图1-2 VideoCoolala的摄像头启动界面
图1-3 VideoCoolala的设置界面
下面介绍VideoCoolala-MobileWebCam的功能列表:
l   我要MobileWebCam
n   启动MobileWebCam
n   停止MobileWebCam
l   设置MobileWebCam
l   关于MobileWebCam
l   退出 
1.1. 特别之处   这个应用程序的总体思路来自于Mowecam的设计理念。
   MVC的类分解,采用了 mingjava 的思路。
   对RMS记录存储的封装模式以及对资源的调用方式,则参照了索爱公司的BlueGammon游戏代码。 
对于MVC的类分解,你还可以参考我的另一篇文章《[J2ME]RSSOwlMidlet(RSS无线阅读器)设计说明》。
BlueGammon游戏源代码,你可以从
http://www.cnblogs.com/Files/zhengyun_ustc/Bluegammon-eclipse.rar 下载。
BlueGammon的代码很经典,我只是套用了BlueGammon的RmsFacade类,将对RMS的操作完全封装起来。另外用VideoSettings类来提供存储和读取RMS中关于本应用所需要的几个参数的功能,VideoSettings其实就是调用了RmsFacade类。 
总结一下特别之处。
   可以设置每隔多少秒钟,抓拍一张照片,上传服务器;
   可以设置玩家姓名;
   可以设置远程服务器的接收页面的URL;
   在传送数据的过程中可以提示用户,总共要传送多少字节,还剩余多少字节没有传输;
   传送的过程发生了错误,会有Alert界面提示用户。 
特别是比原来Mowecam的版本增加了几个特性:
   可以设置抓拍图像的格式,以及大小,从而能够让用户自己控制上传图像的数据量大小;
   当请求远端服务器时,加入了动画等候画面,提示用户正在不断地向服务器上传数据; 
一般来说,Jpeg格式是推荐的,因为它数据量很小,其次是gif和bmp,但这两种格式手机不一定支持,最差的是png格式。
在服务器,我制作了一个很简单的ASP页面来接收图像数据,并进行保存。代码很简单,就是利用ADODB.Stream读写数据流,从而能够接收手机持续不断上传的数据,知道如何保存。
2 设计思路摘要:本章描述VideoCoolala(MobileWebCam)的设计思路。 
2.1. 如何使用MMAPI来抓拍照片关键三个包:
   javax.microedition.media.Manager;
   javax.microedition.media.Player;
   javax.microedition.media.control.VideoControl。 
待续。
有时间一定更新。 
2.2. MVC设计模式划分为四个模块:
   midlet:
   VideoCoolala.java: 
  这当然是MIDlet必须的入口;它负责初始化控制器GUIController
   Model,模型:
   ThreadPostVideo.java
  提供抓拍照片并发送的功能:
   负责抓拍照片的逻辑;
   调用HttpUploadCapturedBuffer上传照片;
   VideoSettings.java
  提供存储和读取RMS中关于本应用所需要的几个参数的功能
   View,视图:
   About.java
  “关于”的Alert界面
   FormPostProgress.java
  报告当前上传图像进度的Form
   FormSetting.java
  提供设置关于本应用所需要的几个参数的Form
   FormWebcam.java
  负责启动/停止自动拍照和上传照片的主力Form
   MainMenuList.java
  提供菜单命令的List界面
   WaitFlash.java
  “动画等待画面”的Canvas界面,能够同时告知用户上传进度
   controller:
   GUIController.java
  MVC中的控制器部分,负责界面事件的处理,以及决定该显示哪一个Form 
控制器的事件处理部分:
下面来看看如何处理界面事件。
代码
public void handleEvent( int eventID,Object[] args){ 
   switch (eventID)
  { 
    case EventID.EVENT_EXIT:
    {
       System.gc();  // 通知进行垃圾收集
       Thread.yield(); // 本线程暂停一下,使得GC可以马上获得机会运行
       rssMidlet.exit(false);
      break;
    }
    case EventID.EVENT_SHOWWEBCAM:
    {
       try
       {
         m_webcamForm.StartCapture();
       }
       catch(Exception exc)
       {
       
       }
       setCurrent(m_webcamForm);
     break;
    }
      case EventID.EVENT_SETTINGS:
    {
       setCurrent(m_settingForm);
     break;
    }
    case EventID.EVENT_STARTWEBCAM:
    {
       m_webcamForm.StartWebcamSnapshot();
       setCurrent(m_webcamForm);
      break;
    }
……
 每一个Form的如何转发事件:
每一个Form上也有事件响应,并可以自行处理事件,然后加入参数,进一步转发事件到控制器上。这个概念来自于mingjava。
代码
  /*
  * 内部监听器,监听器监听所有Command事件,并把事件响应推出来让控制器处理
  */
 private class FormWebcamListener implements CommandListener{
    public void commandAction(Command command, Displayable disp){
      if(command == cmdBack){
       controller.handleEvent(GUIController.EventID.EVENT_WEBCAM_BACK, null);
    }
      else if(command == cmdStart){
       controller.handleEvent(GUIController.EventID.EVENT_STARTWEBCAM, null);            
      }
      else if(command == cmdStop){
       controller.handleEvent(GUIController.EventID.EVENT_STOPWEBCAM, null);             
      }
      //end else
    }
 }//end inner class
 2.3. 上传图像的后台线程问题待续。
有时间一定更新。
3 设计过程中需要特别指出的问题摘要:本章给出了 VideoCoolala(MobileWebCam)的设计过程中需要特别指出的问题。 
3.1. 图像格式和数据量的问题有一篇《Camera speed evaluation of the Nokia 6600》专门评估了Nokia6600在不同图像格式下使用摄像头的速度以及图像大小,很有参考价值。
从中,我们可以看出PNG图像的数据量是最大的,Jpeg的数据量是最小的。
4 资源我的MobileWebCam资源:
1:《[J2ME]VideoCoolala(MobileWebCam)开源说明》
2:《[J2ME]VideoCoolala(MobileWebCam)设计说明》
3:下载源代码:http://www.cnblogs.com/Files/zhengyun_ustc/videocoolala-src.rar
4:下载midlet:jad: videoim.jad jar: videoim.jar 
网络资源:1:熟练使用J2ME在实际开发中的可选包MMAPI
2:J2ME中用MMAPI开发手机摄像头程序
3:Camera speed evaluation of the Nokia 6600
4:BlueGammon
附:
开源版权声明
摘要:本章描述VideoCoolala(MobileWebCam)的开源版权声明。
由于我这个版本的 VideoIM手机自动拍照上传器J2ME版本 也是基于Mowecam的设计理念基础上改编而来的,所以决定遵照GPL协议的大意开放源代码,您可以自由传播和修改,在遵照下面的约束条件的前提下:
条件1
只要你在VideoCoolala(MobileWebCam)的每一副本上明显和恰当地出版版权声明,保持此许可证的声明和没有担保的声明完整无损,并和程序一起给每个其他的程序接受者一份许可证的副本,你就可以用任何媒体复制和发布你收到的原始的程序的源代码。你可以为转让副本的实际行动收取一定费用。你也有权选择提供担保以换取一定的费用。
条件2
你可以修改VideoCoolala(MobileWebCam)程序的一个或几个副本或程序的任何部分,以此形成基于程序的作品。只要你同时满足下面的所有条件,你就可以按前面第一款的要求复制和发布这一经过修改的程序或作品。
a)
你必须在修改的文件中附有明确的说明:你修改了这一文件及具体的修改日期。
b)
你必须使你发布或出版的作品(它包含程序的全部或一部分,或包含由程序的全部或部分衍生的作品)允许第三方作为整体按许可证条款免费使用。
c)
如果修改的程序在运行时以交互方式读取命令,你必须使它在开始进入常规的交互使用方式时打印或显示声明:包括适当的版权声明和没有担保的声明(或者你提供担保的声明);用户可以按此许可证条款重新发布程序的说明;并告诉用户如何看到这一许可证的副本。(例外的情况:如果原始程序以交互方式工作,它并不打印这样的声明,你的基于程序的作品也就不用打印声明)。
这样,您就可以自由使用并传播本源代码,当然请您原封不动地保留原作者信息。 
详细内容见:http://www.cnblogs.com/zhengyun_ustc/archive/2005/10/13/videocoolala.html 
 
↑返回目录 
前一篇: 
入门-J2ME学习日记之MIDlet的生命周期  
后一篇: 
如何使用kxml解析WAP