0% encontró este documento útil (0 votos)
83 vistas38 páginas

Desarrollo de Soluciones Móviles: Multimedia

El documento habla sobre el desarrollo de aplicaciones móviles y contiene información sobre formatos de audio y video soportados, reproducción de contenido multimedia, uso de servicios REST y autenticación en servicios remotos.

Cargado por

ymarquez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
83 vistas38 páginas

Desarrollo de Soluciones Móviles: Multimedia

El documento habla sobre el desarrollo de aplicaciones móviles y contiene información sobre formatos de audio y video soportados, reproducción de contenido multimedia, uso de servicios REST y autenticación en servicios remotos.

Cargado por

ymarquez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Desarrollo de Soluciones

Móviles

Semana 3
Pedro Yuri Marquez Solis
Temario

1. Contenido multimedia: formatos soportados, audio y video


2. Base de datos remota
3. Servicios Rest: fundamentos, cabecera y tipos de peticiones REST
4. Autentificación en servicio remotos
5. Uso de Servicios REST API.
Contenido multimedia: formatos soportados, audio y video
Formatos de audio y video soportados
formatos de audio : Formatos Video soportados :
AAC LC/LT
HE-AACv1 (AAC+) H.263
HE-AACv2 (Enhanced ACC+) H.264 AVC
AMR-NB MPEG-4 SP
AMR-WB
MP3
MIDI
Ogg Vorbis
PCM/Wave
Reproducción de audio - clase MediaPlayer

• Clase utilizada para la reproducción de medios


