22

Lorsque j'écris une vidéo par MediaRecorder, il enregistre toujours en mode paysage, quelle que soit l'orientation réelle de l'appareil. Comment forcer MediaRecorder/Camera à utiliser une orientation réelle? Référez-vous à Camera.Parameters.setRotation() pour plus d'informations.comment changer l'orientation de la vidéo dans MediaRecorder à portrait

+0

Qu'en est-set 'android: screenOrientation =" paysage "' de votre CameraActivity dans le manifeste – IgniteCoders

Répondre

16

Il ya un exemple ici et au lieu d'appeler setRotation (rotation) essayez d'appeler mediaRecorder.setOrientationHint (rotation) lors de l'enregistrement vidéo.

+7

'mediaRecorder.setOrientationHint' ne change que l'orientation de la vidéo de sortie, pas l'orientation de l'aperçu. – Cat

+3

En outre, 'setOrientationHint' ne fonctionne que pour les flux MPEG4. D'autres (comme MPEG2TS) n'implémentent pas cette option (elle est silencieusement ignorée). – Lekensteyn

+0

@Chat vous avez raison, aucune idée sur la façon de résoudre ce problème sur l'aperçu? !! –

6

Jetez un oeil à la documentation ici

http://developer.android.com/guide/topics/media/camera.html#capture-video

Le piège le plus commun avec cet exemple est le setCamera(). VOUS DEVEZ RÉGLER IMMÉDIATEMENT LA CAMÉRA APRÈS AVOIR EFFECTUÉ LE MediaRecorder sinon vous obtiendrez des erreurs.

Camera mCamera = getCameraInstance(); 
    // adjust the camera the way you need 
    mCamera.setDisplayOrientation(90); 

    MediaRecorder recorder = new MediaRecorder(); 

    recorder.setCamera(mCamera); 

    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 
    recorder.setOutputFile(filePath); 

    // add any limits 
    recorder.setMaxDuration(50000); // 50 seconds 
    recorder.setMaxFileSize(5000000); // Approximately 5 megabytes 

J'espère que cela aide quelqu'un. Bonne chance!!

+1

ce code échouera SAUF si vous appelez 'mCamera.unlock();' avant 'recorder.setCamera (mCamera)': http://developer.android.com/reference/android/hardware/Camera.html#unlock() – Cat

3

J'ai déjà rencontré ce problème auparavant. J'ai trouvé que vous pouvez utiliser la fonction setOrientationHint (API 9). Appelez cette fonction avant d'appeler MediaRecorder.prepare(). Vous pouvez configurer le degré d'orientation de votre vidéo de sortie.

J'espère que ça aide, bonne chance!

+0

sympa ... fonctionne bien! Merci! – Antonio

+2

ne fait pas tourner la vidéo pour corriger l'orientation, c'est juste un drapeau qui est mis à la vidéo que certains mediaplayers comme vlc ignorent. – Nima

6

Ajoutez les deux lignes de code suivantes:

Camera.setDisplayOrientation(90); // use for set the orientation of the preview 
mRecorder.setOrientationHint(90); // use for set the orientation of output video 

avant:

mRecorder.setCamera(mCamera); 

Exemple complet:

mRecorder = new MediaRecorder(); 

// Both are required for Portrait Video 
mCamera.setDisplayOrientation(90); 
mRecorder.setOrientationHint(90); 

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

// Step 2: Set sources 
mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 

// Step 3: Set a CamcorderProfile (requires API Level 8 or higher) 
mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_480P)); 
1
mMediaRecorder = new MediaRecorder(); 
     mServiceCamera.setDisplayOrientation(90); 
     mMediaRecorder.setOrientationHint(90); 
     mServiceCamera.unlock(); 
     mMediaRecorder.setCamera(mServiceCamera); 
     mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 
Questions connexes