我以前的回答不完整。 經過更多的修補之後,我發現許多設備可能對設置非常敏感,您會認爲它是大多數設備的默認設置,但實際上有很多設備的行爲並不像您期望的那樣,並且會給您帶來很多不同您無法在互聯網上找到的錯誤代碼。這些錯誤代碼範圍從-12,-19,-21到-100等,並且大多數這些錯誤代碼可以通過使用下面的提示來解決。我會給下面發現的短名單:
的HTC ChaCha的運行API 10採用H264編碼器不記錄。我使用MP4和/或H263工作,但是視頻仍然完全失真。解決方案是將相機預覽尺寸設置爲640 * 480,而不是使用Google自己的「最佳預覽」方法,該方法返回576 * 432。通過設置這個模型的例外,我能夠完美地記錄它。
The Galaxy Y running API 10嘗試使用H264進行記錄時發生崩潰。對於使用MP4編碼器的人來說這是個例外。修復。
The Galaxy Ace running API 10嘗試使用MP4記錄時崩潰返回錯誤代碼-12。使用H264編碼器爲此設備模型添加例外可解決此問題。
The Desire Z running API 10嘗試使用MP4編碼器進行記錄時發生崩潰。給我一個錯誤-100(媒體服務器死亡)。使用H264修復了這個問題。
if(API >=11){
if(CamcorderProfile.hasProfile(mCamId, CamcorderProfile.QUALITY_480P)) {
Log.d(TAG, "API 11+ 480P");
mMediaRecorder.setProfile(CamcorderProfile.get(mCamId, CamcorderProfile.QUALITY_480P));
mMediaRecorder.setVideoSize(640, 480);
mMediaRecorder.setVideoEncodingBitRate(2000000);
} else {
Log.d(TAG, "API 11+ LOW");
mMediaRecorder.setProfile(CamcorderProfile.get(mCamId, CamcorderProfile.QUALITY_LOW));
}
} else if (API < 11 && !MODEL.equals("GT-S5830") && !MODEL.equals("vision")){
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
Log.d(TAG, "API 9 device, defaulting");
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoSize(640, 480);
mMediaRecorder.setVideoEncodingBitRate(2000000);
} else if ((API < 11) && MODEL.equals("GT-S5830") || MODEL.equals("vision")) {
//Galaxy Ace and Desire Z
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoSize(640, 480);
mMediaRecorder.setVideoEncodingBitRate(2000000);
}
我敢打賭,我會遇到更多的車型是在破解一個隱喻的痛苦,當我這樣做,我將它們添加到列表中。 綜上所述;如果遇到這些煩人的,幾乎無法解釋的錯誤代碼,請查看MediaRecorder參數。我建議不要將CamcorderProfile類用於11以下的任何API,因爲許多這些模型在使用此類高質量實例時會崩潰。 如果您的錄像機視頻文件顯示奇怪的綠色,穿過屏幕的半對角線等,請嘗試設置預覽大小以匹配錄像機的視頻大小。
Camera.Parameters param = mCamera.getParameters();
param.setPreviewSize(width, height);
mCamera.setParameters(param);
只是一個快速評論:2147483648是2^31。不知道爲什麼API設計者會使用這個最大值。它通常是簽名整數範圍的一部分。 – darrenp 2013-02-05 18:03:42