⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadpostvideo.java

📁 我们提供的VideoIM手机自动拍照上传器J2ME版本[开源]就是这么一种概念: 一个可以下载到手机(例如Nokia7610已经确实可以下载安装并正常运行)的Java应用程序
💻 JAVA
字号:
/**
//VideoIM文档生成日期:2005.10.12
//
//(1)概述:
//类名称:ThreadPostVideo
//类说明:
//	提供抓拍照片并发送的功能
* 
//所在子系统:VideoIM
//
//系统总描述:
	    我们提供的VideoIM手机自动拍照上传器J2ME版本[开源]是
	    一个可以下载到手机(例如Nokia7610已经确实可以下载安装并正常运行)的应用程序,
	    用来自动驱动手机摄像头定时拍摄,并后台将JPEG图像(很小,大约几KB)上传到服务器上,
	    这样就可以帮助其他系统工作,比如PC机上的MSN Messenger可以和你的移动MSN Messenger
	    通过这种方式视频聊天,对方可以每隔十几秒钟看到你的手机所看到的画面了。

	 子系统描述:
		VideoIM的功能列表:
			1:我要MobileWebCam
				启动MobileWebCam
				停止MobileWebCam
			2:MobileWebCam设置
			3:关于我
			4:退出


//(2)历史记录:
//创建人: 郑昀(2005.10.12)
//联系我: Google Talk >> zhengyun@gmail.com
//Blogs:    http://blog.csdn.net/zhengyun_ustc/以及http://www.cnblogs.com/zhengyun_ustc

//(3)版权声明:
//由于我这个版本的VideoIM手机自动拍照上传器也是基于Mowecam的设计理念基础上改编而来的,
//所以决定遵照GPL协议的大意开放源代码,您可以自由传播和修改,在遵照GPL协议的约束条件的前提下。

//(4)相关资源:
1:《[J2ME]VideoIM手机自动拍照上传器开源说明》
2:《[J2ME]VideoIM手机自动拍照上传器设计说明》
3:下载源代码:

////////////////////////////////////////////////////////////////////*/
package com.ultrapower.model;

import javax.microedition.media.MediaException;
import javax.microedition.media.control.VideoControl;

import com.ultrapower.common.CommandResources;
import com.ultrapower.control.GUIController;
import com.ultrapower.tools.HttpUploadCapturedBuffer;
import com.ultrapower.view.FormPostProgress;
import com.ultrapower.view.WaitFlash;

