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如何让前置摄像头拍摄的视频不反相? 的相关文章

  • 如何使用 Camera 2 API Android 提高拍摄图像的质量?

    我正在使用谷歌示例创建 Android 相机应用程序 手机拍摄图像后 图像质量存在差异 相机预览的图像质量比输出图像更好 如何提高输出图像的质量 捏缩放后 预览图像和输出图像的质量差异甚至会增加 这是我的photo https codesh
  • 为捕获的图像创建单独的文件夹时出现 FileUriExposedException

    我正在尝试使用下面的代码将相机捕获的图像存储在单独的文件夹中 但是当我执行此代码时 我遇到异常 我尝试了很多方法来获取解决方案 但没有用 有人可以帮助我吗 android os FileUriExposeException file sto
  • Android模拟器中的相机

    我使用 android SDK 4 0 3 和 eclipse Indigo 我正在尝试开发一个使用相机的应用程序 当我拍照时 会出现以下消息 不幸的是 相机已经停止了 在 Eclipse 控制台中 模拟器 错误 camera client
  • 如何使用Camera2获取前置摄像头的id?

    如何使用新的 Camera2 库获取前置摄像头的 ID 我在文档中找不到它 我找到了解决方案 我可以通过调用获取相机特征getCameraCharacteristics cameraId on CameraManager object St
  • 图像大小调整后 OpenCV VideoWriter 不工作

    我正在使用 OpenCV 3 和 Visual Studio 这里的问题是 除了默认的完整相机分辨率之外 我无法保存任何特定分辨率的视频 没有错误 但视频文件不增长 它保持在 5 54kb 这是我的代码 include opencv2 op
  • 集成相机,无需弃用的方法和向后支持

    我想构建一个应用程序 其中设备的前置摄像头用于将当前图像投影到SurfaceView 到目前为止我发现的所有教程都是通过使用Cameraandroid hardware 包中的对象 然而 这种方法似乎已被弃用 当尝试使用 新 首选方式来实现
  • 正确处理异常:“getParameters failed(空参数)”

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

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

    我试图通过向 CameraX 的 ImageAnalysis 提供 480x360 图像来提高人脸检测率 然而 以下代码生成 640x480 图像 从而将检测速度降低至 10 fps 如果我提供 480x360 我可以将速率提高到 20 如
  • android.hardware.camera2.CaptureRequest 可以与 OpenCV 一起使用吗?

    我已经为此工作好几天了 我有一个基于 OpenCV JavaCameraView 的项目 我正在尝试与 Android 集成android hardware camera2 CaptureRequest我用来控制相机对光的敏感度的对象 Th
  • 如何在 Android 中拍照、保存并获取照片

    我一直在搜索拍摄照片的简单示例 并使用 URI 保存它并检索照片进行图像处理 我尝试了很多示例代码 但没有一个顺利 有人有示例代码吗 像这样定义一个变量 protected static final int CAPTURE IMAGE AC
  • 使用 ImageReader 读取 RGB 图像

    我正在尝试使用ImageReader从相机获取 RGB 图像 我在运行开发者预览版的 Nexus 5 上使用 Android 5 0 L 中的 Camera2 API 请注意 我是not询问如何将 YUV 转换为 RGB 我正在尝试直接从I
  • Android5.0中如何使用camera2 API实时获取每一帧数据

    我正在与相机2Basic https github com googlesamples android Camera2Basic现在尝试获取每一帧数据来进行一些图像处理 我在Android5 0中使用camera2 API 仅进行相机预览时
  • 为什么带处理程序的连续自动对焦相机不允许切换相机闪光灯?

    到目前为止我所做的 我已经实现了用于读取二维码的自定义相机 需要继续聚焦相机以获得更好的二维码读取 我的问题当我使用处理程序每 秒聚焦一次时 相机闪光灯开 关按钮不起作用 或者打开和关闭相机闪光灯需要太多时间 当我删除每秒自动对焦相机的代码
  • 暂停视频录制[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试创建一个应用程序 用户可以在其中从相机录制视频 该应用程序的功能之一必须是文件录制中的暂停 例如 用户通过按 开始 按钮开始
  • Android 相机 - 将图像保存到 SD 卡中的新文件夹中

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

    我希望获得实时摄像头源并向其添加效果并显示它 这是值得继续发展的正确技术 任何开源 您可以配置相机类来为您提供预览缓冲区 但副本 这是通过 PreviewBuffer 回调接口提供的 您已经实现了该接口并将其设置在相机上 在预览期间 您将获
  • Android 中的自定义相机应用程序问题 - 旋转 270、拉伸捕获视图且未获取所有功能

    我从代码中得到了帮助https github com josnidhin Android Camera Example https github com josnidhin Android Camera Example 但面临一些问题 例如
  • Camera.takePicture 返回旋转的 byteArray

    我正在尝试使用制作自定义相机应用程序hardware camera 我已经实现了PictureCallback拍照时会写入指定路径的文件中 这data写入文件的是ByteArray由返回takePicture在相机 API 中 因此 在写入
  • onPictureTaken 之后旋转 JPEG 的字节数组

    有没有办法旋转字节数组而不将其解码为位图 目前在 jpeg PictureCallback 中我只是将字节数组直接写入文件 但图片是旋转的 我想旋转它们而不解码为位图 希望这能节省我的记忆 BitmapFactory Options o n

随机推荐

  • 实例成员不能用于类型

    我有以下课程 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 录制视频 当使用后置摄像头时 它工作正常 但是当使用前置摄像头时 捕获的视频正在翻转 反转 意味着右侧的项目将出现在左侧 相机预览工作正常 只是最终捕获的视频翻转了 这是相机预览的样子 但最终的视频是这样