1

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 は、まったく逆の問題を抱えているにもかかわらず、私には機能しません。

編集:誰かが私を正しい方向に向けるアイデアを持っていますか?

4

0 に答える 0