Android MediaRecorder会用绿线产生损坏的视频
我试图在Android中使用MediaRecorder将视频录制功能添加到我的应用程序,但生成的视频看起来像绿线(音频很好)损坏。 以下代码是我用来初始化MediaRecorder对象的代码:
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setOutputFile(Utility.CAPTURE_VIDEO_FILENAME);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
mMediaRecorder.setMaxDuration(60000);
mMediaRecorder.setVideoFrameRate(20);
mMediaRecorder.setMaxFileSize(5000000);
mMediaRecorder.setVideoSize(352, 288);
mMediaRecorder.setPreviewDisplay(mPreview.mHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();
我已经在这里和这里看过这些建议,但他们似乎没有帮助我的事业。 不过,我认为这可能与不正确的视频尺寸有关。 所以我的问题是:使用API级别7时,有没有什么好方法可以获得兼容的视频尺寸? 据我所知,我可以使用CamcorderProfile如果我在API级别8,但没有在7。
设备中的视频尺寸等于预览尺寸。 您必须首先检查您设置的视频尺寸是否可用。 不同设备中的视频尺寸可能不同,因此,首先使用getSupportedPreviewSizes()检查可用的预览尺寸,然后设置视频尺寸。如果视频尺寸不正确,绿色线条将会出现。
检查你的代码setRecordingHint(true);
http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRecordingHint(boolean)
此参数的设置会导致少数设备上的视频出现绿色毛刺。
您可以更改这些选项并查看质量如何变化:
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
以下代码将为您录制视频:
MediaRecorder录像机;
private void initRecorder() {
recorder = new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
recorder.setOrientationHint(90);//plays the video correctly
}else{
recorder.setOrientationHint(180);
}
recorder.setOutputFile("/sdcard/MediaAppVideos/"+randomNum+".mp4");
}
private void prepareRecorder() {
recorder.setPreviewDisplay(holder.getSurface());
try {
recorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
try {
if (recording) {
recorder.stop();
recording = false;
}
recorder.release();
// finish();
} catch (Exception e) {
}
}
链接地址: http://www.djcxy.com/p/31141.html
上一篇: Android MediaRecorder produces corrupt video with green lines