Android MediaRecorder makes a rotary video

I am trying to get MediaRecorder to work after an official example, and although I can make the file, it rotates 90 degrees clockwise ...

Now I'm trying to do this in portrait mode and really rotated the preview 90 degrees and blocked it in portrait mode ...

I have no idea how to fix this and get a portrait video, and tried many solutions related to this topic, all to no avail ...

the code:

public class CameraRecorder {

private Camera cam;
private MediaRecorder mMediaRecorder;
private CameraPreview mPreview;
private static Context mContext;

public CameraRecorder(CameraPreview preview, Context context){

    mPreview = preview;
    cam = mPreview.getCamera();
    //cam.getParameters().setRotation(0);
    mContext = context;

}

public boolean prep(){


    mMediaRecorder = new MediaRecorder();
    //mMediaRecorder.setOrientationHint(90);

    // Step 1: Unlock and set camera to MediaRecorder
    cam.unlock();
    mMediaRecorder.setCamera(cam);

    // Step 2: Set sources
    //mMediaRecorder.setAudioSource(mContext.openFileInput());
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);


    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    //mMediaRecorder.setVideoSize(mPreview.getMeasuredWidth(), mPreview.getMeasuredHeight());
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

    //mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));

    // Step 4: Set output file
    mMediaRecorder.setOutputFile(getOutputMediaFile().toString());

    // Step 5: Set the preview output
    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());

    // Step 6: Prepare configured MediaRecorder
    try {
        mMediaRecorder.prepare();
    } catch (IllegalStateException e) {
        Log.d("Exception", "IllegalStateException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    } catch (IOException e) {
        Log.d("Exception", "IOException preparing MediaRecorder: " + e.getMessage());
        releaseMediaRecorder();
        return false;
    } catch (Exception e) {
        Log.d("Exception", "Exception preparing MediaRecorder: " + e.getMessage());
        return false;
    }
    return true;

}

public static File getOutputMediaFile(){

    File mediaFile;

    mediaFile = new File(mContext.getCacheDir() + File.separator + "vid.mp4");

    return mediaFile;


}

public void releaseMediaRecorder(){

    if (mMediaRecorder != null) {
        mMediaRecorder.reset();   // clear recorder configuration
        mMediaRecorder.release(); // release the recorder object
        mMediaRecorder = null;
        cam.lock();           // lock camera for later use
    }

}

public void startRecording(){

    mMediaRecorder.start();

}

public void stopRecording(){

    try {
        mMediaRecorder.stop();  // stop the recording
        releaseMediaRecorder(); // release the MediaRecorder object
        cam.lock();
    } catch (Exception e) {
        Log.d("Exception","Exiting with exception: " + e.getMessage());
    }



}



}

- ( , " ", )... -, , ( , , )

, !

+3
1

. . .

+1

All Articles