Android如何让前置摄像头拍摄的视频不反相?

2023-12-01

我使用 MediaRecorder 录制视频。当使用后置摄像头时,它工作正常,但是当使用前置摄像头时,捕获的视频正在翻转/反转。意味着右侧的项目将出现在左侧。相机预览工作正常,只是最终捕获的视频翻转了。

这是相机预览的样子

enter image description here

但最终的视频是这样的(左侧的所有项目都出现在右侧)

enter image description here

到目前为止我尝试过的:

我尝试应用matrix当准备录音机时,但它似乎确实改变了任何事情。

private boolean prepareRecorder(int cameraId){

    //# Create a new instance of MediaRecorder
    mRecorder = new MediaRecorder();

    setCameraDisplayOrientation(this,cameraId,mCamera);
    int angle = getVideoOrientationAngle(this,cameraId);
    mRecorder.setOrientationHint(angle);

    if(cameraId == Camera.CameraInfo.CAMERA_FACING_FRONT){
        Matrix matrix = new Matrix();
        matrix.preScale(1.0f,-1.0f);
    }

    //all other code to prepare recorder here
  }

我已经阅读了下面的所有问题,但这一切似乎都没有解决我的问题。有关信息,我使用SurfaceView对于相机预览,所以这里的问题没有帮助。

1) Android 翻转前置摄像头镜子翻转视频

2) 如何防止 Android 反转前置摄像头的图像?

3) 防止前置摄像头翻转

所以我的问题是:

1)如何通过前置摄像头拍摄视频,并且视频不反转(与相机预览完全相同)?

2)使用Camera预览时如何实现SurfaceView但不是TextureView? (因为我上面提到的所有问题,请讲述如何使用TextureView)

所有可能的解决方案都是受欢迎的..Tq

EDIT

我制作了2个短片来澄清问题,请下载观看

1) 录制时相机预览时的视频

2) 录制的最终产品视频


因此,如果系统相机应用程序生成与您的应用程序类似的视频,则您没有做错什么。现在是时候了解前置摄像头视频录制会发生什么情况了。

前置摄像头在拍摄静态图片或视频方面与后置摄像头没有什么不同。手机在屏幕上显示相机预览的方式有所不同。为了让用户看起来更自然,Android(和所有其他系统)镜像预览,以便您可以像在镜子中一样看到自己。

重要的是要了解这仅适用于向您呈现预览的方式。如果您拿起任何视频会议应用程序,连接两只手中握着的两个设备,然后看看自己,您会惊讶地发现自己的两个实例被翻转了。

这不是错误,这是向对方呈现视频的自然方式。

看草图:

你看到的场景是这样的:

how you see the scene

这就是你的同伴看到同一场景的方式

how your peer sees the same scene

通常,视频录制是从您的同伴的视角进行的,如第二张图片所示。这是视频会议等的自然设置。

