Android:MediaRecorder 前置摄像头输出 144x176
Android: MediaRecorder front-facing camera outputs 144x176
我无法更改 MediaRecorder 输出视频的视频分辨率。
- 使用前置摄像头
- 表面视图
Activity
CamcorderProfile mProfile = CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH );
recorder.setCamera( camera );
recorder.setAudioSource( MediaRecorder.AudioSource.CAMCORDER );
recorder.setVideoSource( MediaRecorder.VideoSource.DEFAULT );
recorder.setOutputFormat( mProfile.fileFormat );
recorder.setAudioEncoder( mProfile.audioCodec );
recorder.setVideoEncoder( mProfile.videoCodec );
recorder.setOutputFile( tempFile.getPath() );
recorder.setOrientationHint( 270 );
recorder.setVideoFrameRate( mProfile.videoFrameRate );
recorder.setVideoEncodingBitRate( mProfile.videoBitRate );
recorder.setAudioEncodingBitRate( mProfile.audioBitRate );
recorder.setAudioChannels( mProfile.audioChannels );
recorder.setAudioSamplingRate( mProfile.audioSampleRate );
预览的质量 crystal 清晰且工作完美,但输出视频分辨率低且有颗粒感。
使用 recorder.setVideoSize( XXX, XXX );
给我这个错误:
E/MediaRecorder﹕ start failed: -19
如何让我的输出具有更高的分辨率?
我通过从相机预览中获取 width/height 参数解决了这个问题(至少现在)。
int videoWidth = camera.getParameters().getPreviewSize().width;
int videoHeight = camera.getParameters().getPreviewSize().height;
然后使用
recorder.setVideoSize( videoWidth, videoHeight );
这使得输出与相机预览相同。
编辑:
如果你保持正确的比例并保持在 500x500 左右,我认为你可以通过这样做获得任何支持的尺寸:
Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getSupportedPreviewSizes().get( 0 );
for ( Camera.Size s : parameters.getSupportedPreviewSizes() ) {
Log.e( "SIZE:", s.width + "x" + s.height );
if ( s.width > 500 ) // from high to low res
size = s;
}
Log.e( "SIZE", "Selected size: " + size.width + "x" + size + " (width still over 500)" );
parameters.setPreviewSize( size.width, size.height );
camera.setParameters( parameters );
输出
SIZE: 1920x1080
SIZE: 1440x1080
SIZE: 1280x960
SIZE: 1280x720
SIZE: 960x720
SIZE: 864x480
SIZE: 768x432
SIZE: 720x480
SIZE: 640x480
SIZE: 320x240
SIZE: 176x144
Selected size: 640x480 (width still over 500)
我无法更改 MediaRecorder 输出视频的视频分辨率。
- 使用前置摄像头
- 表面视图
Activity
CamcorderProfile mProfile = CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH );
recorder.setCamera( camera );
recorder.setAudioSource( MediaRecorder.AudioSource.CAMCORDER );
recorder.setVideoSource( MediaRecorder.VideoSource.DEFAULT );
recorder.setOutputFormat( mProfile.fileFormat );
recorder.setAudioEncoder( mProfile.audioCodec );
recorder.setVideoEncoder( mProfile.videoCodec );
recorder.setOutputFile( tempFile.getPath() );
recorder.setOrientationHint( 270 );
recorder.setVideoFrameRate( mProfile.videoFrameRate );
recorder.setVideoEncodingBitRate( mProfile.videoBitRate );
recorder.setAudioEncodingBitRate( mProfile.audioBitRate );
recorder.setAudioChannels( mProfile.audioChannels );
recorder.setAudioSamplingRate( mProfile.audioSampleRate );
预览的质量 crystal 清晰且工作完美,但输出视频分辨率低且有颗粒感。
使用 recorder.setVideoSize( XXX, XXX );
给我这个错误:
E/MediaRecorder﹕ start failed: -19
如何让我的输出具有更高的分辨率?
我通过从相机预览中获取 width/height 参数解决了这个问题(至少现在)。
int videoWidth = camera.getParameters().getPreviewSize().width;
int videoHeight = camera.getParameters().getPreviewSize().height;
然后使用
recorder.setVideoSize( videoWidth, videoHeight );
这使得输出与相机预览相同。
编辑:
如果你保持正确的比例并保持在 500x500 左右,我认为你可以通过这样做获得任何支持的尺寸:
Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getSupportedPreviewSizes().get( 0 );
for ( Camera.Size s : parameters.getSupportedPreviewSizes() ) {
Log.e( "SIZE:", s.width + "x" + s.height );
if ( s.width > 500 ) // from high to low res
size = s;
}
Log.e( "SIZE", "Selected size: " + size.width + "x" + size + " (width still over 500)" );
parameters.setPreviewSize( size.width, size.height );
camera.setParameters( parameters );
输出
SIZE: 1920x1080
SIZE: 1440x1080
SIZE: 1280x960
SIZE: 1280x720
SIZE: 960x720
SIZE: 864x480
SIZE: 768x432
SIZE: 720x480
SIZE: 640x480
SIZE: 320x240
SIZE: 176x144
Selected size: 640x480 (width still over 500)