2010-08-05 60 views
2

在Nexus One上(例如),相機應用程序能夠捕獲720x480的H.264視頻(「高」質量設置)。但是,使用MediaRecorder API時,它似乎始終以320x240的固定幀大小捕獲。我期望setVideoSize()方法來控制幀大小(如下面的準備片段),但它似乎沒有效果(使用Froyo 2.2 Android SDK)。如何控制捕獲的視頻的幀高和寬度:setVideoSize()不起作用

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
recorder.setOutputFile(PATH_TO_FILE); 
recorder.setVideoSize(720,480); 
recorder.setPreviewDisplay(holder.getSurface()); 
recorder.prepare(); 

Discussions on the android developers list似乎表明這是一個長期存在的問題。任何人都可以建議如何控制幀大小,或者可以使用當前的API嗎?

回答

1

recorder.setVideoSize似乎是一個破損的API,似乎沒有工作。 但是,您可以使用「高品質」預設,爲您設置視頻輸出格式,編碼器,尺寸和幀速率。 我假設這是因爲這些設置是硬件加速?

在我的Nexus one這工作:

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 
recorder.setOutputFile(PATH_TO_FILE); 
recorder.setPreviewDisplay(holder.getSurface()); 
recorder.prepare(); 
+0

它是一個令人失望的是,目前只有QUALITY_HIGH和QUALITY_LOW – 2011-01-06 19:38:16

+0

實際上,setProfile()會。只是調用相同的setVideoSize()函數,所以我們不能說setVideoSize()不起作用。 – artsylar 2011-08-19 03:27:22

+1

我猜setProfile()只是爲你正確的順序。 – dzeikei 2012-01-04 01:31:31

5

的順序很重要。 setVideoEncoder之前嘗試調用setVideoSize:

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setVideoSize(720,480); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
recorder.setOutputFile(PATH_TO_FILE); 
recorder.setPreviewDisplay(holder.getSurface()); 
recorder.prepare(); 
+2

這是正確的,但是最好是在setoutput格式之後setvideosize但在setvideoencoder之前 – zviadm 2011-10-09 19:42:41

-1

此功能 - recorder.setProfile - 是由於Android V有效2.2

相關問題