Samsung Galaxy SIII に問題があります。作成中のアプリでは、mediaRecorder を使用して、フロント カメラを使用してユーザーのビデオを記録します。ドキュメントやフォーラム全体を徹底的に調べ、SII や一般的なクラッシュに関する同様の投稿をいくつか見ましたが、残念ながらそれらの修正は機能しませんでした。カメラが記録するプロセスは次のとおりです --> 各デバイスの対応カメラ解像度をチェックする機能 (コードが提供されます) があり、それらが私たちの仕様 (現在は 480p 以下) を満たしているかどうかをチェックします。この基準を満たすものがある場合、その品質を使用して videoSize() (ビデオの録画サイズを設定するために Android によって提供される関数) を設定します。これは非常に些細なことのようで、ほぼすべてのデバイスで動作するようです。このコードは、テスト済みのいくつかの異なるデバイス (Galaxy S4 や Galaxy Stellar など) で機能します。しかし、なぜかSIIIは非常に難しくなっています。SIII で 720p 未満の解像度で録画すると、ビデオが破損し、マルチカラーの画面で再生されます (以下のリンクのスクリーン ショット)。それでは、ビデオを 720p+ で録画してみませんか? 残念ながら、携帯電話プロバイダーのネットワークを介して転送するのにそれほど大きなデータ負荷がかからないように、ビデオ サイズを小さくする必要があります。それでは、ビデオを 720p+ で録画してみませんか? 残念ながら、携帯電話プロバイダーのネットワークを介して転送するのにそれほど大きなデータ負荷がかからないように、ビデオ サイズを小さくする必要があります。それでは、ビデオを 720p+ で録画してみませんか? 残念ながら、携帯電話プロバイダーのネットワークを介して転送するのにそれほど大きなデータ負荷がかからないように、ビデオ サイズを小さくする必要があります。
私の質問は、720p よりも低い解像度でビデオを録画すると、使用する解像度がデバイスでサポートされている解像度のリストから抽出されている場合に、ビデオが破損するのはなぜですか?
これは、サポートされている解像度をデバイスから取得する機能です。
public Camera.Size getSupportedRecordingSizes() {
Camera.Size result = null;
Camera.Parameters params = camera.getParameters();
List<Size> sizes = params.getSupportedPictureSizes();
for (Size s : sizes) {
if (s.height < 481 && s.width < 721) {
if (result == null) {
result = s;
} else {
int resultVideoSize = result.width * result.height;
int newVideoSize = s.width * s.height;
if (newVideoSize > resultVideoSize) {
result = s;
}
}
}
}
if (!sizes.isEmpty() && result == null) {
Context context = getApplicationContext();
CharSequence text = "Used default first value";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
for (Size size : sizes) {
if (result == null) {
result = size;
}
int previousSize = result.width * result.height;
int newSize = size.width * size.height;
if (newSize < previousSize) {
result = size;
}
}
}
return (result);
}
これは、mediaRecorder のコードです (簡単にするために短縮されています)。
mediaRecorder = new MediaRecorder();
setCameraDisplayOrientaion();
//sets devices supported video size less than or equal to 480p (720x480 resolution).
Camera.Size vidSize = getSupportedRecordingSizes();
camera.unlock();
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(videoFormat);
mediaRecorder.setAudioEncoder(audioEncoder);
mediaRecorder.setVideoEncoder(videoEncoder);
mediaRecorder.setOutputFile(fullQuestionPath);
if (vidSize == null) {
mediaRecorder.setVideoSize(480, 360);
} else {
mediaRecorder.setVideoSize(vidSize.width, vidSize.height);
}
mediaRecorder.setVideoFrameRate(videoFrameRate);
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
//set the bitrate manually if possible.
if (android.os.Build.VERSION.SDK_INT > 7) {
mediaRecorder.setVideoEncodingBitRate(videoBitrate);
}
try {
mediaRecorder.prepare();
mediaRecorder.start();
}
catch (Exception e) {
Log.e(ResponseActivity.class
.toString(), e.getMessage());
releaseMediaRecorder();
}
この問題に関連する画像はこちらhttp://imgur.com/a/8F7Tb (以前に投稿できなくて申し訳ありません)。
これらの画像の順序は次のとおりです --> 1) 録画前に、プレビューが行われます。2) 録音、現在の録音/録音を示すプレビュー。3) 録画を停止します。録画とプレビューが停止しました。4) 再生、これが問題の場所です。この多色の破損した画像が表示されます。これは、デバイスから直接プルした場合と同じです。
編集: 注: CamcorderProfile を使用して、品質を低または高に設定することも試みました。QUALITY_HIGH に設定すると、録音が機能する 720p が強制されますが、QUALITY_LOW は、まったく逆の問題を抱えているにもかかわらず、私には機能しません。
編集:誰かが私を正しい方向に向けるアイデアを持っていますか?