Accede a la cámara de alta fps en Android
Hay teléfonos con soporte oficial para la grabación de alta fps, como el Galaxy S5 y S6. He intentado ambos, con ambos se puede grabar videos de alta fps (60 o incluso 120 fps) con la aplicación de cámara por defecto. (O en el S6 usando la función "Cámara pasante" de Gear VR). PERO: cuando consulta las capacidades de la cámara a través de las API estándar de Android (probado tanto en S5 en 4.4 y 5.0 como en S6 en 5.1, intentó tanto el antiguo como el nuevo Cámara2 APIs) en todos los casos, 30 fps es reportado como el más alto disponible. ¿Significa esto que estos teléfonos usan API propietarias privadas para acceder a capacidades de alta fps y no hay una forma estándar para acceder a fps más alto? ¿Es esto el defecto del fabricante (que podría cambiar con las versiones de software o teléfonos futuros) o simplemente estoy perdiendo algo? Ni siquiera necesito cámara lenta, cámara de alta tasa de fotogramas para el uso en tiempo real, por lo que 60 fps sería suficiente.
Muestra Traté de consultar los fps de la cámara en la API de cámara antigua;
- ¿Por qué FPS no es lo mismo que la aplicación original de cámara
- ¿Cómo se muestra fps con opengl es (android)
- setPreviewFpsRange no funciona a pesar de que los valores están dentro del rango de getPreviewFpsRange
- El buscapersonas de vista automática hace que los fotogramas se descarguen
- Andengine FPS bajo en ciertos teléfonos
List<Camera.Size> a = camera.getParameters().getSupportedPreviewSizes(); List<int[]> b = camera.getParameters().getSupportedPreviewFpsRange(); int[] c = new int[2]; camera.getParameters().getPreviewFpsRange(c);
Lo mismo en la cámara2 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); }
Sólo obtengo rangos: [15, 15], [24, 24], [10, 30], [15, 30], [30, 30] (incluso menos rangos con la API de cámara antigua).
En la API de camera2 encontré algunos métodos para acceder a la grabación de cámara de alta fps: createConstrainedHighSpeedCaptureSession () . Pero define la grabación de vídeo de alta velocidad como "frame rate> = 120fps", por lo que ni siquiera lo necesito para 60 fps. De todas formas me preguntó esta capacidad, pero parece que no es compatible con el S6. El código que intenté:
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]); } }
Se dice que sólo las capacidades de apoyo 0, 1, 2, 3, 5, 6. REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO sería 9.
En este punto, prácticamente se me acabaron las ideas que sospechaban que estas capacidades no están disponibles a través de las API estándar de estos teléfonos. Cualquier ayuda es apreciada.
Sé que la pregunta es bastante similar / relacionada con esto: Capturar videos de alta fps usando la nueva cámara API Pero mi pregunta es más general, no es específico ni a la antigua ni a la nueva cámara API, ni a dispositivos específicos. También estoy curioso de lo que apoyó fps otros nuevos dispositivos emblemáticos informe a través de las API estándar, ya que sólo podía probarlo en 3 dispositivos.
- Android: ¿Hay alguna manera de acelerar canvas.drawBitmap?
- Android 2d juego de lienzo: FPS Jitter problema
- Android MediaRecorder setCaptureRate () y velocidad de reproducción de vídeo
- Android - ¿Cómo puedo medir el rendimiento de ListView y otras vistas?
- Prueba FPS en la aplicación Android
- Cómo limitar el rango de fps de vista previa en android para la cámara?
- Mostrar velocidad de fotogramas en DDMS
- Cocos2d-x setAnimationInterval no funciona en Android
- Acceso de dominio a través de subprocesos con rxjava y dagger2
- Android Video Recording, intención de la cámara