需要一个代码,用于在Android 2.1中使用媒体记录器录制高质量的视频?

时间:2011-08-02 12:59:06

标签: android android-layout

我尝试以高质量录制视频,我使用媒体录制器类录制视频,示例代码如下所示,

 recorder = new MediaRecorder();

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

但质量不如使用默认相机拍摄的视频质量好。 我甚至不能在这里设置Camcorderprofile因为版本是2.1。视频看起来质量很差,有些是扭曲的。

示例视频...... http://videoxplode.com/player.php?id=808490

我需要一种方法来使用Android 2.1中的媒体录制器捕获视频。

如果有人知道意味着帮助我。

感谢。

1 个答案:

答案 0 :(得分:2)

最后我通过设置videEncodingBitRate,AudioEncodingBitRate,AudioSamplingRate等找到了在android 2.1中录制高质量视频的代码。使用此方法,您可以为视频设置任何想要提供高质量视频的属性。

有关设置高质量和低质量参数的信息,请参阅本页

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

我用基础版本android 2.1生成高质量视频的代码如下所示:`recorder = new MediaRecorder();         方法[]方法= 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);

`