在 Android 上访问高 fps 相机

2024-01-12

有些手机官方支持高 fps 录制,例如 Galaxy S5 和 S6。我尝试了两者,两者都可以使用默认相机应用程序录制高 fps 视频(60 甚至 120 fps)。 (或者在 S6 上使用 Gear VR 的“直通相机”功能。)但是:当您通过标准 Android API 查询相机的功能时(在 4.4 和 5.0 上的 S5 以及 5.1 上的 S6 上尝试过,旧版和新版都尝试过)在所有情况下,30 fps 被报告为可用的最高帧率。这是否意味着这些手机使用私有 API 来访问高 fps 功能,并且没有标准方法来访问更高 fps?这是制造商的缺点(可能会随着未来的软件版本或手机而改变)还是我只是错过了一些东西? 我什至不需要慢动作,只需要高帧率相机来实时使用,所以 60 fps 就足够了。

我尝试在旧相机 API 中查询相机 fps 的示例;

List<Camera.Size> a = camera.getParameters().getSupportedPreviewSizes();
List<int[]> b = camera.getParameters().getSupportedPreviewFpsRange();
int[] c = new int[2];
camera.getParameters().getPreviewFpsRange(c);

与camera2 API相同:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
    CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
    Range<Integer>[] fpsRange = cc.get(cc.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
}

我只得到范围: [15, 15]、[24, 24]、[10, 30]、[15, 30]、[30, 30](旧相机 API 的范围甚至更小)。

在camera2 API中,我找到了一些访问高fps相机录制的方法:创建ConstrainedHighSpeedCaptureSession() http://developer.android.com/reference/android/hardware/camera2/CameraDevice.html#createConstrainedHighSpeedCaptureSession(java.util.List%3Candroid.view.Surface%3E,%20android.hardware.camera2.CameraCaptureSession.StateCallback,%20android.os.Handler)。 但它将高速视频录制定义为“帧速率>=120fps”,所以我什至不需要它来达到60fps。不管怎样,我查询了这个功能,但 S6 似乎不支持它。我尝试过的代码:

CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
    CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
    CameraCharacteristics.Key<int[]> aa = cc.REQUEST_AVAILABLE_CAPABILITIES;
    for (int i = 0; i < cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES).length; i++) {
            Log.e(TAG, "Capability: " + cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i]);
    }
}

它说它只支持功能 0、1、2、3、5、6。 REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO 将为 9。

至此,我已经几乎没有任何想法怀疑这些功能确实无法通过这些手机上的标准 API 获得。任何帮助表示赞赏。

我知道这个问题与此非常相似/相关:使用新的相机 API 捕捉高 fps 视频 https://stackoverflow.com/questions/29070650/capture-high-fps-videos-using-new-camera-api但我的问题更为笼统,既不特定于旧的相机 API,也不特定于新的相机 API,也不特定于特定设备。我也很好奇其他新旗舰设备通过标准 API 报告的支持 fps 的内容,因为我只能在 3 台设备上进行测试。


经过与三星开发人员支持的多次讨论后,我可以向您保证以下内容:

三星从未正式支持 60 FPS。它肯定可以在 S9、S10、S20(常规)上使用,但在 S20 和 S21 Snapdragon/美国版本上有一个错误 - 它在 Exynos/全球版本上仍然像魅力一样工作 - 如果需要,我可以从这两个版本进行屏幕录制。我已将此事报告给三星并等待答复。

您可以使用高速捕捉,但它仅设计用于 120 FPS 或 240 FPS。目前,他们的 S21 系列和 S20 Plus 和 Ultra Snapdragon/美国版本声明并批准 120/240 可用 - 但它不起作用。 Exynos/全球版本一切正常。

如果您问自己 - 为什么高速返回范围也是 [30:120] 和 [60:120] - 这些范围是为预览模式设计的,如果您将其用于录制 - 您可以获得 30 的 FPS直到 120 - 取决于您获得的光量。例如:在一次录制中您将获得 90 FPS,而在另一次录制中您将获得 120 FPS。如果您使用 [120:120],您只能保证稳定的 120 FPS,而如果您使用高速会话,则不会获得 [60:60] 或 [90:90] - 只有 120 或 240。

您可以在我的 Facebook 页面上关注我与他们的所有讨论:https://www.facebook.com/Background-video-recorder-Ultimate-121145775953677 https://www.facebook.com/Background-video-recorder-Ultimate-121145775953677欢迎您分享我的帖子或联系他们的支持和投诉。

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

