私の以前の答えは完全ではありませんでした。さらにいじくり回した後、多くのデバイスは、ほとんどのデバイスのデフォルトであると考える設定に非常に敏感であることがわかりましたが、実際には、期待どおりに動作しない多くのデバイスがあり、クラッシュしてさまざまなエラーが発生しますインターネット上で見つけることができないコード。これらのエラー コードの範囲は -12、-19、-21 から -100 などで、これらのエラー コードのほとんどは、以下のヒントを使用して解決できます。以下に調査結果の短いリストを示します。
API 10を実行するHTC ChaChaは、H264 エンコーダーを使用して記録しません。MP4 や H263 を使用して動作するようにしましたが、ビデオはまだ完全に歪んでいます。その解決策は、576*432 を返す Google 独自の「最適なプレビュー」メソッドを使用する代わりに、カメラのプレビュー サイズを 640*480 に設定することでした。このモデルに例外を設定することで、完全に記録することができました。
H264 を使用して記録しようとすると、API 10を実行しているGalaxy Yがクラッシュします。これは MP4 エンコーダーを使用する例外を作成しました。修正しました。
MP4 を使用して記録しようとすると、API 10を実行しているGalaxy Aceがクラッシュし、エラー コード -12 が返されます。このデバイス モデルの H264 エンコーダーを使用して例外を追加すると、問題が解決します。
MP4 エンコーダーを使用して録音しようとすると、API 10を実行しているDesire Zがクラッシュします。エラー -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 パラメーターを確認してください。11 未満の API では CamcorderProfile クラスを使用しないことをお勧めします。これらのモデルの多くは、この高品質のインスタンスを使用するとクラッシュするためです。レコーダ ビデオ ファイルに変な緑色が表示されたり、半対角線が画面に表示されたりする場合は、プレビュー サイズをレコーダ ビデオ サイズと一致するように設定してみてください。
Camera.Parameters param = mCamera.getParameters();
param.setPreviewSize(width, height);
mCamera.setParameters( param );