Как контролировать высоту кадра и ширину захваченного видео: setVideoSize () не работает - PullRequest
2 голосов
/ 05 августа 2010

На Nexus One (например) приложение камеры может захватывать видео H.264 с разрешением 720x480 (настройка «Высокое» качество).Однако при использовании MediaRecorder API он, кажется, всегда захватывает с фиксированным размером кадра 320x240.

Я бы ожидал, что метод setVideoSize () будет управлять размером кадра (как в подготовительном фрагменте ниже), нопохоже, что он не имеет никакого эффекта (с помощью Android-пакета Froyo 2.2).

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setOutputFile(PATH_TO_FILE);
recorder.setVideoSize(720,480);
recorder.setPreviewDisplay(holder.getSurface());
recorder.prepare();

Обсуждения в списке разработчиков Android указывают на то, что это давняя проблема.Кто-нибудь может посоветовать, как можно контролировать размер кадра, или это вообще возможно с текущим API?

Ответы [ 3 ]

6 голосов
/ 19 октября 2010

Порядок важен. Попробуйте вызвать setVideoSize перед setVideoEncoder:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setVideoSize(720,480);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
recorder.setOutputFile(PATH_TO_FILE);
recorder.setPreviewDisplay(holder.getSurface());
recorder.prepare();
1 голос
/ 23 августа 2010

Recorder.setVideoSize, кажется, не работает API и, похоже, не работает.Но вы можете использовать предустановку «высокого качества», которая будет устанавливать формат вывода видео, кодировщики, размер и частоту кадров для вас.Я предполагаю, что это из-за аппаратного ускорения этих настроек?

На моем Nexus one это сработало:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
recorder.setOutputFile(PATH_TO_FILE);
recorder.setPreviewDisplay(holder.getSurface());
recorder.prepare();
0 голосов
/ 27 марта 2011

Эта функция - recorder.setProfile - действует с Android v. 2.2

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...