Java 如何设置MediaRecorder以获得最佳视频质量效果?

Java 如何设置MediaRecorder以获得最佳视频质量效果?,java,android,encoding,camera,Java,Android,Encoding,Camera,伙计们,有人能告诉我如何在MediaRecorder中设置参数,以便在不考虑手机物理限制的情况下通过编码获得最佳的视频录制效果吗?或者,我对MediaRecorder的编码是否会导致视图小失真 如果你们中的一些人可能猜到了不清楚的参数,我实际上是在使用首选项设置一些参数。哪些参数可能有助于改进视频编码过程,例如:帧速率取决于您是否希望使用现有配置文件的API级别 没有配置文件: recorder.setVideoSize(640, 480); recorder.setVideoFrameRate

伙计们,有人能告诉我如何在
MediaRecorder
中设置参数,以便在不考虑手机物理限制的情况下通过编码获得最佳的视频录制效果吗?或者,我对
MediaRecorder
的编码是否会导致视图小失真


如果你们中的一些人可能猜到了不清楚的参数,我实际上是在使用首选项设置一些参数。哪些参数可能有助于改进视频编码过程,例如:帧速率取决于您是否希望使用现有配置文件的API级别

没有配置文件:

recorder.setVideoSize(640, 480);
recorder.setVideoFrameRate(16); //might be auto-determined due to lighting
recorder.setVideoEncodingBitRate(3000000);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);// MPEG_4_SP
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
或者如果您想使用现有的配置文件

CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(cpHigh);
请注意,您不能同时使用这两个选项,因为您将遇到错误或准备工作无法进行


由于并非所有Android API和/或设备都支持相同的值,因此您必须查询每个设备的最大值,或者查找在任何地方都适用的内容。

尽管这个问题很老,但我想指出我用于录制高清质量视频的组合

使用下面的代码组合实现高清视频质量

CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);                    
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);                        
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);                        
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);                    
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);                    
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);                    
mMediaRecorder.setVideoEncodingBitRate(cpHigh.videoBitRate);                    
mMediaRecorder.setVideoFrameRate(cpHigh.videoFrameRate);
int rotation = mWindowManager.getDefaultDisplay().getRotation();
int orientation = ORIENTATIONS.get(rotation + 90);
mMediaRecorder.setOrientationHint(orientation);
使用以下代码获取显示高度、显示宽度

DisplayMetrics metrics = new DisplayMetrics();      
mWindowManager.getDefaultDisplay().getMetrics(metrics);          
DISPLAY_WIDTH = metrics.widthPixels;
DISPLAY_HEIGHT = metrics.heightPixels;
定义方向,如下所示

public static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
    ORIENTATIONS.append(Surface.ROTATION_0, 90);
    ORIENTATIONS.append(Surface.ROTATION_90, 0);
    ORIENTATIONS.append(Surface.ROTATION_180, 270);
    ORIENTATIONS.append(Surface.ROTATION_270, 180);
}

希望能有帮助。

你在谈论质量吗?这取决于基础编解码器和摄像头的不同设备,但请尝试将视频编码器更改为H264并提高分辨率,看看这是否有帮助。@Ravi-hey只是为了确认我的代码的哪一部分真正处理编码和分辨率?您必须使用
void setVideoSize设置分辨率(int-width,int-height)
和MediaRecorder类实例上的编码
public void setVideoEncoder(int-video_-encoder)
。检查MediaRecorder文档操作说明:必须删除
setOutputFormat()
setVideoEncodingBitRate()
setAudioEncodingBitRate()
setVideoEncoder()
setAudioEncoder()
setAudioSamplingRate()
setVideoFrameRate()
是否内置了摄像机功能?chrome windows 7中没有定义(几乎没有)最新版本方向变量是什么?@Vodet请检查更新的代码。抱歉,响应延迟。问题是,您不知道设备是否支持提供的视频大小@
CamcorderProfile.QUALITY\u HIGH