zoukankan      html  css  js  c++  java
  • [J2ME]VideoCoolala(MobileWebCam)设计说明

    郑昀@ultrapower

    产品名称

    产品版本

    Keyword: Mobile VideoControl Media 拍照手机 j2me midp midlet  WebCam  java

    VideoCoolala

    [MobileWebCam]

    1.12.1305

    [J2ME] VideoCoolala(MobileWebCam)

    设计说明

    我的MobileWebCam资源:

    1[J2ME]VideoCoolala(MobileWebCam)开源说明》

    2[J2ME]VideoCoolala(MobileWebCam)设计说明》

    3:下载源代码:https://files.cnblogs.com/zhengyun_ustc/videocoolala-src.rar

    4:下载midletjad: videoim.jad jar: videoim.jar

    摘要:

    本文档给出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)开源说明》

     

    下面介绍VideoCoolala-MobileWebCam的功能列表:

    l         我要MobileWebCam

    n         启动MobileWebCam

    n         停止MobileWebCam

    l         设置MobileWebCam

    l         关于MobileWebCam

    l         退出

     

    1.1. 特别之处

    l         这个应用程序的总体思路来自于Mowecam的设计理念。

    l         MVC的类分解,采用了 mingjava 的思路。

    l         RMS记录存储的封装模式以及对资源的调用方式,则参照了索爱公司的BlueGammon游戏代码。

     

    对于MVC的类分解,你还可以参考我的另一篇文章《[J2ME]RSSOwlMidlet(RSS无线阅读器)设计说明》

    BlueGammon游戏源代码,你可以从

    https://files.cnblogs.com/zhengyun_ustc/Bluegammon-eclipse.rar 下载。

    BlueGammon的代码很经典,我只是套用了BlueGammonRmsFacade类,将对RMS的操作完全封装起来。另外用VideoSettings类来提供存储和读取RMS中关于本应用所需要的几个参数的功能,VideoSettings其实就是调用了RmsFacade类。

     

    总结一下特别之处。

    l         可以设置每隔多少秒钟,抓拍一张照片,上传服务器;

    l         可以设置玩家姓名;

    l         可以设置远程服务器的接收页面的URL

    l         在传送数据的过程中可以提示用户,总共要传送多少字节,还剩余多少字节没有传输;

    l         传送的过程发生了错误,会有Alert界面提示用户。

     

    特别是比原来Mowecam的版本增加了几个特性:

    l         可以设置抓拍图像的格式,以及大小,从而能够让用户自己控制上传图像的数据量大小;

    l         当请求远端服务器时,加入了动画等候画面,提示用户正在不断地向服务器上传数据;

     

    一般来说,Jpeg格式是推荐的,因为它数据量很小,其次是gifbmp,但这两种格式手机不一定支持,最差的是png格式。

    在服务器,我制作了一个很简单的ASP页面来接收图像数据,并进行保存。代码很简单,就是利用ADODB.Stream读写数据流,从而能够接收手机持续不断上传的数据,知道如何保存。

    2 设计思路

    摘要:本章描述VideoCoolala(MobileWebCam)的设计思路。

     

    2.1. 如何使用MMAPI来抓拍照片

    关键三个包:

    l         javax.microedition.media.Manager

    l         javax.microedition.media.Player

    l         javax.microedition.media.control.VideoControl

     

    待续。

    有时间一定更新。

     

    2.2. MVC设计模式

    划分为四个模块:

    l         midlet

    n         VideoCoolala.java  

    u       这当然是MIDlet必须的入口;它负责初始化控制器GUIController

    l         Model,模型:

    n         ThreadPostVideo.java

    u       提供抓拍照片并发送的功能:

    l         负责抓拍照片的逻辑;

    l         调用HttpUploadCapturedBuffer上传照片;

    n         VideoSettings.java

    u       提供存储和读取RMS中关于本应用所需要的几个参数的功能

    l         View,视图:

    n         About.java

    u       “关于”的Alert界面

    n         FormPostProgress.java

    u       报告当前上传图像进度的Form

    n         FormSetting.java

    u       提供设置关于本应用所需要的几个参数的Form

    n         FormWebcam.java

    u       负责启动/停止自动拍照和上传照片的主力Form

    n         MainMenuList.java

    u       提供菜单命令的List界面

    n         WaitFlash.java

    u       “动画等待画面”的Canvas界面,能够同时告知用户上传进度

    l         controller

    n         GUIController.java

    u       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的数据量是最小的。

    Format of the image: PNG

    Example picture:

    Result of the test running for PNG images:

    Resolution

    Time in seconds

    Memory Size in KB

    Number of pictures

    80x60

    1s

    12, 7KB

    1

     

    3s

     

    4

     

    5s

     

    8

     

    7s

     

    11

     

    10s

     

    15

    160x120

    1s

    42, 0 KB

    1

     

    3s

     

    3

     

    5s

     

    5

     

    7s

     

    7

     

    10s

     

    10

    200x150

    1s

    67,4 KB

    1

     

    3s

     

    2

     

    5s

     

    3

     

    7s

     

    5

     

    10s

     

    7

    Format of the image: BMP

    Exapmle picture:

    Result of the test running: for BMP images

    Resolution

    Time in seconds

    Memory size in KB

    Number of pictures

    80x60

    1s

    5,8 KB

    1

     

    3s

     

    5

     

    5s

     

    8

     

    7s

     

    12

     

    10s

     

    17

    160x120

    1s

    20,2 KB

    1

     

    3s

     

    3

     

    5s

     

    6

     

    7s

     

    9

     

    10s

     

    12

    200x150

    1s

    31,0 KB

    1

     

    3s

     

    2

     

    5s

     

    4

     

    7s

     

    6

     

    10s

     

    8

    Format of the image: GIF

    Example picture:

    Result of the test running

    Resolution

    Time in seconds

    Memory size in KB

    Number of pictures

    80x60

    1s

    2,3 KB

    1

     

    3s

     

    5

     

    5s

     

    8

     

    7s

     

    12

     

    10s

     

    17

    160x120

    1s

    4,8 KB

    1

     

    3s

     

    3

     

    5s

     

    6

     

    7s

     

    9

     

    10s

     

    12

    200x150

    1s

    7,1 KB

    1

     

    3s

     

    2

     

    5s

     

    4

     

    7s

     

    6

     

    10s

     

    8

    Format of the image: JPEG

    Example picture:

    Result of the test running

    Resolution

    Time in seconds

    Memory size in KB

    Number of pictures

    80x60

    1s

    1,1 KB

    1

     

    3s

     

    5

     

    5s

     

    8

     

    7s

     

    12

     

    10s

     

    18

    160x120

    1s

    2,9 KB

    1

     

    3s

     

    3

     

    5s

     

    6

     

    7s

     

    9

     

    10s

     

    12

    200x150

    1s

    3,0 KB

    1

     

    3s

     

    2

     

    5s

     

    4

     

    7s

     

    6

     

    10s

     

    9

     

     

    4 资源

    我的MobileWebCam资源:

    1《[J2ME]VideoCoolala(MobileWebCam)开源说明》

    2《[J2ME]VideoCoolala(MobileWebCam)设计说明》

    3:下载源代码:https://files.cnblogs.com/zhengyun_ustc/videocoolala-src.rar

    4:下载midletjad: videoim.jad jar: videoim.jar

     

    网络资源:

    1熟练使用J2ME在实际开发中的可选包MMAPI

    2J2ME中用MMAPI开发手机摄像头程序

    3Camera speed evaluation of the Nokia 6600

    4BlueGammon

     

     

    编写者

    日期

    关键词

    郑昀@ultrapower

    2005-10-12

    Mobile VideoControl Media 拍照手机 j2me midp midlet  WebCam  java

     

     

  • 相关阅读:
    考研打卡_Day04
    考研打卡_Day03
    考研打卡-Day02
    吾日三省-归隐
    为什么要写博客?
    用C语言写一个Helloworld_实现第一步编译运行
    C语言中的结构体是怎么定义的_怎么使用?
    C语言的常用的数据类型有哪些_所占字节分别是多少
    Vim编辑器中查找关键词命令_查找与替换命令_多窗口命令
    Vim的基本操作命令与光标移动命令
  • 原文地址:https://www.cnblogs.com/zhengyun_ustc/p/videocoolaladesign.html
Copyright © 2011-2022 走看看