package com.example.videorecord;
import java.io.File;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.text.Layout;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
import android.widget.Button;
import android.widget.RelativeLayout;
public class MainActivity extends Activity
{
private SurfaceView surfaceview=null;
private RelativeLayout layout=null;
private Button recordbutton=null,stopbutton=null;
private MediaRecorder mediaRecord=null;
private Camera camera=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
surfaceview=(SurfaceView)this.findViewById(R.id.surfaceview);
surfaceview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceview.getHolder().setFixedSize(176, 144);
surfaceview.getHolder().setKeepScreenOn(true);
surfaceview.getHolder().addCallback(new Surfacecallback());
layout=(RelativeLayout)this.findViewById(R.id.layout);
recordbutton=(Button)this.findViewById(R.id.recordbutton);
stopbutton=(Button)this.findViewById(R.id.stopbutton);
}
private final class Surfacecallback implements Callback
{
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)
{
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
try
{
// TODO Auto-generated method stub
camera=Camera.open();//打开摄像头
Camera.Parameters paramsters=camera.getParameters();//设置摄像头参数
paramsters.setPreviewSize(1280, 720);
paramsters.setPreviewFrameRate(5);
paramsters.setPictureSize(1024,768);
paramsters.setJpegQuality(80);
//System.out.println(paramsters.flatten());
camera.setParameters(paramsters);
camera.setPreviewDisplay(holder);
camera.startPreview();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
// TODO Auto-generated method stub
if(camera!=null)
{
camera.release();
camera=null;
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
layout.setVisibility(ViewGroup.VISIBLE);
}
// TODO Auto-generated method stub
return super.onTouchEvent(event);
}
public void record(View v)
{
switch(v.getId())
{
case R.id.recordbutton:
try
{
camera.release();
camera=null;
File videoFile=new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");//设置文件的保存路径
mediaRecord=new MediaRecorder();
mediaRecord.setAudioSource(MediaRecorder.AudioSource.MIC);//采集声音来源为麦克风
mediaRecord.setVideoSource(MediaRecorder.VideoSource.CAMERA);//采集视频来源为摄像图
mediaRecord.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置视频格式
mediaRecord.setVideoSize(480, 320);//设置视频大小
mediaRecord.setVideoFrameRate(5); //设置摄像图每秒捕获的画面数
mediaRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置声音编码
mediaRecord.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//设置视频编码
mediaRecord.setOutputFile(videoFile.getAbsolutePath());//设置文件的存放位置
mediaRecord.setPreviewDisplay(surfaceview.getHolder().getSurface());//设置屏幕预览
mediaRecord.prepare();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
mediaRecord.start();
recordbutton.setEnabled(false);
stopbutton.setEnabled(true);
break;
case R.id.stopbutton:
if(mediaRecord!=null)
{
mediaRecord.stop();
mediaRecord.release();
mediaRecord=null;
recordbutton.setEnabled(true);
stopbutton.setEnabled(false);
}
break;
}
}
}
需要在配置文件中加入的权限:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<SurfaceView
android:id="@+id/surfaceview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<RelativeLayout
android:id="@+id/layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone">
<Button
android:id="@+id/recordbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="10dp"
android:onClick="record"
android:text="@string/recordbutton"/>
<Button
android:id="@+id/stopbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="record"
android:layout_toLeftOf="@id/recordbutton"
android:layout_alignTop="@id/recordbutton"
android:layout_marginRight="30dp"
android:enabled="false"
android:text="@string/stopbutton"/>
</RelativeLayout>
</FrameLayout>