在 Android 上访问高 fps 相机 的相关文章

  • 如何清除所有WebView存储的信息?

    我有一个 Android 浏览器 我可以选择清除缓存 存储 cookie 等 代码如下所示 webView clearCache true webView clearFormData webView clearHistory webView
  • 如何在 Android 中保存相机的临时照片?

    在尝试从相机拍照并将其保存到应用程序的缓存文件夹中时 我没有得到任何可见的结果 应用程序不会崩溃 但在 LogCat 上 当我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 时 我收到此消息 09 17 14 03
  • 如何快速自动发送FCM或APNS消息?

    我正在开发一项后端服务 通过 FCM 或 APNS 向移动应用程序发送推送通知 我想创建一个可以在一分钟内运行的自动化测试 并验证服务器是否可以成功发送通知 请注意 我不一定需要检查通知是否已送达 只需检查 FCM 或 APNS 是否已成功
  • Android 30+ 中的视频捕获意图 - 只有所有者才能与待处理项目交互

    我正在尝试在我的应用程序上捕获视频 它可以在 android API 30 以下运行 但不能在 30 以上运行 似乎在 sdk 30 之后 android 不允许完全读取外部存储 作用域存储 我目前遇到这个错误 java lang Ille
  • Android 后退按钮无法与 Flutter 选项卡内的导航器配合使用

    我需要在每个选项卡内有一个导航器 因此当我推送新的小部件时 选项卡栏会保留在屏幕上 代码运行得很好 但是 android 后退按钮正在关闭应用程序而不是运行 Navigator pop import package flutter mate
  • 无法获取log.d或输出Robolectrict + gradle

    有没有人能够将 System out 或 Log d 跟踪从 robolectric 测试输出到 gradle 控制台 我在用Robolectric Gradle 测试插件 https github com robolectric robo
  • 如何在android中获取Camera2 API的当前曝光

    In android hardware Camera旧的 我使用下面的代码获取当前曝光并获取它Camera Camera Parameters param mCamera getParameters currentExposure para
  • 计数物体和更好的填充孔的方法

    我是 OpenCV 新手 正在尝试计算物体的数量在图像中 我在使用 MATLAB 图像处理工具箱之前已经完成了此操作 并在 OpenCV Android 中也采用了相同的方法 第一步是将图像转换为灰度 然后对其进行阈值计算 然后计算斑点的数
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • CollapsingToolBarLayout - 状态栏稀松布颜色不改变

    几天前我更新了我的 android studio 并开始使用 CoordinatorLayout 和 CollapsingToolbarLayout 只是尝试一些东西 工具栏稀松布颜色似乎覆盖了状态栏初始颜色和状态栏稀松布颜色 从 xml
  • 是否必须删除 Intent extra?

    这可能是一个愚蠢的问题 但是是否有一条规则规定消费活动必须显式删除 Intent 额外内容 或者只有在回收 Intent 对象时才如此 换句话说 如果我总是通过执行以下操作来链接到下一个活动 Intent i new Intent MyCu
  • 原色(有时)变得透明

    我正在使用最新的 SDK 版本 API 21 和支持库 21 0 2 进行开发 并且在尝试实施新的材料设计指南时遇到了麻烦 材料设计说我需要有我的primary color and my accent color并将它们应用到我的应用程序上
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • 我想实现下面的布局,按钮应该在屏幕底部,当惰性列被填充时,按钮不应该出去

    顶部有惰性列 惰性列下方有输入电话号码布局并从电话簿布局添加联系人 我希望当未添加联系人时此布局位于顶部 当我添加大量联系人时输入电话号码并添加电话簿布局中的联系人会随着惰性列滚动并移出屏幕 我不让他们走出屏幕 当接触较多时 它们必须粘在底
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 在activity_main.xml中注释

    我是安卓新手 据我所知 XML 中的注释与 HTML 中的注释相同 使用 形式 我想在 Android 项目的 Activity main xml 配置文件中写一些注释 但它给了我错误 值得注意的是 我使用的是 Eclipse 但目前 我直
  • 将两个文本视图并排放置在布局中

    我有两个文本视图 需要在布局中并排放置 并且必须遵守两条规则 Textview2 始终需要完整显示 如果布局中没有足够的空间 则必须裁剪 Textview1 例子 文本视图1 文本视图2 Teeeeeeeeeeeeeeeeeextview1
  • 如何将 google+ 登录集成到我的 Android 应用程序中?

    大家好 实际上我需要通过我的应用程序从 google 登录人们 现在我阅读了 google 上的文档 其中指出 要允许用户登录 请将 Google Sign In 集成到您的应用中 初始化 GoogleApiClient 对象时 请求 PL
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript

