標籤:android錄製視頻 使用mediarecorder錄製視頻 mediarecorder用法舉例 android錄影機
MediaRecorder除了可以用於錄製音頻,還可用於錄製視頻。關於MediaRecorder的詳解大家可以參考《Android開發之MediaRecorder類詳解》。使用MediaRecorder錄製視頻與錄製音訊步驟基本相同。只是錄製視頻時不僅需要採集聲音,還需要採集映像。為了讓MediaRecorder錄製時採集映像,應該在調用setAudioSource(int audio source)方法時再調用setVideoSource(int video source)方法來設定映像來源。
除此之外,還需在調用setOutputFormat()設定輸出檔案格式之後進行如下步驟:
1) 調用MediaRecorder 對象的setVideoEncoder()、setVideoEncodingBitRate(intbitRate)、setVideoFrameRate設定所錄製的視頻的編碼格式、編碼位率、每秒多少幀等,這些參數將可以控制所錄製的視頻的品質、檔案的大小。一般來說,視頻品質越好,視頻檔案越大。
2) 調用 MediaRecorder的setPreviewDisplay(Surfacesv)方法設定使用哪個SurfaceView來顯示視頻預覽。
剩下的代碼則與錄製音頻的代碼基本相同:
執行個體使用MediaRecorder錄製視頻:
1.RecordVideo類:
package com.jph.recordvideo;import java.io.File;import android.app.Activity;import android.content.pm.ActivityInfo;import android.graphics.PixelFormat;import android.media.MediaRecorder;import android.os.Bundle;import android.os.Environment;import android.view.SurfaceView;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.ImageButton;import android.widget.Toast;/** * Description: * 使用MediaRecorder錄製視頻 * @author jph * Date:2014.08.14 * <br/> */public class RecordVideo extends Activityimplements OnClickListener{// 程式中的兩個按鈕ImageButton record , stop;// 系統的視頻檔案File videoFile ;MediaRecorder mRecorder;// 顯示視頻預覽的SurfaceView SurfaceView sView; // 記錄是否進行中錄製 private boolean isRecording = false; @Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// 去掉標題列 ,必須放在setContentView之前requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.main); // 設定橫屏顯示 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); // 設定全屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 選擇支援半透明模式,在有surfaceview的activity中使用。 getWindow().setFormat(PixelFormat.TRANSLUCENT); // 擷取程式介面中的兩個按鈕record = (ImageButton) findViewById(R.id.record);stop = (ImageButton) findViewById(R.id.stop);// 讓stop按鈕不可用。stop.setEnabled(false);// 為兩個按鈕的單擊事件綁定監聽器record.setOnClickListener(this);stop.setOnClickListener(this);// 擷取程式介面中的SurfaceViewsView = (SurfaceView) this.findViewById(R.id.sView); // 設定解析度 sView.getHolder().setFixedSize(1280, 720); // 設定該組件讓螢幕不會自動關閉 sView.getHolder().setKeepScreenOn(true);}@Overridepublic void onClick(View source){switch (source.getId()){// 單擊錄製按鈕case R.id.record:if (!Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){Toast.makeText(RecordVideo.this, "SD卡不存在,請插入SD卡!", Toast.LENGTH_SHORT).show();return;}try{// 建立儲存錄製視頻的視頻檔案videoFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/testvideo.3gp");// 建立MediaPlayer對象mRecorder = new MediaRecorder();mRecorder.reset();// 設定從麥克風採集聲音(或來自錄影機的聲音AudioSource.CAMCORDER)mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 設定從網路攝影機採集映像mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);// 設定視頻檔案的輸出格式// 必須在設定聲音編碼格式、映像編碼格式之前設定mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 設定聲音編碼的格式mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 設定映像編碼的格式mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);mRecorder.setVideoSize(1280, 720);// 每秒 4幀mRecorder.setVideoFrameRate(20);mRecorder.setOutputFile(videoFile.getAbsolutePath());// 指定使用SurfaceView來預覽視頻mRecorder.setPreviewDisplay(sView.getHolder().getSurface()); //①mRecorder.prepare();// 開始錄製mRecorder.start();System.out.println("---recording---");// 讓record按鈕不可用。record.setEnabled(false);// 讓stop按鈕可用。stop.setEnabled(true);isRecording = true;}catch (Exception e){e.printStackTrace();}break;// 單擊停止按鈕case R.id.stop:// 如果進行中錄製if (isRecording){// 停止錄製mRecorder.stop();// 釋放資源mRecorder.release();mRecorder = null;// 讓record按鈕可用。record.setEnabled(true);// 讓stop按鈕不可用。stop.setEnabled(false);}break;}}}
2.布局檔案:
<?xml version="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><!-- 顯示視頻預覽的SurfaceView --><SurfaceViewandroid:id="@+id/sView"android:layout_width="match_parent"android:layout_height="match_parent" /><LinearLayoutandroid:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"><ImageButtonandroid:id="@+id/record"android:layout_width="66dp"android:layout_height="66dp"android:scaleType="fitCenter"android:src="@drawable/recored" /><ImageButtonandroid:id="@+id/stop"android:layout_width="66dp"android:layout_height="66dp"android:scaleType="fitCenter"android:src="@drawable/stop" /></LinearLayout></RelativeLayout>
3.為程式添加相應許可權:
<!-- 授予該程式錄製聲音的許可權 --><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"/>
4.程式運行預覽: