Проблема с Android MediaRecorder setVideoSize () - PullRequest
11 голосов
/ 21 октября 2010

Может ли Android MediaRecorder захватывать видео с разрешением выше 320*240?

Когда я использовал MediaRecorder::setVideoSize() для установки размера видео, все захваченное видео было с разрешением 320*240. Что еще хуже, высшие не могут получить четкое видео, они были как-то зеленоватыми. (используется кодировщик h263, формат mpeg4)

Используемая здесь версия Android 1.6

Не могли бы вы кому-нибудь помочь мне?

Ответы [ 2 ]

8 голосов
/ 04 ноября 2011

У меня была проблема, похожая на описанную здесь. Я выяснил, что мне пришлось немного реструктурировать свой код, прежде чем я смог настроить размер видео.

Важно то, что setVideoSize () вызывается перед setVideoEncoder (). Я не могу найти это в документации, однако это решило мои проблемы с настройкой конкретного разрешения видео. Также имейте в виду, что setOutputFormat () должен вызываться перед setVideoSize ().

Что касается примечания стороны, то же самое верно для setVideoFrameRate (). Если он не вызывается до setVideoEncoder (), это не окажет никакого влияния.

Это было проверено с Android 2.3.3

Вот пример кода:

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);       
3 голосов
/ 03 августа 2011

Сначала вы захотите определить, что поддерживает ваша камера. Попробуйте:

            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();

Это скажет вам все поддерживаемые параметры камеры. Во-вторых, убедитесь, что вы инициализируете ваш MediaRecorder правильно, смотрите документацию Google для порядка, в котором вам нужно установить MediaRecorder. Кроме того, если ваши Camera.setPreviewSize и MediaRecorder.setVideoSize отличаются, это может вызвать странное поведение.

...