Как изменить частоту кадров при использовании класса MediaRecorder - PullRequest
7 голосов
/ 23 марта 2011

Я пытаюсь записать видео, используя MediaRecorder Class.

Однако я обнаружил, что мне не удалось снизить частоту кадров видеопотока.

Я использую H.264 в качестве моего видеоEncoder и AAC как мой Audio Encoder (да, он поддерживается в API LEVEL 10 и выше, AKA Android 2.3.3+). Основной источник следующий:

recorder = new MediaRecorder(); 
recorder.setPreviewDisplay(surfaceHolder.getSurface());
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//set the Output Format
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);  
//set the Video Size
recorder.setVideoSize(176,144);   
//set the Frame rate
recorder.setVideoFrameRate(15);

//Set the Video Encoder
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 
//Set the Audio Encoder
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);          
recorder.setOutputFile(myRecAudioFile.getAbsolutePath());
recorder.prepare();
recorder.start();

Однако я получил отладочную информацию о том, что:

03-22 22:39:41.120: WARN/StagefrightRecorder(662): Intended video encoding frame rate (15 fps) is too small and will be set to (27 fps)

Достаточно странно, что я также получил сообщение об ошибке:

03-22 22:39:41.380: ERROR/VENC_ENC(662): Bitrate 192000

В конце я получил файл mp4 с частотой кадров почти 28 кадров в секунду.


Я также попытался использовать самый низкий профиль CamcorderProfile, равный

recorder = new MediaRecorder(); 
recorder.setPreviewDisplay(surfaceHolder.getSurface());
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

//replacement
CamcorderProfile cpLow = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
recorder.setProfile(cpLow);

recorder.setOutputFile(myRecAudioFile.getAbsolutePath());
recorder.prepare();  
recorder.start();

, и прокомментировать подробную конфигурацию рекордера.

Как книга Pro Android Media сказал, что я получил бы видео файл с 15fps.Тем не менее, я снова получил видеофайл со скоростью около 27 кадров в секунду.


Так как снизить частоту кадров видео? Я строю живую систему, поэтому понижение битрейта получилосьбыть очень важным для меня.Спасибо за ваше время!

1 Ответ

6 голосов
/ 08 мая 2011

Я тоже столкнулся с этим.Из документов (жирный шрифт):

На некоторых устройствах с автоматической частотой кадров устанавливается максимальная частота кадров, а не постоянная частота кадров. Фактическая частота кадров будет варьироваться в зависимости от условий освещения .

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

...