4 Stimmen

Android MediaRecorder produziert beschädigte Videos mit grünen Linien

Ich versuche, meiner App mit MediaRecorder in Android eine Videoaufzeichnungsfunktion hinzuzufügen, aber das resultierende Video sieht mit grünen Linien beschädigt aus (Audio ist in Ordnung). Der folgende Code ist, was ich verwenden, um das MediaRecorder-Objekt zu initialisieren:

mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setOutputFile(Utility.CAPTURE_VIDEO_FILENAME);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
mMediaRecorder.setMaxDuration(60000);
mMediaRecorder.setVideoFrameRate(20);
mMediaRecorder.setMaxFileSize(5000000);
mMediaRecorder.setVideoSize(352, 288);
mMediaRecorder.setPreviewDisplay(mPreview.mHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();

Ich habe mir die Vorschläge bereits angesehen aquí y aquí aber sie scheinen meiner Sache nicht zu helfen. Ich denke jedoch, dass es etwas mit der falschen Videogröße zu tun haben könnte. Meine Frage lautet also: Gibt es eine gute Möglichkeit, kompatible Videogrößen zu erhalten, wenn ich API-Level 7 verwende? Soweit ich weiß, kann ich CamcorderProfile verwenden, wenn ich API-Stufe 8 verwende, aber nicht in Stufe 7.

1voto

Amrendra Punkte 2009

Die Videogrößen auf einem Gerät entsprechen den Vorschaugrößen. Sie müssen zunächst prüfen, ob die von Ihnen eingestellte Videogröße verfügbar ist oder nicht. Die Videogrößen auf verschiedenen Geräten können unterschiedlich sein, also prüfen Sie zuerst die verfügbaren Vorschaugrößen mit getSupportedPreviewSizes () und stellen Sie dann die Videogröße ein. Wenn die Videogröße nicht korrekt ist, werden grüne Linien angezeigt.

1voto

TharakaNirmana Punkte 10005

Sie können diese Optionen ändern und sehen, wie sich die Qualität verändert:

recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

Der folgende Code wird auf jeden Fall ein Video für Sie aufnehmen:

MediaRecorder Rekorder;

private void initRecorder() {

    recorder = new MediaRecorder(); 
        recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

        if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
            recorder.setOrientationHint(90);//plays the video correctly
        }else{
            recorder.setOrientationHint(180);
        }

        recorder.setOutputFile("/sdcard/MediaAppVideos/"+randomNum+".mp4");

    }

private void prepareRecorder() {
        recorder.setPreviewDisplay(holder.getSurface());
        try {
            recorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();

        } catch (IOException e) {
            e.printStackTrace();

        }
    }

public void surfaceDestroyed(SurfaceHolder holder) {
        try {
            if (recording) {
                recorder.stop();
                recording = false;
            }
            recorder.release();
            // finish();
        } catch (Exception e) {

        }

    }

1voto

user2143600 Punkte 61

Überprüfen Sie Ihren Code auf setRecordingHint(true);

http://developer.Android.com/reference/Android/hardware/Camera.Parameters.html#setRecordingHint(boolean)

Die Einstellung dieses Parameters verursacht bei einigen wenigen Geräten grüne Störungen im Video.

0voto

AMRAY Punkte 21

Bei mir traten grüne Flecken nur auf einem Gerät bei 1920x1080 auf. Bei höheren oder niedrigeren Auflösungen ist das aufgezeichnete Video in Ordnung. Wenn ich die Vorschaugröße auf die gleiche Größe wie die Videogröße einstelle, sehe ich keine grünen Streifen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X