伙计们有人可以告诉我如何在MediaRecorder
中设置参数,以便通过编码获得最佳视频录制效果而不考虑手机的物理限制?或者是由于我对MediaRecorder
?
如果有些人猜测参数不清楚,我实际上是在使用偏好设置一些参数。我想念的参数有哪些可能有助于改善视频编码过程Ex:framerate
答案 0 :(得分:35)
根据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和/或设备都支持相同的值,您必须查询每台设备的最大值或查找适用于所有设备的内容。
答案 1 :(得分:2)
尽管问题已经很久了,但我想指出一下我用来录制高清质量视频的组合。
使用以下代码组合来获得高清质量的视频。
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);
Use below code to get the DISPLAY_HEIGHT,DISPLAY_WIDTH
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);
}
希望有帮助。