android之MediaRecoder录制视频

使用MediaRecorderSurfaceView录制视频

手机一般都提供麦克风和摄像头硬件,而Android系统可以利用该硬件来录制视频了

——使用MediaRecorder录制视频的步骤:

 1)创建MediaRecorder对象

 2)调用MediaRecorder对象的setVideoSource()方法设置视频的来源,一般传入MediaRecorder.VideoSource.CAMERA参数指定录制来自摄像头的图像

 3)调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入MediaRecorder.AudioSource.MIC参数指定录制来自麦克风的声音

 4)调用MediaRecorder对象的setOutputFormat()设置录制音频文件的格式。

    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

 5)调用MediaRecorder对象的setVideoEncoder设置录制的视频的编码格式等。这些参数将可以控制所录制的视频的品质,文件的大小,一般视频品质越好,视频文件越大。

    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

 6)调用MediaRecorder对象的setAudioEncoder,setAudioEncodingBitRate(int)

   ,setAudioSamplingRate(int)设置录制的声音的编码格式,编码位率,采样率等。

   这些参数将可以控制所录制的声音的品质,文件的大小,一般声音品质越好,

   声音文件越大。

    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

 7)调用setVideoFrameRate(20)设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错。

 8)调用setVideoSize(176, 144);设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错。

 9)调用setPreviewDisplay(sv.getHolder().getSurface());这是视频的预览效果。

 10)调用MediaRecorder对象的setOutputFile(String)设置录制文件的保存的位置。

 11)调用MediaRecorderprepare()方法准备录制。

 12)调用MediaRecorder对象的start()方法开始录制。

 13)录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源。

 

注意:需要的权限:

    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.CAMERA"/>
代码编写:

1.布局:

<LinearLayout 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"
    android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始录制"
        android:onClick="start" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止录制"
        android:onClick="stop"/>
    <SurfaceView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sv"
        />

</LinearLayout>
MainActivity:

开始录制:

public void start(View view){
		
		//设置视频和音频的来源
		mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
		mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
		//
		mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
		//设置录制视频的编码格式
		mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
	    //设置音频的编码格式
		mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
		//设置视频的帧率:每秒切换图片的次数
		mediaRecorder.setVideoFrameRate(20);
		//视频的分辨率
		mediaRecorder.setVideoSize(176, 144);
		
		mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
		
		mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/111.mp4");
		try {
			mediaRecorder.prepare();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		mediaRecorder.start();
	}
停止录制:

public void start(View view){
		
		//设置视频和音频的来源
		mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
		mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
		//
		mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
		//设置录制视频的编码格式
		mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
	    //设置音频的编码格式
		mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
		//设置视频的帧率:每秒切换图片的次数
		mediaRecorder.setVideoFrameRate(20);
		//视频的分辨率
		mediaRecorder.setVideoSize(176, 144);
		
		mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
		
		mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/111.mp4");
		try {
			mediaRecorder.prepare();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		mediaRecorder.start();
	}
效果图:




你可能感兴趣的:(视频,SurfaceView,摄像头,MediaRecoder)