图片、录音和视频采集

本项目实现的是图片、录音和视频的采集,把具体的实现都在一个项目里面实现,有需要的可以那来看下。仅仅是功能的实现, 可以自己写一些比较绚的UI来组扩充。代码里面注释很详细
代码地址:http://www.eoeandroid.com/thread-252327-1-2.html
 

 
 
TestBasicVideo.java 外部引用原始文档
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.video;

import java.io.File;
import java.io.FileDescriptor;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.SimpleAdapter.ViewBinder;

/**
 * class name:TestBasicVideo<BR>
 * class description:一个简单的录制视频例子<BR>
 * PS:实现基本的录制保存文件 <BR>
 * 
 * @version 1.00 2011/09/21
 * @author CODYY)peijiangping
 */
public class TestBasicVideo extends Activity implements SurfaceHolder.Callback {
	private Button start;// 开始录制按钮
	private Button stop;// 停止录制按钮
	private MediaRecorder mediarecorder;// 录制视频的类
	private SurfaceView surfaceview;// 显示视频的控件
	// 用来显示视频的一个接口,我靠不用还不行,也就是说用mediarecorder录制视频还得给个界面看
	// 想偷偷录视频的同学可以考虑别的办法。。嗯需要实现这个接口的Callback接口
	private SurfaceHolder surfaceHolder;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
		// 设置横屏显示
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
		// 选择支持半透明模式,在有surfaceview的activity中使用。
		getWindow().setFormat(PixelFormat.TRANSLUCENT);
		setContentView(R.layout.video);
		init();
	}

	private void init() {
		start = (Button) this.findViewById(R.id.start);
		stop = (Button) this.findViewById(R.id.stop);
		start.setOnClickListener(new TestVideoListener());
		stop.setOnClickListener(new TestVideoListener());
		surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview);
		SurfaceHolder holder = surfaceview.getHolder();// 取得holder
		holder.addCallback(this); // holder加入回调接口
		// setType必须设置,要不出错.
		holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
	}

	class TestVideoListener implements View.OnClickListener {

		public void onClick(View v) {
			if (v == start) {
				mediarecorder = new MediaRecorder();// 创建mediarecorder对象
				// 设置录制视频源为Camera(相机)
				mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
				// 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
				mediarecorder
						.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
				// 设置录制的视频编码h263 h264
				mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
				// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
				mediarecorder.setVideoSize(176, 144);
				// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
				mediarecorder.setVideoFrameRate(20);
				mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
				// 设置视频文件输出的路径
				File file = new File("/sdcard/" + "SP" +
				new SimpleDateFormat("yyyyMMdd_hhmmss").format(new Date(System.currentTimeMillis()))+".3gp");
				mediarecorder.setOutputFile(file.getAbsolutePath());
				try {
					// 准备录制
					mediarecorder.prepare();
					// 开始录制
					mediarecorder.start();
				} catch (IllegalStateException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (v == stop) {
				if (mediarecorder != null) {
					// 停止录制
					mediarecorder.stop();
					// 释放资源
					mediarecorder.release();
					mediarecorder = null;
				}
			}

		}

	}

	public void surfaceChanged(SurfaceHolder holder, int format, int width,
			int height) {
		// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
		surfaceHolder = holder;
	}

	public void surfaceCreated(SurfaceHolder holder) {
		// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
		surfaceHolder = holder;
	}

	public void surfaceDestroyed(SurfaceHolder holder) {
		// surfaceDestroyed的时候同时对象设置为null
		surfaceview = null;
		surfaceHolder = null;
		mediarecorder = null;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值