android摄像头和预览方向-如何解耦

android摄像头和预览方向-如何解耦,android,android-camera,android-orientation,Android,Android Camera,Android Orientation,我只是通过安卓系统玩。我的问题是关于方向。如果以纵向模式启动,录制的视频方向错误。 在我的例子中,我稍微修改了预览视图的布局-现在它有一些错误/任意的纵横比,但录制的视频也有相同(错误)的纵横比 为什么预览和实际录制是如何耦合的?有没有办法将其解耦:录制的视频应该只录制相机提供的内容 那么,如何创建一个在录制时忽略方向(或仅使用方向将其存储在元数据中)但在预览时反映方向的相机应用程序(无需操作-通过旋转手机,肖像变成了风景)。是否有具有正确旋转处理的摄像头应用程序的示例?如果您想在Android

我只是通过安卓系统玩。我的问题是关于方向。如果以纵向模式启动,录制的视频方向错误。 在我的例子中,我稍微修改了预览视图的布局-现在它有一些错误/任意的纵横比,但录制的视频也有相同(错误)的纵横比

为什么预览和实际录制是如何耦合的?有没有办法将其解耦:录制的视频应该只录制相机提供的内容


那么,如何创建一个在录制时忽略方向(或仅使用方向将其存储在元数据中)但在预览时反映方向的相机应用程序(无需操作-通过旋转手机,肖像变成了风景)。是否有具有正确旋转处理的摄像头应用程序的示例?

如果您想在Android上录制与默认方向不同的视频,您需要使用MediaRecorder的方法

摄影机预览方向(由摄影机的方法设置)和录制方向没有耦合,除此之外,它们都默认沿设备的长边定向

如果更改应用程序的方向时远离横向,则需要单独调用相机的setDisplayOrientation以正确调整预览,并调用Media Recorder的setOrientationHint以更改录制方向


Android的默认摄像头应用程序(在中提供)可以正确处理所有这些问题。

我不知道可以在纵向模式下录制视频,但我很高兴有人能证明我错了。视频标题中将包含一个标志,指示播放机应更改方向(例如,顺时针旋转90度),但并非所有播放机都会使用该标志。问题是预览和录制的视频旋转了90°。我只希望预览显示镜头看到的东西,录制的视频也应该“只”显示镜头看到的东西。我不想得到任何方向处理.thx的提示,但我有一个问题:这似乎是一种错误?!但是用那里的代码就可以了,那里没有bug。默认情况下,相机以横向方向发送图像。但如果用户界面是纵向的,则活动的坐标系将从相机坐标系旋转90度。也就是说,应用程序的(0,0)在纵向方向为左上角,而相机的(0,0)在横向方向为左上角。因此,如果在应用程序坐标系中绘制相机预览,它将旋转错误。这就是为什么存在setDisplayOrientation调用,以补偿这种差异。
            mSession = SessionBuilder.getInstance()
                .setContext(getApplicationContext())
                .setAudioEncoder(SessionBuilder.AUDIO_AAC)
                .setAudioQuality(new AudioQuality(8000, 16000))             
                .setVideoEncoder(SessionBuilder.VIDEO_H264)
                .setSurfaceView(mSurfaceView).setPreviewOrientation(90)
                .setCallback(this).build();