1. 程式人生 > >Android 錄制視頻

Android 錄制視頻

android private package import public

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;

@Overridepublic 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"/>

技術分享


Android 錄制視頻