Качество видео в андроиде? - PullRequest
6 голосов
/ 21 июня 2011

Я использую класс медиа-рекордера для записи видео, я инициализирую рекордер со следующими свойствами,

    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

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

Если кто-нибудь знает меня, помогите мне. Спасибо

Ответы [ 4 ]

12 голосов
/ 05 августа 2011

Наконец я нашел код для записи видео высокого качества в Android 2.1, установив videEncodingBitRate, AudioEncodingBitRate, AudioSamplingRate ... и т. Д.Используя этот метод, вы можете установить свойства видео независимо от того, что вы хотите обеспечить видео высокого качества.

Для настройки параметров высокого качества и низкого качества см. Эту страницу,

http://www.andgps.com/20110410/camcorderprofile-predefined-camcorder-profile-settings-for-camcorder-applications

Код, который я использовал с базовой версией Android 2.1 для создания высококачественного видео, показан ниже,

    recorder = new MediaRecorder();
    Method[] methods = recorder.getClass().getMethods();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setVideoFrameRate(24);
    recorder.setVideoSize(720, 480);

    for (Method method: methods){
    try{
        if (method.getName().equals("setAudioChannels")){
                method.invoke(recorder, String.format("audio-param-number-of-channels=%d", 1));
        } 
        else if(method.getName().equals("setAudioEncodingBitRate")){
                method.invoke(recorder,12200);
            }
        else if(method.getName().equals("setVideoEncodingBitRate")){
            method.invoke(recorder, 3000000);
        }
        else if(method.getName().equals("setAudioSamplingRate")){
            method.invoke(recorder,8000);
        }
        else if(method.getName().equals("setVideoFrameRate")){
            method.invoke(recorder,24);
        }
    }catch (IllegalArgumentException e) {

        e.printStackTrace();
    } catch (IllegalAccessException e) {

        e.printStackTrace();
    } catch (InvocationTargetException e) {

        e.printStackTrace();
    }
    }

    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

`

4 голосов
/ 21 июня 2011

используйте следующие настройки для видеозаписей: -

private void cameraSettings()
{
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
    mediaRecorder.setVideoSize(width, height);
    mediaRecorder.setVideoFrameRate(videoFramePerSecond);
}

использовать videoFramePerSecond = 30 и width = 1280 и height = 720 .. Этот параметр вы можете сделать самостоятельно в соответствии с вашим требованием.

2 голосов
/ 23 мая 2014

попробуйте

mrec.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); mrec.setPreviewDisplay(surfaceHolder.getSurface());

0 голосов
/ 21 июня 2011

Попробуйте добавить эту строку

 recorder.setVideoSize(640,480); 

Или проверьте разрешение экрана, поддерживаемое вашим устройством, и установите соответствующее наилучшее значение.

...