Как изменить частоту кадров при использовании класса MediaRecorder

Я пытаюсь записывать видео с помощью класса MediaRecorder.

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

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

Я пытаюсь записывать видео с помощью класса MediaRecorder.

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

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

Я пытаюсь записывать видео с помощью класса MediaRecorder.

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

Я использую H.264 в качестве кодировщика видео и AAC в качестве кодировщика звука (да, он поддерживается в 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 , я бы получил видео файл со скоростью 15 кадров в секунду. Тем не менее, я снова получил видеофайл со скоростью около 27 кадров в секунду.


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

7
задан Jonas 15 August 2011 в 20:58
поделиться