但 Snapchat 和其他一些社交应用程序选择存储前置视频剪辑,就好像您从镜子中录制它一样(就好像在第一张图片中录音机在您手中一样)。有些人喜欢这个功能,有些人讨厌它(请参阅https://forums.androidcentral.com/general-help-how/664539-front-camera-pics-mirrored-reversed-only-snapchat.html and https://www.reddit.com/r/nexus6/comments/3846ay/has_anyone_found_a_fix_for_snapchat_flipping)

您不能为此使用 MediaRecorder。您可以使用 MediaCodec 的较低级别 API 来记录处理后的帧。您需要“手动”翻转每一帧,这可能会严重影响性能,因为通常 MediaRecorder 会以非常有效的方式将相机“连接”到硬件编码器,甚至不需要将像素复制到用户内存。这个答案展示了如何操纵相机渲染为纹理的方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android如何让前置摄像头拍摄的视频不反相? 的相关文章

  • 通过默认相机活动拍摄高质量图像并将其保存到 SD 卡上

    我正在通过默认相机活动拍摄高分辨率照片 使用intent put Extras 并将其保存到SD卡 Code public class CameraActivity extends Activity implements OnClickLi
  • 集成相机,无需弃用的方法和向后支持

    我想构建一个应用程序 其中设备的前置摄像头用于将当前图像投影到SurfaceView 到目前为止我发现的所有教程都是通过使用Cameraandroid hardware 包中的对象 然而 这种方法似乎已被弃用 当尝试使用 新 首选方式来实现
  • 使用 avcapturesession 切换相机

    在这里使用本教程 http www musicalgeometry com p 1297 http www musicalgeometry com p 1297我创建了一个自定义叠加层和图像捕获AVCaptureSession 我试图允许用
  • 正确处理异常:“getParameters failed(空参数)”

    我在 Google Play 商店中有一个安装了 Google Analytics 的相机应用程序 我不断收到以下崩溃报告 获取参数失败 空参数 我的问题是 处理这个问题的正确方法是什么 调查 Android 源代码并没有给我任何额外的细节
  • 在 Android 类相机中将自动对焦放在哪里

    我正在尝试使用自动对焦 我不知道在哪里放置自动对焦 有人知道如何实现自动对焦吗 预习班 package com marakana import java io IOException import android content Conte
  • 处理大位图

    我只想从我的应用程序打开本机相机应用程序来捕获照片并将其设置为屏幕的背景图像 然后单击按钮旋转它 如果使用 3MP 相机拍摄 照片会旋转 n 次 如果我将相机分辨率设置为 5MP 或更高 应用程序将在第五次单击按钮时强制关闭 照片旋转 4
  • 设置android相机发送灰度图像

    Android 相机可以通过编程方式设置为发送灰度图像吗 我不是在询问收到图像后的转换 而是在询问一种以编程方式设置它的方法 就像我们对 fps 分辨率等所做的那样 您是在谈论内置相机应用程序 通过意图 还是在您的应用程序内部 如果它是内置
  • CameraX ImageAnalysis 设置的 TargetResolution 小于 640x480

    我试图通过向 CameraX 的 ImageAnalysis 提供 480x360 图像来提高人脸检测率 然而 以下代码生成 640x480 图像 从而将检测速度降低至 10 fps 如果我提供 480x360 我可以将速率提高到 20 如
  • 调用相机时,三星 Intent For OnActivityResult 为 Null

    我正在使用以下代码从相机获取图片 除三星外 其他手机均运行良好 请让我知道我做错了什么 final File root new File Environment getExternalStorageDirectory File separa
  • 如何在运行时更改相机的预览?

    我正在尝试创建一个应用程序 它可以从相机视图中捕获一些 x y 大小的矩形部分 为了实现这一目标 我已经使用了许多线程 但似乎没有一个线程能够按要求工作 基本上我想要实现的目标如下所示 我的要求是 当我打开相机时 屏幕上应该有一个矩形突出显
  • android 11 上 imageCapture 用例的camerax“未绑定到有效相机”

    我一直收到错误 未绑定到有效相机 当尝试实现 imageCapture 用例时 我正在按照camerax教程在Java中实现该功能here https codelabs developers google com codelabs came
  • ANDROID CAMERA:获取参数失败(空参数)

    您好 我仅在棒棒糖以下的操作系统版本中遇到此问题 对此进行了大量搜索 但没有找到正确的解决方案 我认为问题出在操作系统版本上 它在 5 中工作正常 我的代码是 private void setCameraPhotoQuality Camer
  • Android-从前置摄像头拍照会旋转照片

    我正在 Android 中创建一个应用程序 用户只能在纵向模式下从前置摄像头拍照 我已经将相机视图固定为纵向 但拍照时它看起来是旋转的 最糟糕的是 不同手机的旋转方向不同 在一部手机中向右旋转 而在另一部手机中则向左旋转 这是我的代码片段
  • Android:想要在相机预览上放置剪影叠加

    我想知道如何在相机预览上添加剪影 到目前为止 我已经完成了以下示例 它只是预览相机 http developer android com reference android view TextureView html http develo
  • 相机表面视图图像看起来被拉伸

    在纵向模式下 图像看起来垂直拉伸 在横向模式下 图像看起来水平拉伸 虽然捕获图像后以适当的尺寸显示 如何解决这个问题 您需要选择与您的显示尺寸相匹配的预览尺寸 我建议更改预览尺寸设置以匹配您的SurfaceView而不是相反 虽然预览数据很
  • 保存在 ImageView 中时,从自定义相机拍摄的图像会被拉伸

    我正在使用此代码在 Imageview 中保存图片 但在 imageview 中保存时图像被拉伸 相机预览是完美的 单击右侧图像 但是当我在 imageview 中设置该图像时 图像被拉伸 public void onPicTaken by
  • Android“权限拒绝:无法使用相机”

    我正在学习有关在 Android 应用程序中使用相机的教程 我收到错误 权限被拒绝 无法使用相机 在模拟器和物理设备上运行调试时 我在清单文件中尝试了各种权限 似乎大多数遇到此错误的人都遇到了拼写错误 缺少权限或权限不在清单中的正确位置 这
  • 如果使用grifika的ContinualCaptureActivity中的预览方式,相机预览的视野会更小

    我们知道 当相机预览比例设置为时 在相同距离下我们会得到更大的预览视野4 3代替16 9 具体如下 Android Camera API 奇怪的缩放效果 https stackoverflow com questions 20664628
  • Android 相机 - 将图像保存到 SD 卡中的新文件夹中

    我有一个非常简单的应用程序 目前可以拍照然后保存图像 目前的问题是 由于某种原因 我无法找到图像在手机上的保存位置 我想要做的最终结果是 当拍摄照片时 图像会保存到 SD 卡上创建的新文件夹中 但如果该文件夹尚不存在 则必须创建该文件夹 自
  • opengl 覆盖在相机视图上

    我仍然没有找到在相机预览顶部显示 opengl 叠加层的正确方法 有一个 hack 你可以调用 setContentView GLSurfaceView addContentView MyCameraSurfaceView 但它无法正常工作

随机推荐

  • 实例成员不能用于类型

    我有以下课程 class ReportView NSView var categoriesPerPage Int var numPages Int return categoriesPerPage count 编译失败并显示消息 实例成员
  • 链接共享 C 库时 Android NDK 错误

    我正在尝试将一些 C 文件链接到我正在处理的 NDK 项目 并设置我的CMakeLists txt像下面这样归档 cmake minimum required VERSION 3 4 1 set CMAKE C FLAGS CMAKE C
  • 润滑 as_date 和。 as_datetime 行为差异

    我有一个数字向量 表示自 1970 年 1 月 1 日以来的毫秒数 我想使用以下方法将它们转换为日期时间对象lubridate 数据示例如下 raw times lt c 1139689917479 1139667123031 114036
  • 使用浏览器控制台使用 Javascript 在 Facebook 中发送聊天消息

    我尝试使用 Javascript 在 Facebook 中发送聊天消息 但不断收到错误消息 要么是TypeError Object
  • 我可以对 Linux 进程的地址空间中的每个页面进行写保护吗?

    我想知道是否有一种方法可以对 Linux 中的每个页面进行写保护 进程的地址空间 从进程本身的内部 通过mprotect 我所说的 每一页 实际上是指该网站的每一页 进程的地址空间可以被普通进程写入 程序在用户模式下运行 所以 程序文本 常
  • ServiceStack Javascript JsonServiceClient 缺少属性

    我正在尝试使用 Servicestack JsonServiceClient 连接到经过 JWT 身份验证的服务 但是文档仅描述了如何使用 C 客户端执行此操作 http docs servicestack net jwt authprov
  • 计时器不包含在 Xamarin.Forms 的 System.Threading 中

    I used System Threading Timer in Xamarin Android 我如何在中使用同一个类Xamarin Forms 我想从 Xamarin Forms 中的 Xamarin Android 转移我的项目 pu
  • 单击按钮更改颜色在重新加载或重新启动页面后保持不变

    我创建了锚标记 其中使用心形图标 单击后会更改颜色 但我想在重新加载或重新启动页面后保持相同的颜色 当我重新启动或重新加载页面时 它会恢复默认颜色 var btnvar document getElementById favorite fu
  • 如何从 C# 调用 MongoDb 中存储的 JavaScript

    我正在评估将 SQL Server 数据库移植到 MongoDb 问题是移动存储过程 我读到了有关 MongoDb 存储 JavaScript 的内容 我想在 Net 中进行一些测试 我已经安装了 MongoDb 驱动程序 2 4 0 并在
  • 搜索数组中的连续值

    在数组中搜索连续值的最佳方法是什么 例如 搜索array a b in array x a b c 会产生1 因为这些值首先连续出现在该索引处 还没有测试过这个 但类似这样的事情应该可以 function consecutive value
  • 使用 PHP 接收 JSON POST

    我尝试在支付接口网站上接收 JSON POST 但无法对其进行解码 当我打印时 echo POST I get Array 当我尝试这个时我什么也没得到 if POST foreach POST as key gt value echo l
  • 圆与圆的交点

    如何计算两个圆的交点 我希望在所有情况下都会有两个 一个或没有交点 我有中心点的 x 和 y 坐标以及每个圆的半径 python 中的答案是首选 但任何工作算法都是可以接受的 两个圆的交点 保罗 伯克 编剧 The following no
  • Linq to SQL 是如何工作的?

    我在项目中使用 Linq to SQL 我使用它从 SQL 存储过程中获取数据 它工作完美 但我不明白 LINQ SQL 内部如何与 SQL Server 通信 它在获取数据后将数据存储在哪里 它从哪里获取连接字符串 提前致谢 更好读 ht
  • 为什么使用不带 lambda 的内联

    我试图了解如何使用inline修改正确 我了解一般情况 当我们内联 lambda 以防止过度分配时 如中所述docs 我正在检查 kotlin stdlib 并发现 Strings kt下面这段代码 kotlin internal Inli
  • 在vBulletin中使用curl登录网站

    我一直在尝试登录某个网站 www siamchart 论坛 按照此链接上的说明进行操作 使用 PHP cURL 登录远程站点 我无法通过登录 运行以下脚本后 它将我重定向到相同的登录页面 www siamchart forum 但没有成功登
  • 子类化 sklearn LinearSVC 以用作 sklearn GridSearchCV 的估计器

    我正在尝试创建一个子类sklearn svm LinearSVC用作估计器sklearn model selection GridSearchCV 子类有一个额外的函数 在本例中不执行任何操作 然而 当我运行这个时 我最终遇到了一个我似乎无
  • Delphi 中的丰富 GUI 应用程序

    我想在 Delphi 中创建一个具有丰富 UI 元素且没有 VCL 的应用程序 TForm 除外 每个组件 按钮 列表等 都需要支持完整的每像素 alpha 并且无需任何代码即可轻松创建 它应该是可剥皮的并且能够提供类似于 adobe ai
  • Boost program_options 将多个配置文件解析结果存储到一个 parsed_options 中

    我正在尝试解析命令行提供的任意数量的文件中未注册的选项 假设我有文件 configs0 ini configs1 ini configs2 ini 我想支持其中任意数量的 我的代码 简化 namespace po boost program
  • 根据依赖条件删除行

    删除多个参数上的行并不太困难 例如 data data fd 0 data cl 0 但是 在以下数据框中 data lt structure list id c 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L 0L
  • Android如何让前置摄像头拍摄的视频不反相?

    我使用 MediaRecorder 录制视频 当使用后置摄像头时 它工作正常 但是当使用前置摄像头时 捕获的视频正在翻转 反转 意味着右侧的项目将出现在左侧 相机预览工作正常 只是最终捕获的视频翻转了 这是相机预览的样子 但最终的视频是这样