随机推荐

  • Java 中的 SQLite 连接池 - 锁定数据库

    我已经阅读了一些有关多线程环境中 SQLite 的相关主题 但我找不到明确的说法 所以请原谅我再次提出这个主题 我需要从多个线程访问应用程序的数据库以执行更新语句 数据库本身可以是 SQLite 或 MySQL 具体取决于用户的选择 对于
  • Nestjs 的 Swagger Codegen

    我已经使用 Swaggerhub 创建了 api 端点 并成功导出以与 asp net core 一起运行 我想用 Nestjs 测试相同的 api 但我发现用 openapi 进行记录 但反之则不然 将 yaml 转换为 Nodejs 有
  • Grails 日期绑定

    在 Grails 中 可以在控制器中 bindData Book b new Book bindData b params 如果我有一个来自用户输入的具有特定格式 例如 yyyy MM dd 的日期字段怎么办 在Spring中 我们可以使用
  • 如果未找到 Wi-Fi AP,则不会调用 NetworkCallback 的 onUnavailable() 方法

    我正在尝试将我的智能手机连接到 IOT 设备制作的 AP 我将connectivitymanager requestNetwork 与NetworkCallback 一起使用 一切正常 直到我关闭我的AP 并且显然requestNetwor
  • 文件错误(文件,“rt”):无法打开连接[重复]

    这个问题在这里已经有答案了 我是 R 新手 在广泛研究此错误后 我仍然无法找到解决方案 这是代码 我检查了我的工作目录 并确保文件位于正确的目录中 欣赏它 谢谢 pollutantmean lt function directory pol
  • 在选项卡内切换选项卡

    MainActivity java public class MainActivity extends FragmentActivity Fragment TabHost as mTabHost private FragmentTabHos
  • 从一个领域异步复制到另一个领域

    据我了解 Realm只能 应该从主线程访问 我使用两个领域 一个用于存储 脏 数据 这些数据在验证后将被移动到真实领域 到目前为止一切顺利 但我找不到在主线程之外执行此操作的方法 如果我使用写入真实领域realm executeTransa
  • Android:将 android.net.Uri 对象保存到数据库

    我想做的是从用户那里获取选定的铃声 设置 AlarmManager 闹钟以在闹钟关闭时播放该铃声 但我需要将铃声保存在数据库中 以便在手机重启后重置所有警报 我的问题是将铃声 Uri 保存到数据库以便稍后检索的最佳方法是什么 我尝试了以下方
  • 使用带有 FX 的 OpenJDK 的 Azul Zulu Builds 将 JavaFX 项目升级到 JDK 17 后,为什么 IDEA 找不到 JavaFX 包?

    我有一个 Java FX 项目 并使用以下 Azul Zulu Build of OpenJDK with JavaFX 将项目升级到 JDK 17 有谁知道为什么 Intellij 无法从 Azul Zulu Builds of Open
  • 在 Groovy MarkupBuilder 中使用命名空间

    我想要有以下输出
  • 从 C# 列表中选择唯一元素

    如何从列表中选择独特的元素 0 1 2 2 2 3 4 4 5 这样我得到 0 1 3 5 有效去除的所有实例重复的元素 2 4 var numbers new 0 1 2 2 2 3 4 4 5 var uniqueNumbers fro
  • 如何使用 EWS 从 Outlook 联系人读取扩展属性

    我当前正在尝试通过 Microsoft 的 EWS 托管 API 从 Outlook 联系人对象读取某些属性 我从以下位置检索这些联系人对象FindItems 功能 其中一些字段是扩展属性 例如Title or User1领域 我很难阅读它
  • iOS 上 JavaScriptCore 虚拟机的强制垃圾回收

    有没有办法强制 iOS 或 Mac OS JavaScriptCore VM 垃圾收集器运行 我只需要它来测试内存泄漏 所以私有 API 就可以了 使用 JSBase h 中的以下函数 function JSGarbageCollect a
  • 哪些 Knockout.js 绑定是“双向”的?

    Knockout js 拥有双向绑定 并且实例展示 http knockoutjs com examples helloWorld html如何value绑定 当应用于文本输入时 更新视图模型 但是 我尝试更新其他绑定 例如text 发现视
  • Python二进制文件读取问题

    我正在尝试在 Python 中读取一个二进制文件 代表 Matlab 中的矩阵 但我在读取文件并将字节转换为正确的值时遇到问题 二进制文件由一系列 4 字节数字组成 前两个数字分别是行数和列数 我的朋友给了我一个他编写的 Matlab 函数
  • 为什么返回 Java 对象引用比返回原语慢得多

    我们正在开发一个延迟敏感的应用程序 并且一直在对各种方法进行微基准测试 使用jmh http openjdk java net projects code tools jmh 在对查找方法进行微基准测试并对结果感到满意后 我实现了最终版本
  • 如何在Azure Function App中禁用只读模式?

    我从 Azure 门户创建一个新的 Function App v2 然后 我借助 Azure Functions Core Tools v2 3 在本地计算机上启动一个新应用程序 并将其发布到门户上的新应用程序 func init func
  • 如何使用 PHP 从多列中选择最小值

    我有一个包含以下内容的表 6xx 8xx 9xx 11xx 12xx 1 0 01 0 002 0 004 0 001 0 025 2 0 025 0 125 0 002 0 01 0 011 我想找到该列中的最小值 使该列变为绿色 例如
  • 从整数创建 LocalDate 对象

    如果我已经有一个日期的月份 日期和年份作为整数 那么使用它们创建一个日期的最佳方法是什么 LocalDate目的 我找到了这个帖子字符串到本地日期 https stackoverflow com questions 8746084 stri
  • 在 Android 上访问高 fps 相机

    有些手机官方支持高 fps 录制 例如 Galaxy S5 和 S6 我尝试了两者 两者都可以使用默认相机应用程序录制高 fps 视频 60 甚至 120 fps 或者在 S6 上使用 Gear VR 的 直通相机 功能 但是 当您通过标准