Android之MediaRecoder录制视频

来源:互联网 发布:微商发图软件 编辑:程序博客网 时间:2024/04/24 05:24

使用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 blocke.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 blocke.printStackTrace();}mediaRecorder.start();}
效果图:




0 0
原创粉丝点击