/**********************************************************
//ThreadPostVideo
//
//Class Description:
//	提供抓拍照片并发送的功能
//
//Author:
// zhengyun@ultrapower 2005.10.12
//
**********************************************************/
public class ThreadPostVideo
	implements Runnable {
	
	private GUIController 	m_controller = null;
	private VideoControl 	m_video = null;
	public boolean 		m_bCaptureVideo;
	private VideoSettings 	m_Settings = VideoSettings.getInstance();
	
	public ThreadPostVideo(GUIController controll,
			VideoControl videocontrol)
    {
		System.out.println("/** Enter ThreadPostVideo Constractor!");
		m_controller 	= controll;
		m_bCaptureVideo = true;
		m_video 		= videocontrol;
    }
	
	public final void run()
    {
		String sProgressWAITTITLE = String.valueOf(
				CommandResources.getChars(CommandResources.TXT_WAITTITLE));
        while(m_bCaptureVideo) 
            try
            {
				System.out.println("/** 开始启动摄像头的捕获!");
                
				// getSnapshot(null) => creates an byte[] of the new image. The default encoding is png. The default size is 160x120 Pixel.
                // getSnapshot("encoding=bmp") The encoding is bmp. The size is per default 160x120
                // getSnapshot("encoding=bmp&width=80&height=60") The enconding is bmp. The size is 80x60
                // gif, jpeg, png, bmp images can be created
                // the size of the images depends on the memory. No matter of the size the relationship must be 4:3
				byte abImageData[];
				if((abImageData = m_video.getSnapshot(
						"encoding=" + 
						String.valueOf(m_Settings.getSnapshotImageType())
						+ "&width=" + 
						m_Settings.getSnapshotImageWidth() +
						"&height=" + 
						m_Settings.getSnapshotImageHeight())) != null)
				/*byte abImageData[] = m_video.getSnapshot(null);
				System.out.println("/** 抓拍一张!");
				if(abImageData != null)*/
                {
					String strDataLength = String.valueOf(abImageData.length);
					System.out.println("/** 显示要上传的字节数!" + strDataLength);
					
					/*
					 * 在这个线程中New出来一个FormPostProgress,
					 * 这是被逼出来的
					 */
					/*WaitFlash waitFlash = WaitFlash.getInstance(m_controller);
					waitFlash.setTitle(
							sProgressWAITTITLE 
									+ strDataLength);
					m_controller.setCurrent(waitFlash);*/
					//m_controller.setProgressForm(progressForm);
					
					//////////////////////////////////////////
					// 告诉控制器,需要显示进度条Form了,而且要告知总的字节数					
					m_controller.setPostDataTotalLength(strDataLength);					
					m_controller.handleEventNoThrows(GUIController.EventID.EVENT_POSTDATA, 
							null);
					////////////////////////////////////////////
					
                    String strServerResponse;
                    if((strServerResponse = 
						UploadCapturedBuffer(abImageData)).startsWith("ERROR="))
                    {
						strServerResponse = 
							strServerResponse.substring(
									strServerResponse.indexOf("ERROR=") + "ERROR=".length());
						////////////////////////////////////////////
						// 告诉控制器,出错了
						m_controller.setRemoteServerResponse(strServerResponse);
						m_controller.handleEventNoThrows(GUIController.EventID.EVENT_POSTDATA_ERROR, 
								null);
						////////////////////////////////////////////
                    } 
					else
                    {
						////////////////////////////////////////////
						// 告诉控制器,成功了
						m_controller.handleEventNoThrows(GUIController.EventID.EVENT_POSTDATA_SUCC, 
								null);
						////////////////////////////////////////////
                    }
					
                    Thread.currentThread();
					
					// 隔规定的时间后,再让线程抓拍照片
                    Thread.sleep(
							m_Settings.getTimerSnapshot() * 1000);
                } 
				else
                {
					System.out.println("/** 停止摄像头的捕获!");
					m_bCaptureVideo = false;
					////////////////////////////////////////////
					// 告诉控制器,不能够捕获图像
					m_controller.setSnapshotException("getSnapShot函数调用失败!");
					m_controller.handleEventNoThrows(GUIController.EventID.EVENT_CANNOT_SNAPSHOT, 
							null);
					////////////////////////////////////////////
                }
            }
            catch(MediaException mediaexception)
            {
				m_bCaptureVideo = false;
				
				////////////////////////////////////////////
				// 告诉控制器,不能够捕获图像
				m_controller.setSnapshotException(mediaexception.getMessage());
				m_controller.handleEventNoThrows(GUIController.EventID.EVENT_CANNOT_SNAPSHOT, 
						null);
				////////////////////////////////////////////
				
            }
            catch(InterruptedException interruptedexception)
            {
				m_bCaptureVideo = false;
				////////////////////////////////////////////
				// 告诉控制器,不能够捕获图像
				m_controller.setSnapshotException(interruptedexception.getMessage());
				m_controller.handleEventNoThrows(GUIController.EventID.EVENT_CANNOT_SNAPSHOT, 
						null);
				////////////////////////////////////////////
            }
            catch(SecurityException securityexception)
            {
				m_bCaptureVideo = false;
				////////////////////////////////////////////
				// 告诉控制器,不能够捕获图像
				m_controller.setSnapshotException(securityexception.getMessage());
				m_controller.handleEventNoThrows(GUIController.EventID.EVENT_CANNOT_SNAPSHOT, 
						null);
				////////////////////////////////////////////
            }
    }

    private String UploadCapturedBuffer(byte abyteImageData[])
    {
		System.out.println("/** Enter UploadCapturedBuffer!");
		HttpUploadCapturedBuffer upload;
        return (upload = new HttpUploadCapturedBuffer(abyteImageData, 
				m_controller)).upload();
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -