Я работаю над плагином для Godot и хочу получить видео с камеры мета-квеста 3, который использует игрок. Ниже приведена моя функция, которая использует API-интерфейс Android camera2 для попытки получить доступ к каналу камеры из квеста 3. Однако это возвращает только черный экран.
Цель состоит в том, чтобы получить канал камеры, чтобы я мог использовать на нем трекер тела Mediapipe:
Руководство по которому можно найти здесь.
Я специально не ищу, как активировать сквозной режим, просто чтобы получить канал камеры в коде.
Кто-нибудь знает, как мне получить доступ к видео с камеры?
@UsedByGodot
fun startCameraFeed() {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
) {
godot.getActivity()?.requestPermissions(arrayOf(Manifest.permission.CAMERA), 0)
debug("permission requested and returning")
return
}
cameraThread = HandlerThread("CameraThread").also { it.start() }
cameraHandler = Handler(cameraThread!!.looper)
val cameraId = findPassthroughCameraId() ?: return
debug("Found a passthrough camera ID")
imageReader = ImageReader.newInstance(width, height, ImageFormat.YUV_420_888, 2)
imageReader!!.setOnImageAvailableListener({ reader ->
val image = reader.acquireLatestImage()
if (image == null) {
debug("ImageAvailableListener triggered → no image")
return@setOnImageAvailableListener
}
val rgb = yuv420ToRgb(image)
image.close()
lock.withLock {
latestRgb = rgb
}
}, cameraHandler)
cameraManager.openCamera(cameraId, object : CameraDevice.StateCallback() {
override fun onOpened(device: CameraDevice) {
cameraDevice = device
val surfaces = listOf(imageReader!!.surface)
device.createCaptureSession(surfaces, object : CameraCaptureSession.StateCallback() {
override fun onConfigured(session: CameraCaptureSession) {
captureSession = session
val builder = device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply {
addTarget(imageReader!!.surface)
}
session.setRepeatingRequest(builder.build(), null, cameraHandler)
}
override fun onConfigureFailed(session: CameraCaptureSession) {
// Handle configuration error
}
}, cameraHandler)
}
override fun onDisconnected(device: CameraDevice) = device.close()
override fun onError(device: CameraDevice, error: Int) = device.close()
}, cameraHandler)
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... amera-feed