Android - 录制视频错误定位

时间:2013-11-10 11:49:33

标签: android

我在应用程序中有一个功能,即使用前置摄像头录制一定长度的视频。

录音很好,但方向不正确。我已经搜索了很多时间,但很多问题只在图片上提到

与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

我该如何纠正?

2 个答案:

答案 0 :(得分:2)

你可能应该使用它:

recorder.setOrientationHint(CamOrientationDegrees);

其中'CamOrientationDegrees'是设备在录制开始时的角度。我发现这适用于大多数设备,除了三星S3。 S3忽略它并根据设备方向定向视频,这使得播放时(例如)VLC(我仍然没有找到如何处理这个!)时产生的播放角度不正确。)

如果您没有在S3上使用它,它应该可以正常工作,假设您正确计算'CamOrientationDegrees',考虑到它正在使用前置摄像头(您可能需要稍微试验一下)

CamOrientationDegrees只应采用值0,90,180或270。

答案 1 :(得分:0)

即使设备处于纵向状态,也始终记录视频,就像设备处于横向一样。

有些方法可以对视频进行后期处理以重新定位(例如,ffmpeg),虽然我没有尝试过这些,但它们是第三方库,而不是Android SDK的一部分。