//布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.record_video.MainActivity" >
<!--显示视频预览的SurfaceView-->
<SurfaceView
android:id="@+id/sView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<Button
android:id="@+id/record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始录制"/>
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止录制"/>
</LinearLayout>
</RelativeLayout>
//代码块
package com.example.record_video;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.text.InputFilter.LengthFilter;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener{
//程序中的两个按钮
private Button record,stop;
//显示视频预览的SurfaceView
private SurfaceView sView;
//系统的视频文件
private File videoFile;
MediaRecorder mRecorder;
//记录是否正在就进行录制
private boolean isRecording=false;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得程序界面中的两个按钮
record=(Button) findViewById(R.id.record);
stop=(Button) findViewById(R.id.stop);
//让stop按钮不可用
stop.setEnabled(false);
//为两个按钮的单击事件绑定监听器
record.setOnClickListener(this);
stop.setOnClickListener(this);
//获取程序界面中的SurfaceView
sView=(SurfaceView)findViewById(R.id.sView);
//设置surface不需要自己维护缓冲区
sView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//设置分辨率
sView.getHolder().setFixedSize(320, 280);
//设置该组件让屏幕不会自动关闭
sView.getHolder().setKeepScreenOn(true);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.record:
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Toast.makeText(MainActivity.this, "SD卡不存在,请插入SD卡!",Toast.LENGTH_SHORT).show();
return;
}
//创建保存录制视频的视频文件
try {
videoFile=new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/myvideo.mp4");
//创MediaRecorder对象
mRecorder=new MediaRecorder();
mRecorder.reset();
//设置从麦克风采集声音
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置从摄像头采集图像
mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//设置视频文件的输出格式(必须在设置声音编码格式、图像编码格式之前设置)
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//设置声音编码的格式
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
//设置图像编码的格式(设置视频编码帧率)
mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mRecorder.setVideoSize(320, 280);
//设置编码位率
mRecorder.setVideoEncodingBitRate(5*1920*1080);
//每秒四帧
mRecorder.setVideoFrameRate(4);
mRecorder.setOutputFile(videoFile.getAbsolutePath());
//指定使用SurfaceView来预览视频
mRecorder.setPreviewDisplay(sView.getHolder().getSurface());
mRecorder.prepare();
//开始录制
mRecorder.start();
//让录制按钮不可用
record.setEnabled(false);
//让停止按钮可用
stop.setEnabled(true);
isRecording=true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.stop:
if(isRecording){
mRecorder.stop();
mRecorder.release();
mRecorder=null;
record.setEnabled(true);
stop.setEnabled(false);
}
break;
default:
break;
}
}
}
//配置权限
<!-- 授予该程序录制声音的权限-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 授予该程序使用摄像头的权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 授予使用外部存储器的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>