• Medios desde diferentes fuentes.
Método create
MediaPlayer resourcePlayer = [Link](appContext, [Link].my_audio);
MediaPlayer filePlayer = [Link](appContext,[Link]("[Link]
MediaPlayer urlPlayer = [Link](appContext, [Link]("[Link]
MediaPlayer contentPlayer = [Link](appContext, [Link].DEFAULT_RINGTONE_URI);

Método setDataSource
MediaPlayer mediaPlayer = new MediaPlayer();
[Link]("/sdcard/test.mp3");
[Link]();
Reproducción de audio - clase MediaPlayer

• Clase utilizada para la reproducción de medios


• Medios desde diferentes fuentes.

Al instanciar la clase MediaPlayer se encontrará en estado idle. En este estado lo


primero que debemos hacer es indicar el fichero a reproducir. Una vez hecho esto
pasa a estado inicializado. En este estado ya sabe qué fichero ha de reproducir,
pero todavía no se ha preparado para ello (inicializar bufferes, etc), por lo que no
podrá comenzar la reproducción. Para prepararlo deberemos llamar al método
prepare(), con lo que tendremos el reproductor listo para empezar a reproducir el
audio
Reproducir audio con MediaPlayer
Otros métodos
• Control de repetición if (![Link]())
[Link](true);
• Volumen
[Link](1f, 0.5f);
• Activación de pantalla
• Duración [Link](true);
[Link]();
int pos = [Link]();
int duration = [Link]();
[Link](pos + (duration-pos)/10);
Liberación del reproductor de medios

• Una acción muy importante que deberemos llevar a cabo una vez
haya finalizado definitivamente la reproducción (porque se vaya a
salir de la aplicación o porque se vaya a cerrar la actividad donde se
reproduce el audio) es destruir la instancia de la clase MediaPlayer y
liberar su memoria. Para ello deberemos hacer uso del método
release.

if(mediaPlayer!=null) {
[Link]();
mediaPlayer = null;
}
Reproducir vídeo con VideoView

Similar a la reproducción de audio, excepto


• No es posible tener un vídeo como recurso de la aplicación
• Se necesita una superficie sobre la que reproducir
Vista VideoView encapsula
• Superficie sobre la que reproducir
• Objeto MediaPlayer

<VideoView android:id="@+id/superficie"
android:layout_height="fill_parent" [Link]("[Link]
android:layout_width="fill_parent"> [Link]("/sdcard/test2.3gp");
</VideoView>
Reproducción de audio en segundo plano
Para dejar nuestro reproductor funcionando en segundo plano aunque
cerremos la actividad, por ejemplo para implementar un reproductor de
música o de podcasts. Deberemos iniciar el reproductor desde un servicio,
en lugar de una actividad.
Cuando el móvil no se esté utilizando normalmente la pantalla y la CPU se apagarán
automáticamente para ahorrar batería. Si esto ocurre la música se detendrá. Para evitarlo
necesitamos adquirir lo que se conoce como un wake lock. Esto nos permitirá mantener
el móvil activo aunque el usuario no lo esté utilizando.
<uses-permission android:name="[Link].WAKE_LOCK" />

indicar al reproductor de medios que necesitamos un wake lock parcial (se puede apagar la pantalla pero no la CPU):
[Link](getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
Reproducción de audio en segundo plano
public class MiServicio extends Service implements [Link] {
private static final String ACTION_PLAY = "[Link]";
private static final String EXTRA_URI = "[Link]";
MediaPlayer mMediaPlayer = null;
public int onStartCommand(Intent intent, int flags, int startId) {
if ([Link]().equals(ACTION_PLAY)) {
mMediaPlayer = new MediaPlayer();
[Link]([Link](EXTRA_URI));
[Link](this);
[Link]();
}
}
public void onPrepared(MediaPlayer player) {
[Link]();
}
}
Reproducir vídeo mediante VideoView

Muy similar a la reproducción de audio, salvo dos particularidades.


1: no es posible reproducir un clip de vídeo almacenado como parte
de los recursos de la aplicación.
No existe ningún método para reproducir un vídeo a partir de un id de
recurso. Lo que si que podemos hacer es representar un recurso raw de
tipo vídeo mediante una URL.
La URL tendrá la siguiente forma (hay que especificar como host el
paquete de nuestra aplicación, y como ruta el id del recurso):

[Link]("[Link]://[Link]/" + [Link])
Reproducir vídeo mediante VideoView

1: el vídeo necesitará de una superficie para poder reproducirse. Esta


superficie se corresponderá con una vista dentro del layout de la
actividad.
La más sencilla es hacer uso de una vista de tipo VideoView, que
encapsula tanto la creación de una superficie en la que reproducir el
vídeo como el control del mismo mediante una instancia de la clase
MediaPlayer.
<VideoView android:id="@+id/superficie"
android:layout_height="fill_parent"
[Link]("[Link]
android:layout_width="fill_parent">
[Link]("/sdcard/test2.3gp");
</VideoView>
Reproducir vídeo con VideoView

Control de reproducción
VideoView videoView = (VideoView)findViewById([Link]);
• setKeepScreenOn [Link](true);
• start [Link]("/sdcard/ejemplo.3gp");
• stopPlayback
if ([Link]())
• pause [Link]([Link]()/2);
• seekTo [Link]();
// Hacer algo durante la reproducción

[Link]();
Reproducir vídeo con MediaPlayer

2. Se requiere superficie de tipo SurfaceHolder


• Por ejemplo: SurfaceView
• Asignación de la superficie al objeto MediaPlayer
• Método setDisplay
• Inicialización de la superficie asíncrona
• implements [Link]
• Método surfaceCreated
[Link]
VideoView superficie; [Link](new [Link]() {
TextView tiempo; public void onPrepared(MediaPlayer mp) {
Button reproducir, detener; [Link]();

@Override int duracion = [Link]()/1000;


public void onCreate(Bundle savedInstanceState) { int minutos = duracion/60;
[Link](savedInstanceState); int segundos = duracion - minutos*60;
setContentView([Link].activity_main); [Link]("Duración " + minutos + ":" + segundos);
inicializarComponentes(); }
} });

private void inicializarComponentes() { [Link](new [Link]() {


superficie = (VideoView)findViewById([Link]); public void onClick(View v) {
tiempo = (TextView)findViewById([Link]); // Habilitar y deshabilitar botones
reproducir = (Button)findViewById([Link]); [Link](true);
detener = (Button)findViewById([Link]); [Link](false);
[Link]("Duración 0");
// Detener la ejecución del video
[Link](new [Link]() { [Link]();
public void onClick(View v) {
// Habitlitar y deshabilitar botones [Link]("Duración 0");
[Link](false); }
[Link](true); });
// Inicializar la reproducción de video }
[Link]([Link]("[Link]://" + getPackageName()+ "/" +
[Link]));
} @Override
}); protected void onDestroy() {
[Link]();
// Manejador del evento OnPreparedListener para comenzar }
// la reproducción y poder mostrar la duración del video
Base de datos Remota
Acceso a base de datos Remota

Cuando las aplicaciones móviles se


conectan a un servidor web, normalmente
no buscan obtener un documento web,
sino que lo que hacen es acceder a
servicios.
Estos servicios nos pueden servir para
realizar alguna operación en el servidor, o
para obtener información en un formato
que nuestra aplicación sea capaz de
entender y de procesar.
Servicios Rest: fundamentos, cabecera y tipos de peticiones
REST
Acceso desde una aplicación móvil

• Necesitamos obtener información, no presentación


• Resulta adecuado acceder a servicios web
Definición de servicio
Interfaz que da acceso a un módulo de funcionalidad
Servicio web
Servicio al que se accede mediante protocolos web (HTTP, XML)
Tipos de servicios
• SOAP : Muy pesado. Adecuado para integración de aplicaciones
• RESTful : Ligero y sencillo. Adecuado para web y móviles
Fundamentos de REST
REST: REpresentational State Transfer. Son un conjunto de restricciones
que, aplicadas al diseño de un sistema, crean un estilo arquitectónico
caracterizado por:
• Debe ser un sistema cliente-servidor
• Tiene que ser sin estado
• Tiene que soportar cachés
• Tiene que ser un sistema uniformemente accesible (a través de URIs)
• Tiene que ser un sistema por capas (escalabilidad)
Estas restricciones no dictan qué tipo de tecnología utilizar.
Podemos utilizar las infraestructuras de red existentes
• Un ejemplo de sistema RESTful: la web estática
Recursos
Un recurso es “cualquier cosa” que pueda ser accedido y transferido a través
de la red:
• Ejemplos: una noticia de un periódico, la temperatura de una ciudad, un
valor de IGV almacenado en una BD...
• Cada uno de los recursos puede ser accedido directamente, y de forma
independiente, pero diferentes peticiones podrían “apuntar” al mismo dato.
• La representación de un recurso depende del tipo solicitado por el
cliente (tipo MIME)
Representación
• Lo que se intercambia entre los consumidores (clientes) y los
productores de servicios son representaciones de los recursos.
• Durante el ciclo de vida del servicio web, puede haber varios
clientes solicitando recursos. Clientes diferentes pueden solicitar
diferentes representaciones del mismo recurso
• El “lenguaje” de intercambio de información (representación) con
el servicio queda a elección del desarrollador
• Ejemplos de representaciones comunes son:
URI
Una URI (Uniform Resource Identifier), en un servicio web RESTful es un
hiper-enlace a un recurso, y es la única forma de intercambiar
representaciones entre clientes y servidores
• En un sistema REST la URI no cambia a lo largo del tiempo
• Si, por ejemplo, en nuestro sistema tenemos información de cursos,
podríamos acceder a una lista de cursos disponibles mediante la siguiente
URL:
[Link]
<?xml version ="1.0" ?>
<j:Cursos xmlns:j ="[Link] xmlns:xlink="[Link]
< Curso id="1" xlink:href="[Link]
< Curso id="2" xlink:href="[Link]
< Curso id="4" xlink:href="[Link]
</j:Cursos>
URI
Formato de las URI:
{protocolo}://{dominio}/{ruta del recurso}?{filtrado opcional}

[Link] --> numérico


[Link]  string
Tipos de peticiones REST
Las operaciones que podemos realizar también se estandarizan. Dependiendo
del método http que usemos para acceder a una misma URI estaremos
indicado el tipo de acción a realizar.
La correspondencia de estas acciones con métodos HTTP son:
Método URI (ejemplo) Acción
Get [Link] Solicitar todos
Get [Link] Solicitar uno
Post [Link] crear
Put [Link] Modificar
Delete [Link] Eliminar
Tipos de resultados
• Después de una petición el servicio nos devolverá el código HTTP de estado
para indicarnos el resultado.

• 200  petición correcta


• 201  al crear un recurso
• 204  no content al eliminarlo
• 404  not found cuando el recurso no existe
• 401  no autorizado
• 403  forbidden – credenciales incorrectas o no disponemos de permisos
• 500  Internal server error – hay un problema al procesar la petición
Estructuras JSON
JSON es una representación muy utilizada para formatear los recursos
solicitados a un servicio web RESTful
• Se trata de ficheros de texto planos que pueden ser manipulados muy
fácilmente utilizando Javascript (función eval())
• Los elementos están contenidos entre llaves
• Los valores de los elementos se organizan en pares con la estructura
“nombre:valor ” separados por comas
• Las secuencias de elementos están contenidas entre corchetes

[{"texto":"Hola, ¿qué tal?", "usuario":"Pepe“ },


{"texto":“sistema","usuario":"Ana" }]
Parsing de JSON en Android

Podemos utilizar los objetos JSONArray y JSONObject


• Pueden encontrarse anidados

También podemos componer mensajes JSON


• Establecer atributos con métodos put- (equivalentes a los get-)
• Obtenemos el texto JSON llamando a toString()
Autenticación en servicios remotos
Los servicios REST están fuertemente vinculados al protocolo HTTP, por lo
que los mecanismos de seguridad utilizados también deberían ser los que
define dicho protocolo.
Pueden utilizar los diferentes tipos de autentificación definidos en
HTTP:Basic, Digest, y X.509.
Cuando se trata de servicios que se dejan disponibles para que cualquier
desarrollador pueda acceder a ellos, utilizar directamente estos
mecanismos básicos de seguridad puede resultar peligroso. En estos casos
la autentificación suele realizarse mediante el protocolo OAuth
Seguridad HTTP básica

Deberemos proporcionar en la llamada al servicio las cabeceras de


autentificación al servidor, con los credenciales que nos den acceso a
las operaciones solicitadas.
En caso de que utilicemos HttpClient de Apache, se especificará de la
siguiente forma:
DefaultHttpClient client = new DefaultHttpClient();
[Link]().setCredentials(
new AuthScope(“acadé[Link]", 80),
new UsernamePasswordCredentials("usuario", "password")
);
Protocolo Oauth – Open Authorization

Si queremos permitir que terceros puedan acceder a nuestros servicios.


La aplicación que acceda a nuestro servicio estaría recogiendo el login y el
password del usuario, y enviándolas a nuestro servicio. Cuando el servicio
responda la aplicación sabrá si las credenciales eran válidas o no. Es decir,
dicha aplicación contará con las credenciales validadas de un usuario, y
podría tratar dicha información de forma inadecuada o fraudulenta.
Por lo tanto, deberíamos evitar que las credenciales del usuario pasen por
una aplicación que no controlemos nosotros.
Protocolo Oauth – Open Authorization

Proceso:
1. Registrar la aplicación en el servicio a emplear.
2. Obtener las credenciales de la aplicación para acceder como cliente.
oauth_consumer_key y oauth_consumer_secret.
Credenciaales que identifican a nuestra aplicación en el servicio.
Se deben incluir en la petición para que el servicio conozca la
identidad de la aplicación que está accediendo.

3. Disponer de las credenciales del usuario final.


Proceso de autenticación
Acceso a servicios de terceros

También podría gustarte