0

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

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

下面提供与 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();

}   

上面的代码有效,在录制过程中我可以得到这样的屏幕 记录

相反,生成的视频将像这样显示 结果

我该如何纠正?

4

2 回答 2

2

你可能应该使用这个:

recorder.setOrientationHint(CamOrientationDegrees);

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

如果您不在 S3 上使用它,它应该可以正常工作,前提是您正确计算“CamOrientationDegrees”,同时考虑到它使用前置摄像头的事实(您可能需要尝试一下)。

CamOrientationDegrees 只能取值 0、90、180 或 270。

于 2013-11-26T11:53:17.643 回答
0

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

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

于 2013-11-10T13:33:16.263 回答