我在应用程序中有一个功能,即使用前置摄像头录制一定长度的视频。
录音很好,但方向不正确。我已经搜索了很多时间,但很多问题只在图片上提到
与Camera和MediaRecorder相关的部分在下面提供
public void onCreate(Bundle savedInstanceState) {
// Some of the codes are not shown
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
recorder = new MediaRecorder();
holder = cameraView.getHolder();
}
private void initRecorder() {
recorder.setCamera(camera);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
CamcorderProfile cpLow = CamcorderProfile.get(1,
CamcorderProfile.QUALITY_LOW);
recorder.setProfile(cpLow);
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/youraudiofile.mp4";
recorder.setOutputFile(mFileName);
recorder.setMaxDuration(50000);
recorder.setMaxFileSize(5000000);
}
private void prepareRecorder() {
recorder.setPreviewDisplay(holder.getSurface());
try {
recorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
finish();
} catch (IOException e) {
e.printStackTrace();
finish();
}
}
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open(findFrontFacingCamera());
camera.unlock();
initRecorder();
prepareRecorder();
}
以上代码有效,在录制过程中我可以得到这样的屏幕 record http://img201.imageshack.us/img201/5264/3soh.jpg
相反,生成的视频将显示如下 result http://img690.imageshack.us/img690/6783/wy29.jpg
我该如何纠正?
答案 0 :(得分:2)
你可能应该使用它:
recorder.setOrientationHint(CamOrientationDegrees);
其中'CamOrientationDegrees'是设备在录制开始时的角度。我发现这适用于大多数设备,除了三星S3。 S3忽略它并根据设备方向定向视频,这使得播放时(例如)VLC(我仍然没有找到如何处理这个!)时产生的播放角度不正确。)
如果您没有在S3上使用它,它应该可以正常工作,假设您正确计算'CamOrientationDegrees',考虑到它正在使用前置摄像头(您可能需要稍微试验一下)
CamOrientationDegrees只应采用值0,90,180或270。
答案 1 :(得分:0)
即使设备处于纵向状态,也始终记录视频,就像设备处于横向一样。
有些方法可以对视频进行后期处理以重新定位(例如,ffmpeg
),虽然我没有尝试过这些,但它们是第三方库,而不是Android SDK的一部分。