Android Video verzerrt (MediaRecorder)

  • Antworten:0
CrushedGames
  • Forum-Beiträge: 1

26.12.2015, 21:05:22 via Website

Hallo, mein Problem:
Ich zeichne Videos mit dieser Klasse ohne Preview von einem Service aufgelöst auf.
Das funktioniert auch gut allerdings sind die Videos Nach oben und unten verzerrt.
Was kann ich tun?

Screenshot von einem Video als Beispiel (Der NFC Sticker in dem Video sollte genau Quadratisch sein!)
[Leider kann ich keine Links Posten]
Auf dem Bild sieht man einen eigentlich Quadratischen Sticker der Nach unten und oben gestreckt.
Ich mit das Video auch auf dem PC und anderen Mobile Playern angeschaut. Gleiches Ergebnis.

Die Klasse:

  import android.content.Context;
    import android.graphics.PixelFormat;
    import android.hardware.Camera;
    import android.media.CamcorderProfile;
    import android.media.MediaRecorder;
    import android.os.CountDownTimer;
    import android.os.Environment;
    import android.text.format.DateFormat;
    import android.view.Gravity;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.WindowManager;
    import android.widget.Toast;

    import java.io.File;
    import java.io.IOException;
    import java.util.Date;

    import de.cg.video.R;

    public class VideoRecorder implements SurfaceHolder.Callback{

        private WindowManager windowManager;
        private SurfaceView surfaceView;
        SurfaceHolder holder;

        private Camera camera = null;
        private MediaRecorder mediaRecorder = null;

        boolean debug,recording,minVideoLengthIsReached;
        float minVideoLength=1f; //IN SECONDS
        VideoService self;

        public VideoRecorder(boolean debug,VideoService self)
        {
            //AUTO CALLED IF CREATED
            this.debug=debug;
            this.self=self;
            windowManager = (WindowManager) self.getSystemService(Context.WINDOW_SERVICE);
            surfaceView = new SurfaceView(self.getApplicationContext());
            WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
                    1,1,
                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                    PixelFormat.TRANSLUCENT
            );
            layoutParams.gravity = Gravity.LEFT | Gravity.TOP;
            windowManager.addView(surfaceView, layoutParams);
            surfaceView.setZOrderOnTop(true);
            surfaceView.getHolder().addCallback(this);
        }

        public void onDestroy()
        {
            //MUST CALLED ON DESTROY
            surfaceView.getHolder().removeCallback(this);
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            this.holder = holder;
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
        }

        public void start()
        {
            if(!recording)recording=true;
                    else return;

            //START RECORDING
            if(debug) Toast.makeText(self.getApplicationContext(),"START RECORDING",Toast.LENGTH_SHORT).show();
            setupMediaRecorder();
            mediaRecorder.start();

            minVideoLengthIsReached=false;
            new CountDownTimer((int)minVideoLength*1000,(int)minVideoLength*1000) {

                @Override
                public void onTick(long millisUntilFinished) {

                }

                public void onFinish() {
                    minVideoLengthIsReached=true;
                }
            }.start();
        }

        public void setupMediaRecorder()
        {
            mediaRecorder = new MediaRecorder();
            camera = Camera.open();
            camera.unlock();
            mediaRecorder.setCamera(camera);
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
            mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            //SETTINGS
            mediaRecorder.setPreviewDisplay(holder.getSurface());
            mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
            mediaRecorder.setOrientationHint(90);
            //SETTINGS
            File file = new File(Environment.getExternalStorageDirectory()+"/Video/");
            if(!file.exists())
                file.mkdirs();
            mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/Video/Video " + DateFormat.format("yyyy-MM-dd_kk-mm-ss", new Date().getTime()) + ".mp4");
            try {
                mediaRecorder.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public void stop()
        {
            if(recording)recording=false;
            else return;

            if(minVideoLengthIsReached==false) {
                recording = true;
                return;
            }

            //STOP RECORDING
            if(debug) Toast.makeText(self.getApplicationContext(),"STOP RECORDING",Toast.LENGTH_SHORT).show();
            try {
                mediaRecorder.stop();
            }catch (Exception e)
            {
                e.printStackTrace();
                Toast.makeText(self.getApplicationContext(),self.getString(R.string.toast_RecordingError),Toast.LENGTH_LONG).show();
                recording=false;
            }
            resetRecorder();
        }

        private void resetRecorder()
        {
            //RESET RECORDER AFTER RECORDING
            mediaRecorder.reset();
            mediaRecorder.release();
            camera.release();
        }
    }

Antworten