3.2.- Arquitectura del API utilizado Flashcards
Arquietectura. Diseño (3)
Antes de comenzar el desarrollo de cualquier sistema de software, el análisis y diseño de la arquitectura es uno de los factores más importantes.
Arquitectura. Modulos (3)
En el caso de las apps multimedia, es vital tener los conceptos claros sobre cómo se estructuran los módulos que las componen.
Arquitectura. Aplicación de audio (3)
Mientras el usuario escucha música desde la app, puede estar trabajando con otras apps . Si necesita detener la reproducción o cambiar la canción, puede lanzar comandos a la aplicación, ya sea mediante la activación de la activity o mediante botones en una notificación en la barra de notificaciones. Se entiende por ello que la app de audio se ejecuta como un servicio en segundo plano.
Arquitectura. Aplicación de video (3)
Si el usuario está viendo un videoclip en otra app, la app tiene simplemente una vista enlazada al reproductor y se ejecuta solo en primer plano. Si se graba vídeo, se necesita una app en primer plano que muestra en pantalla lo que se capta a través de la cámara. Si se adquiere audio, se puede plantear que el servicio corra en background o no, dependiendo del análisis de necesidades.
3.2.1. Arquitectura de una app de audio
Aplicación de audio. Arquitectura en Android (1)
El sistema Android promueve la división de las aplicaciones de reproducción de audio en dos módulos bien diferenciados.
* El módulo de control e interfaz gráfica.
* Un servicio de reproducción de audio corriendo en el background.
3.2.1. Arquitectura de una app de audio
Aplicación de audio. Módulo de control e interfaz gráfica (1)
Mediante la interfaz gráfica permite al usuario lanzar comandos como play, pause, siguiente pista, pista anterior, etcétera.
3.2.1. Arquitectura de una app de audio
Aplicación de audio. Servicio de reproducción de audio en background (1)
Responsable de reproducir cada pista de audio según las acciones que llegan desde el módulo control.
3.2.1. Arquitectura de una app de audio
Aplicación de audio. Cliente - Servidor (1)
La arquitectura de la aplicación con módulo de control y el servicio equivale a la arquitectura cliente-servidor
* Cliente: módulo de control e interfaz gráfica
* Servidor: servicio reproductor de audio
3.2.1. Arquitectura de una app de audio
Aplicación de audio. Clases Cliente (3)
El sistema Android puede funcionar con más de un cliente con el uso de algunas clases de Android. El sistema Android facilita el trabajo mediante el uso de las clases MediaBrowser y MediaBrowserService. Si no se necesita que otras aplicaciones o módulos de terceros accedan al sistema para reproducir audio, se puede utilizar un servicio más sencillo, heredando directamente de la clase Service.
3.2.2. Arquitectura de una app de vídeo
Aplicación de video. Arquitectura (1)
Una app que muestra vídeos no separa los controles del reproductor. El reproductor esta enlazado a una ventana en la que volca las imágenes del vídeo. No obstante, también se debe diferenciar en el código qué parte es la interfaz gráfica y qué otra parte se dedica al control del media, como la carga, la codificación, etcétera.
3.2.2. Arquitectura de una app de vídeo
Aplicación de video. Interfaz gráfica y controlador (1)
La parte gráfica para enlazar la salida del reproductor hacia la interfaz gráfica. Se puede utilizar un elemento VideoView en el layout y cargar en él los vídeos directamente, utilizando un MediaController para permitir que el usuario pueda controlar la reproducción a su gusto.
3.2.2. Arquitectura de una app de vídeo
Aplicación de video. Intefaz gráfica. Elemento VideoView. (1)
Archivo de diseño XML en Android para la interfaz de usuario. El elemento VideoView es un widget proporcionado por Android para reproducir videos.
* <>VideoView>: Elemento XML que representa un componente que es una vista en Android para para reproducir videos.
* android:id=”@+id/videoView”: Asigna un identificador único al VideoView que puede ser utilizado para referenciar y controlar el elemento.
* android:layout_width=”match_parent”: Establece el ancho del VideoView para que coincida con el ancho del contenedor padre.
* android:layout_height=”match_parent”: Establece la altura del VideoView para que coincida con la altura del contenedor padre.
3.2.2. Arquitectura de una app de vídeo
Aplicación de video. Controlador. Instancia del elemento VideoView (1)
- val videoView = findViewById<VideoView>(R.id.videoView): Obtiene una referencia al elemento VideoView en la interfaz de usuario utilizando su ID.</VideoView>
3.2.2. Arquitectura de una app de vídeo
Aplicación de video. Controlador. Obtener archivo de video (1)
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.2.2. Arquitectura de una app de vídeo
Aplicación de video. Controlador. Instancia del controlador MediaController (1)
- 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.2.2. Arquitectura de una app de vídeo
Aplicación de video. Controlador. Cargar archivo video de MediaController en VideoView (1)
- 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.
3.2.2. Arquitectura de una app de vídeo
Aplicación de video. Permisos (1)
En el caso de acceder a archivos de vídeo en el disco o a vídeos en internet añadir los permisos correspondientes en el manifest.
* <>uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
* <>uses-permission android:name=”android.permission.INTERNET” />