Android 设备上的 60/120fps 预览数据?

60/120fps preview data on an Android device?

我们想使用 Neon 组件或 GPU 着色器处理 120 fps(或 60fps)的相机预览数据,以执行简单的图像处理操作(例如 3x3 卷积)。 我们对在屏幕上显示图像不感兴趣,因此相机数据应直接进入 SurfaceTexture。

我们认为我们可以使用 CameraConstrainedHighSpeedCaptureSession 在 Nexus 5 上使用 Camera2 API 来做到这一点,但没有成功。

互联网上目前没有功能代码(至少我们已经抓取的部分)允许这样做,但似乎很可能存在该功能。

使用 Camera2 API 进行高速录制的最佳示例在这里:https://github.com/PkmX/lcamera

为了鼓励某人 post 一个解决方案,我悬赏这个问题。

这是在 pjsip 中完成的。将 repo 拉到你的机器上:

svn checkout -r 4687 https://svn.pjsip.org/repos/pjproject/trunk

然后打开示例应用程序的 pjmedia/src/swig 文件夹,该应用程序将从线路传入的视频数据直接渲染到 SurfaceTexture

我已经为您上传了两个最相关的 C 源文件(一目了然——当然还有其他的),在这里:

  1. android_dev.c
  2. android_opengl.c

当然,这些文件包含很多与您无关的代码,但希望有您正在寻找的片段。

如果您不确定如何操作,您可能需要先按照一些说明 found here 来生成处理极简主义 Java/C 接口的 pjmedia/src/pjmedia-videodev/android/PjCamera*.java 文件。我能够按照他们的说明进行操作——使用 完全相同的 NDK 版本(适用于 w/10d 或 10e)和 openssl (1.0.2a)——并成功渲染视频并创建自定义应用程序。如果您只是修改 C 级视频捕获以像他们一样通过 JNI 挂钩使用您的 API,那么此源代码完全可以满足您的需求。

有关使用 JNI 挂钩更改 API 的示例,请查看他们在 pjmedia 中的 audiodev 文件夹。

如果您确实构建了他们的项目,请务必按照最底部的说明进行构建 openssl 1.0.2a 的较新 NDK 版本。 注意 ./Configure 上的大写 'C',因为执行标准 ./configure 可能会启动错误的配置过程。 我建议将他们提供的命令复制并粘贴到脚本中。您可以出于您的目的完全跳过 openssl;一旦我集成了 openssl 支持,我只能让我的 Android 设备始终如一地注册 SIP 帐户。

我们成功修改了 camera2video 示例,在三星 S6 上获得了 120 fps 的数据速率。

密码是here.

我们还没有设法提取像素,但我们会在此处更新。