基本信息
源码名称:android拍照、录制视频并上传至服务器 实例下载(有图有源码)
源码大小:1.83M
文件格式:.zip
开发语言:Java
更新时间:2013-02-07
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
拍照、录制视频、上传、服务器配置、预览视频等功能都实现了
package cn.itcast.videorecord;
import java.io.File;
import java.io.OutputStream;
import java.io.PushbackInputStream;
import java.io.RandomAccessFile;
import java.net.Socket;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity implements
DialogInterface.OnClickListener
{
private static final String TAG = "MainActivity";
private SurfaceView surfaceView;
private MediaRecorder mediaRecorder;
private boolean record;
private File videoFile;
private ProgressDialog progressDialog = null;// 上传进度条
private long videoLenth = 0;
Thread thread;
private Camera camera = null;
private Socket receiver;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Window window = getWindow();// 得到窗口
requestWindowFeature(Window.FEATURE_NO_TITLE);// 没有标题
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 屏幕高亮
setContentView(R.layout.main);
mediaRecorder = new MediaRecorder();
surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
/* 下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 */
this.surfaceView.getHolder().setType(
SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
this.surfaceView.getHolder().setFixedSize(800, 600);// 设置分辨率
ButtonClickListener listener = new ButtonClickListener();//修改这里切换传输
Button stopButton = (Button) this.findViewById(R.id.stop);
Button recordButton = (Button) this.findViewById(R.id.record);
stopButton.setOnClickListener(listener);
recordButton.setOnClickListener(listener);
/*
* // IP按钮 Button IPButton = (Button) findViewById(R.id.IPbutton);
* IPButton.setOnClickListener(new Button.OnClickListener() {
*
* @Override public void onClick(View v) { // TODO Auto-generated method
* stub onShowPromptDialog(v); } });
*/
}
/**
* 显示对话框的IP
*/
public void onShowPromptDialog(View v)
{
// inflate需要显示到Dialog里的View对象
LayoutInflater li = LayoutInflater.from(this);
View view = li.inflate(R.layout.log, null);
EditText td = (EditText) view.findViewById(R.id.editText_prompt);
td.setText("lvjun5555555555");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请输入上传主机的IP地址");
builder.setIcon(R.drawable.ic_launcher);
// 之前inflate的View 放到dialog中
builder.setView(view);
builder.setPositiveButton("确定", this);
builder.setNegativeButton("取消", this);
builder.create().show();
}
/**
* 实现Dialog的回调方法
*/
@Override
public void onClick(DialogInterface dialog, int which)
{
// TODO Auto-generated method stub
if (which == Dialog.BUTTON_POSITIVE)
{
AlertDialog ad = (AlertDialog) dialog;
EditText t = (EditText) ad.findViewById(R.id.editText_prompt);
String ip = t.getText().toString();
StreamTool.createFile(ip);
System.out.println("修改成功");
Toast.makeText(this, t.getText().toString(), Toast.LENGTH_LONG)
.show();
}
}
/**
* 当activity摧毁时调用
*/
@Override
protected void onDestroy()
{
mediaRecorder.release();
super.onDestroy();
}
/**
* 保存到本地在上传
*
* @author Administrator 吕俊
*/
private final class ButtonClickListener implements View.OnClickListener
{
@Override
public void onClick(View v)
{
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED))
{
Toast.makeText(MainActivity.this, R.string.sdcarderror, 1)
.show();
return;
}
try
{
switch (v.getId())
{
case R.id.record:
mediaRecorder.reset();
mediaRecorder
.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 从照相机采集视频
mediaRecorder
.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder
.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoSize(480, 320);
mediaRecorder.setVideoFrameRate(3); // 每秒3帧
mediaRecorder
.setVideoEncoder(MediaRecorder.VideoEncoder.H263); // 设置视频编码方式
mediaRecorder
.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
videoFile = new File(
Environment.getExternalStorageDirectory(),
System.currentTimeMillis() ".MP4");
mediaRecorder.setPreviewDisplay(surfaceView.getHolder()
.getSurface());
mediaRecorder
.setOutputFile(videoFile.getAbsolutePath());
mediaRecorder.prepare();// 预期准备
mediaRecorder.start();// 开始刻录
record = true;
break;
case R.id.stop:
if (record)
{
System.out.println(videoFile);
mediaRecorder.stop();
record = false;
progressDialog = new ProgressDialog(
MainActivity.this);
progressDialog
.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setIcon(R.drawable.camera);
progressDialog.setTitle(R.string.upload);
progressDialog.setButton("取消上传",
new DialogInterface.OnClickListener()
{
@Override
public void onClick(
DialogInterface dialog,
int which)
{
// TODO Auto-generated method stub
thread.interrupt();
}
});
progressDialog.show();
thread = new Thread(new UploadTask());
thread.start();
}
break;
}
} catch (Exception e)
{
Toast.makeText(MainActivity.this, R.string.error, 1).show();
Log.e(TAG, e.toString());
}
}
}
/**
* 实时上传到PC端(边录边传)
*
* @author Administrator 吕俊
*/
private final class ButtonClickListener1 implements View.OnClickListener
{
@Override
public void onClick(View v)
{
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED))
{
Toast.makeText(MainActivity.this, R.string.sdcarderror, 1)
.show();
return;
}
try
{
switch (v.getId())
{
case R.id.record:
mediaRecorder.reset();
mediaRecorder
.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 从照相机采集视频
//mediaRecorder
//.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder
.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setVideoSize(480, 320);
mediaRecorder.setVideoFrameRate(3); // 每秒3帧
mediaRecorder
.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); // 设置视频编码方式
//mediaRecorder
// .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setPreviewDisplay(surfaceView.getHolder()
.getSurface());
// 实时上传的代码
receiver = new Socket("192.168.1.149", 9999);
ParcelFileDescriptor pfd = ParcelFileDescriptor
.fromSocket(receiver);
mediaRecorder.setOutputFile(pfd.getFileDescriptor());
mediaRecorder.prepare();// 预期准备
mediaRecorder.start();// 开始刻录
record = true;
break;
case R.id.stop:
if (record)
{
System.out.println(videoFile);
mediaRecorder.stop();
mediaRecorder.release();
receiver.close();
record = false;
}
break;
}
} catch (Exception e)
{
Toast.makeText(MainActivity.this, R.string.error, 1).show();
Log.e(TAG, e.toString());
}
}
}
/**
* 文件上传连接服务器的
*
*
* **/
class UploadTask implements Runnable
{
@Override
public void run()
{
try
{
videoLenth = videoFile.length();// 得到文件的大小
progressDialog.setMax((int) videoLenth);// 设置精度条的最大值
System.out.println("连接之前");
String ip = StreamTool.readIP();// 从配置文件里读取Ip
Socket socket = new Socket(ip, 6789);
OutputStream outStream = socket.getOutputStream();
System.out.println("连接之后");
System.out.println(videoFile);
String head = "Content-Length=" videoFile.length()
";filename=" videoFile.getName() ";sourceid=\r\n";
System.out.println(videoFile.getName());
outStream.write(head.getBytes());
PushbackInputStream inStream = new PushbackInputStream(
socket.getInputStream());
String response = StreamTool.readLine(inStream);
System.out.println(response);
String[] items = response.split(";");
String position = items[1].substring(items[1].indexOf("=") 1);
RandomAccessFile fileOutStream = new RandomAccessFile(
videoFile, "r");
fileOutStream.seek(Integer.valueOf(position));
byte[] buffer = new byte[1024];
int len = -1;
int i = 1;
while ((len = fileOutStream.read(buffer)) != -1)
{
outStream.write(buffer, 0, len);
// if(i==10) break;
Log.i("haha", len "");
i = i len;
progressDialog.setProgress(i);
}
fileOutStream.close();
outStream.close();
inStream.close();
socket.close();
} catch (Exception e)
{
System.out.println("报错" e.getMessage());
e.printStackTrace();
} finally
{
progressDialog.dismiss();
}
}
}
}