3.4.- Fuentes de datos multimedia. Clases Flashcards
3.4.1. Formatos de audio y vídeo
Sistema Android. Estandar (3)
El sistema Android proporciona de forma estándar soporte para algunos formatos de vídeo y audio, es decir, viene con algunos códecs preinstalados por defecto. Estos formato son compatibles para todas las versiones.
3.4.1. Formatos de audio y vídeo
Sistema Android. Versiones (3)
El sistema Android proporciona codecs que solo son compatibles con algunas versiones. Por tanto, algunos formato de audio y video solo son compatibles unicamente con una o varias marca y modelos.
3.4.1. Formatos de audio y vídeo
Clase MediaCodecInfo. Métodos (3)
Desde la versión 10 de Android (nivel de API 29) y superiores, se están disponibles algunos métodos en la clase MediaCodecInfo que pueden ser ultiles.
3.4.1. Formatos de audio y vídeo
Clase MediaCodecInfo. Método isSoftwareOnly() (3)
Devuelve true si el códec es puramente virtual, es decir, no utiliza ninguna ayuda del hardware para la conversión y, por lo tanto, puede que su velocidad y rendimiento sean inferiores.
3.4.1. Formatos de audio y vídeo
Clase MediaCodecInfo. Método isHardwareAccelerated() (3)
Lo contrario al método isSoftwareOnly(), el códec utiliza hardware y será más veloz.
3.4.1. Formatos de audio y vídeo
Clase MediaCodecInfo. Método isVendor() (3)
Dice si el códec es del fabricante o si es estándar de Android.
3.4.1. Formatos de audio y vídeo
Formatos de audio (5)
Formatos y codecs de audio de Android
3.4.1. Formatos de audio y vídeo
Formatos de video (5)
Formatos y codecs de video de Android
3.4.2. Hardware
Hardware. Clases (1)
El paquete android.hardware proporciona las clases necesarias para el manejo del hardware del dispositivo.
3.4.2. Hardware
Hardware. Clase Camera2 (1)
Una de las clases más utilizadas en las app multimedia de toma de imágenes es la clase Camera2, si no se ha actualizado a la clase CameraX.
3.4.2. Hardware
Hardware. Compatibilidad (3)
Se debe tener en cuenta que no todos los dispositivos dispones de las características de hardware que soporta el sistema operativo Android.
3.4.2. Hardware
Hardware. Archivo Manifest. Permisos (1)
Declarar en el manifest de la app cuáles carácterísticas se usan y cuáles son indispensables para su funcionamiento. De esta manera, se asegura de que las aplicaciones se ejecuten en el entorno adecuado y no se rompa la ejecución por falta de hardware.
3.4.2. Hardware
Hardware. Archivo Manifest. Prioridad (1)
Si la app usa la cámara pero no es fundamental, se debe declararlo en el manifest de este modo:
* <>uses-feature android:name=”android.hardware.camera.any” android:required=”false” />
Pero si es necesaria para la app, se declarará:
* <>uses-feature android:name=”android.hardware.camera.any” android:required=”true” />
3.4.2. Hardware
Archivo Manifest. Cámara trasera del terminal (1)
- android.hardware.camera
3.4.2. Hardware
Archivo Manifest. Cámara trasera o cámara frontal indistintamente (1)
- android.hardware.camera.any
3.4.2. Hardware
Archivo Manifest. Característica de autoenfoque de cámara (1)
- android.hardware.camera.autofocus
3.4.2. Hardware
Archivo Manifest. El terminal puede tener cámara externa (1)
- android.hardware.camera.external
3.4.2. Hardware
Archivo Manifest. El flash de la cámara (1)
- android.hardware.camera.flash
3.4.2. Hardware
Archivo Manifest. Cámara frontal del dispositivo (1)
- android.hardware.camera.front
3.4.2. Hardware
Archivo Manifest. Aceleración del procesamiento de audio (1)
- android.hardware.audio.low_latency
3.4.2. Hardware
Archivo Manifest. Función de salida de audio por altavoces, jack de audio, Bluetooth o cualquier otro mecanismo que permita la función (1)
- android.hardware.audio.output
3.4.2. Hardware
Archivo Manifest. Funcionalidades de audio de alto nivel (1)
- android.hardware.audio.pro
3.4.2. Hardware
Archivo Manifest. Funcionalidad de grabación de audio (1)
- android.hardware.audio.microphone
3.4.2. Hardware
Archivo Manifest. El dispositivo puede tener un gamepad (1)
- android.hardware.gamepad
3.4.2. Hardware
Hardware. Eficiencia (3)
Cuando la eficiencia sea fundamental para el rendimiento de la app, es necesario comunicar con el hardware de forma más directa.
3.4.2. Hardware
Hardware. Eficiencia. NDK (3)
El NDK (Native Development Kit) es un conjunto de herramientas y librerías que permiten acceder a niveles más bajos del sistema. Hay que tener en cuenta que, para utilizar el NDK, hay que programar en C y C++, por lo que el desarrollo es más complicado y lleva más tiempo que con un lenguaje de alto nivel como Kotlin.
3.4.3. Fuentes de datos
Fuentes de datos multimedia. Origen de datos (5)
Antes de empezar a codificar, se debe considerar desde dónde llegan los datos multimedia, pues, dependiendo de cada caso, la forma de acceso cambia.
3.4.3. Fuentes de datos
Fuentes de datos multimedia. Capturar video (5)
Acceder directamente al hardware de la cámara o utilizar una app intermedia.
3.4.3. Fuentes de datos
Fuentes de datos multimedia. Reproducir video (5)
Quizá es estático y se incrusta en el APK. Se puede hacerlo guardándolo en la carpeta app/src/main/res/raw o en la carpeta app/src/main/assets. La forma de acceso es diferente en cada caso.
3.4.3. Fuentes de datos
Fuentes de datos multimedia. Carpetas “raw” y “res” (1)
La carpeta “raw” está dentro de “res”, significa que todos los archivos allí se tratarán como un recurso y se les asigna un identificador que algunas funciones aceptan fácilmente sin tener que abrir y leer el archivo. Al ser un recurso, se puede guardar varios distintos según el lenguaje del terminal o el tamaño de pantalla.
Rutas:
* raw: a app/src/main/res/raw
* res: app/src/main/res
3.4.3. Fuentes de datos
Fuentes de datos multimedia. Carpeta “assest” (1)
En la carpeta “assets” se puedre crear un árbol de directorios libremente. No aplica ninguna de las casusísticas de las carpetas “raw” y “res”. Además, los recursos de “raw” están limitados en tamaño si no van ya comprimidos.
Rutas:
* assets: a app/src/main/assets
3.4.3. Fuentes de datos
Aplicación de video. Controlador. Instancia del elemento VideoView (1)
Obtener el objeto VideoView desde el layout.
* val videoView = findViewById<VideoView>(R.id.videoView): Obtiene una referencia al elemento VideoView en la interfaz de usuario utilizando su ID.</VideoView>
3.4.3. Fuentes de datos
Aplicación de video. Arquitectura. Obtener archivo de video (1)
Mostrar de tres maneras diferentes de acceder al vídeo guardado en un archivo en disco, en “res/raw”, y, por último, en el directorio “assets”.
2.1. Opción 1: Archivo en disco (almacenamiento externo):
* val clip = File(Environment.getExternalStorageDirectory(), “test.mp4”)
videoView.setVideoPath(clip.path): Carga un archivo de video local almacenado en el dispositivo desde el almacenamiento externo y establece la ruta del video en el elemento VideoView.
2.2. Opción 2: Archivo en directorio res/raw.
* videoView.setVideoURI(Uri.parse(“android.resource://$packageName/raw/test”)): Carga un archivo de video almacenado en el directorio res/raw del proyecto y establece la URI del video en el elemento VideoView.
2.3. Opción 3: Archivo en Internet
* videoView.setVideoPath(“http://videocdn.bodybuilding.com/video/mp4/62000/62792m.mp4”): Carga un video desde una URL en Internet y establece la ruta del video en el elemento VideoView.
3.4.3. Fuentes de datos
Aplicación de video. Arquitectura. Instancia del controlador MediaController (1)
Utilizar un MediaController para que el usuario vea los controles de play, stop, fast forward, etcétera.
* val mediaController = MediaController(this): Crea un objeto MediaController, que proporciona controles de reproducción como botones de reproducción, pausa y avance rápido.
* mediaController.setMediaPlayer(videoView): Asocia el MediaController con el elemento VideoView para controlar la reproducción del video.
* videoView.setMediaController(mediaController): Establece el MediaController en el elemento VideoView para mostrar los controles de reproducción.
3.4.3. Fuentes de datos
Aplicación de video. Arquitectura. Cargar archivo video de MediaController en VideoView (1)
Comenzar la reproducción mediante la función start.
* videoView.requestFocus(): Solicita el enfoque del elemento VideoView, lo que puede ser útil para asegurar que esté listo para recibir eventos de entrada.
* videoView.start(): Inicia la reproducción del video en el elemento VideoView.