📄 threadpostvideo.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 + -