2010-10-21 3 views
11

Peut android MediaRecorder capturer la vidéo avec une résolution supérieure à 320*240?Problème avec android MediaRecorder setVideoSize()

Lorsque j'ai utilisé MediaRecorder::setVideoSize() pour définir la taille de la vidéo, la vidéo capturée était à la résolution 320*240. Ce qui est encore pire, les plus élevés ne peuvent pas obtenir une vidéo claire, ils étaient en quelque sorte verdâtre. (Encodeur utilisé est h263, le format est mpeg4)

version Android utilisée ici est 1.6

Pouvez-vous quelqu'un me aider?

Répondre

2

D'abord, vous allez vouloir déterminer ce que votre caméra prend en charge. Essayez:

  List<String> anti = params.getSupportedAntibanding(); 
    List<String> color = params.getSupportedColorEffects(); 
    List<String> focus = params.getSupportedFocusModes(); 
    List<String> flash = params.getSupportedFlashModes(); 
    List<Size> previewSize = params.getSupportedPreviewSizes(); 
    List<Size> sizes = params.getSupportedPictureSizes(); 
    List<Integer> frameRates = params.getSupportedPreviewFrameRates(); 
    List<Integer> pictureFormats = params.getSupportedPictureFormats(); 
    List<String> scene = params.getSupportedSceneModes(); 
    List<String> white = params.getSupportedWhiteBalance(); 

Ceci vous indiquera tous les paramètres pris en charge par la caméra. Deuxième Assurez-vous que vous initialisez votre MediaRecorder correctement voir la documentation de google pour la commande dans laquelle vous devez définir le MediaRecorder. En outre, si vos Camera.setPreviewSize et MediaRecorder.setVideoSize sont différents, cela peut provoquer un comportement étrange.

+0

J'espère juste qu'ils l'écrire (environ VideoSize et PreviewSize) sur leur documentation de l'API. – artsylar

+0

n'est pas setVideoSize() appelle simplement setPreviewSize()? Ce qui signifie, qu'ils auront toujours la même valeur à la fin tant que la taille de la vidéo est l'une des tailles d'aperçu pris en charge. – artsylar

+0

Qu'est-ce que c'est "params"? – Felix

7

J'ai eu un problème similaire à ce qui est décrit ici. Je me suis avéré que je devais restructurer mon code légèrement avant de pouvoir ajuster la taille de la vidéo.

L'important est que setVideoSize() soit appelé avant setVideoEncoder(). Je ne peux pas trouver cela dans la documentation, mais il a résolu mes problèmes avec la définition d'une résolution vidéo spécifique. Gardez également à l'esprit que setOutputFormat() doit être appelé avant setVideoSize().

Comme note de côté, la même chose est vraie pour setVideoFrameRate(). S'il n'est pas appelé avant setVideoEncoder(), il n'aura aucun effet.

Cela a été testé avec Android 2.3.3

Voici un exemple de code:

recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setVideoSize(640,480); 
recorder.setVideoFrameRate(30); 
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);  
+2

Cela me donne l'erreur 'E/MediaRecorder: démarrage échoué: -19'. –

+0

Cette réponse mérite plus d'upvotes – Bhargav