Android 录制视频

Activity代码:

package eoe.demo.Media;

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.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class VideoActivity extends Activity {

private File myRecAudioFile;
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Button buttonStart;
private Button buttonStop;
private File dir;
private MediaRecorder recorder;

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.video);
  mSurfaceView = (SurfaceView) findViewById(R.id.videoView);
  mSurfaceHolder = mSurfaceView.getHolder();
  mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  buttonStart=(Button)findViewById(R.id.start);
  buttonStop=(Button)findViewById(R.id.stop);
  File defaultDir = Environment.getExternalStorageDirectory();
  String path = defaultDir.getAbsolutePath()+File.separator+"V"+File.separator;
//创建文件夹存放视频
  dir = new File(path);
  if(!dir.exists()){
    dir.mkdir();
  }
  recorder = new MediaRecorder();

  buttonStart.setOnClickListener(new OnClickListener() {
@Override
  public void onClick(View v) {
    recorder();
  }
});

buttonStop.setOnClickListener(new OnClickListener() {
@Override
   public void onClick(View v) {
    recorder.stop();
    recorder.reset();
    recorder.release();
    recorder=null;
   }
  });
}

public void recorder() {
try {
  myRecAudioFile = File.createTempFile("video", ".3gp",dir);//创建临时文件
  recorder.setPreviewDisplay(mSurfaceHolder.getSurface());//预览
  recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//视频源
  recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录音源为麦克风
  recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//输出格式为3gp
  recorder.setVideoSize(800, 480);//视频尺寸
  recorder.setVideoFrameRate(15);//视频帧频率
  recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);//视频编码
  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码
  recorder.setMaxDuration(10000);//最大期限
  recorder.setOutputFile(myRecAudioFile.getAbsolutePath());//保存路径
  recorder.prepare();
  recorder.start();
} catch (IOException e) {
  e.printStackTrace();
    }
   }
} 

布局代码:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent">
    <SurfaceView android:id="@+id/videoView"
      android:visibility="visible"
      android:layout_width="320px"
      android:layout_height="240px">
    </SurfaceView>

    <RelativeLayout
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
    <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="录制"
      android:id="@+id/start"/>
    <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_toRightOf="@id/start"
      android:text="停止"
      android:id="@+id/stop"/>
    </RelativeLayout>
    </LinearLayout> 

AndroidManifest.xml:

   <!-- 授予该程序录制声音的权限 -->
    <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"/>

 

posted @ 2014-12-31 09:48  星辰之力  阅读(290)  评论(0编辑  收藏  举报