2011-08-12 41 views
2

我想使用MediaRecorder創建一個短片,但我不知道如何使用它。如何使用MediaRecorder在Android上捕捉視頻?

在我的清單文件我增加了應用程序結束標籤之前這些權限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.RECORD_VIDEO" /> 
</application> 

我創建一個MediaRecorder與此代碼,當用戶按下一個按鈕:

private void startRecording() { 
    mRecorder = new MediaRecorder(); 
    mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
    mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mRecorder.setOutputFile("myvideo.mpeg4"); 

    try { 
     mRecorder.prepare(); 
    } catch (IOException e) { 

    } 
    mRecorder.start(); 
} 

但當我運行該代碼時,出現「強制關閉 - 應用程序意外停止,請重試」消息。我應該如何使用MediaRecorder以及如何調試我的應用程序以查看導致異常的原因?我需要將任何其他用戶權限添加到清單文件嗎?

+0

你能後的logcat的更多細節 –

回答

1

首先聲明許可

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.Camera"/> 

在manifest資源配置文件,然後

Camera cam=Camera.open(); 
cam.unlock(); 
if(recorder==null) 
recorder=new MediaRecorder(); 
recorder.setCamera(camera); 
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 
recorder.setOutputFile(fileName); 
recorder.setPreviewDisplay(holder.getSurface()); 
try{ 
    recorder.prepare(); 
    recorder.start(); 

} catch (IOException e) { 
    e.printStackTrace(); 

} 
-1

爲了宣傳您的應用程序依賴於有一個攝像頭,把標籤的清單文件:

<manifest ... > 
<uses-feature android:name="android.hardware.camera" 
       android:required="true" /> 
... 

記錄與攝像頭的視頻應用

static final int REQUEST_VIDEO_CAPTURE = 1; 

private void dispatchTakeVideoIntent() { 
     Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { 
      startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); 
     } 
    } 

//查看視頻

@Override 
     protected void onActivityResult(int requestCode, int resultCode,Intent intent) { 
    if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) 
    { 
     Uri videoUri = intent.getData(); 
     mVideoView.setVideoURI(videoUri); 
    } 
} 
+0

這不回答您不使用MediaRecorder的問題 – Vodet