【问题标题】:android camera and preview orientation - how to decoupleandroid相机和预览方向 - 如何解耦
【发布时间】:2013-07-21 04:28:58
【问题描述】:

我刚刚通过 android camera tutorial 玩过。我的问题是关于方向。如果我以纵向模式开始,录制的视频方向错误。 在我的情况下,我稍微修改了预览视图的布局 - 现在它有一些错误/任意的纵横比,但录制的视频也有相同(错误)的纵横比!?

预览和实际录制为何以及如何耦合?有没有办法解耦:录制的视频应该只记录相机传递的内容。

那么如何创建一个相机应用程序,它在录制时忽略方向(或仅使用方向将其存储在元数据中)但在预览中反映它(无事可做 - 通过旋转手机,纵向变成横向)。是否有任何具有正确旋转处理的相机应用示例?

【问题讨论】:

  • 我不知道可以以纵向模式录制视频,但我很乐意有人证明我错了。视频将在标题中包含一个标志,指示玩家应更改方向(例如,顺时针旋转 90 度),但并非所有玩家都会遵守该标志。
  • 问题是预览和录制的视频旋转了90°。而且我只希望预览显示镜头看到的内容,录制的视频也应“仅”显示镜头看到的内容。我不想要任何方向处理。

标签: android android-camera android-orientation


【解决方案1】:

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

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

如果您将应用的方向从横向更改,则需要调用 Camera 的 setDisplayOrientation 来正确调整预览,并调用 Media Recorder 的 setOrientationHint 来单独更改录制方向。

AOSP 中提供的 Android 的默认相机应用程序可以正确处理所有这些问题。

【讨论】:

  • 感谢提示,但我遇到了这个问题:stackoverflow.com/questions/3841122/… 这似乎是一种错误?!但有了那里的代码,它就可以工作了。
  • 那里没有错误。默认情况下,相机以横向发送图像。但是,如果您的 UI 是纵向的,则活动的坐标系会从相机的坐标系旋转 90 度。也就是说,应用程序的 (0,0) 位于纵向的左上角,而相机的 (0,0) 位于横向的左上角。所以如果你在app坐标系中绘制相机预览,就会出现旋转错误。这就是 setDisplayOrientation 调用存在的原因,以弥补这种差异。
【解决方案2】:
            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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    相关资源
    最近更新 更多