presentación de powerpointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2....

20
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA Multimedia Sesión 4: Grabación de audio y vídeo

Upload: others

Post on 28-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IA

Multimedia

Sesión 4: Grabación de audio y vídeo

Page 2: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Puntos a tratar• Grabación de medios• Intents• MediaRecorder

• Síntesis de voz• Gráficos 3D• GLSurfaceView

2

Page 3: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Grabación de medios

• Dos alternativas para la grabación de medios• Intents implícitos• Clase MediaRecorder• Para la captura de audio a bajo nivel AudioRecord

• Permisos necesarios

3

<uses-­‐permission  android:name="android.permission.CAMERA"/><uses-­‐permission  android:name="android.permission.RECORD_AUDIO"/><uses-­‐permission  android:name="android.permission.RECORD_VIDEO"/>

Page 4: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Grabación de vídeo con Intents

• Acción MediaStore.ACTION_VIDEO_CAPTURE

• Parámetros extra (opcionales)• MediaStore.EXTRA_OUTPUT

URIDónde almacenar el vídeo capturadoSin este parámetro se usa MediaStore

• MediaStore.EXTRA_VIDEO_QUALITYEntero (sólo dos valores posibles)0: baja resolución1: alta resolución

4

Page 5: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Ejemplo de grabación de vídeo con Intents

5

private  static  int  GRABAR_VIDEO  =  1;private  static  int  ALTA_CALIDAD  =  1;private  static  int  BAJA_CALIDAD  =  0;  private  void  guardarVideo(Uri  uri)  {        Intent  intent  =  new  Intent(MediaStore.ACTION_VIDEO_CAPTURE);                  if  (uri  !=  NULL)                  intent.putExtra(MediaStore.EXTRA_OUTPUT,  output);          intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,  ALTA_CALIDAD);                  startActivityForResult(intent,  GRABAR_VIDEO);}  @Overrideprotected  void  onActivityResult(int  requestCode,  int  resultCode,  Intent  data)  {        if  (requestCode  ==  GRABAR_VIDEO)  {                Uri  videoGrabado  =  data.getData();                //  Hacer  algo  con  el  vídeo        }}

Page 6: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

MediaRecorder

• Manejo basado en máquina de estados (como MediaPlayer)• Crear el objeto

• Asignar fuentes de contenido multimedia• Definir el formato de salida• Especificar características salida: codec, framerate, resolución• Seleccionar fichero salida• Prepararse para la grabación• Realizar la grabación• Terminar la grabación• Liberar recursos

6

MediaRecorder  mediaRecorder  =  new  MediaRecorder();

Page 7: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Estados del MediaRecorder

7

Page 8: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Uso del MediaRecorder

8

MediaRecorder  mediaRecorder  =  new  MediaRecorder();  //  Configuramos  las  fuentes  de  entradamediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);  //  Seleccionamos  el  formato  de  salidamediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);  //  Seleccionamos  el  codec  de  audio  y  vídeomediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);  //  Especificamos  el  fichero  de  salidamediaRecorder.setOutputFile("/mnt/sdcard/mificherodesalida.mp4");  //  Nos  preparamos  para  grabarmediaRecorder.prepare();

//  GrabamosmediaRecorder.start();

Page 9: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Otros métodos de MediaRecorder

• Detener grabación• Se puede volver a iniciar grabación sin inicializar recursos

• Terminar grabación • Se liberan recursos• Se requiere volver a inicializar

9

mediaRecorder.stop();mediaRecorder.reset();

mediaRecorder.release();

Page 10: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Previsualización

• Asociar grabación a una superficie

• Similar a reproducción de vídeo con MediaPlayer• Incluir vista SurfaceView• Implementar interfaz SurfaceHolder.Callback• Extraer objeto SurfaceHolder del SurfaceView• Asignar superficie a MediaRecorder en manejador surfaceCreated

10

mediaRecorder.setPreviewDisplay(holder.getSurface());

Page 11: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Ejemplo de previsualización

11

     public  void  surfaceCreated(SurfaceHolder  holder)  {                if  (mediaRecorder  !=  null)  {                        try  {                                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);                                mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);                                                                  mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);                                                                  mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);                                mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);                                                                  mediaRecorder.setOutputFile("/sdcard/myoutputfile.mp4");                                                                  //  Asociando  la  previsualización  a  la  superficie                                mediaRecorder.setPreviewDisplay(holder.getSurface());                                mediaRecorder.prepare();                        }  catch  (IllegalArgumentException  e)  {                                Log.d("MEDIA_PLAYER",  e.getMessage());                        }  catch  (IllegalStateException  e)  {                                Log.d("MEDIA_PLAYER",  e.getMessage());                        }  catch  (IOException  e)  {                                Log.d("MEDIA_PLAYER",  e.getMessage());                        }                }        }

Page 12: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Síntesis de voz• Text to Speech desde 1.6• Comprobar si paquete instalado

• En onActivityResult• Si paquete correctamente instalado

resultCode  =  Engine.CHECK_VOICE_DATA_PASS

• En caso contrario

12

Intent  intent  =  new  Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);startActivityForResult(intent,  TTS_DATA_CHECK);

Intent  installIntent  =          new  Intent(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);startActivity(installIntent);

Page 13: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Inicialización de Text to Speech• Inicialización de instancia de TextToSpeech• Asíncrona

• Hablar

13

boolean  ttsIsInit  =  false;TextToSpeech  tts  =  null;  tts  =  new  TextToSpeech(this,  new  OnInitListener()  {        public  void  onInit(int  status)  {                if  (status  ==  TextToSpeech.SUCCESS)  {                        ttsIsInit  =  true;                        //  Hablar                }        }});

tts.speak("Hello,  Android",  TextToSpeech.QUEUE_ADD,  null);

Page 14: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Otros métodos de TextToSpeech

• setPitch• Tono de voz• Parámetro real

• setSpeechRate• Velocidad• Parámetro real

• setLanguage• Pronunciación• Objeto Locale

• stop• shutdown

14

Page 15: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Gráficos 3D

• View es útil para mostrar gráficos sencillos• Es poco eficiente para• Gráficos 3D• Tasas elevadas de actualización

• Para aplicaciones con alta carga gráfica• Utilizaremos SurfaceView• Se dibuja en hilo independiente

No se utiliza el método onDrawNo bloquea hilo principal de eventos

• OpenGL ES para gráficos 3DA partir de Android 1.5, tenemos GLSurfaceView

15

Page 16: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

public  class  VistaSurface  extends  SurfaceView                              implements  SurfaceHolder.Callback  {        HiloDibujo  hilo  =  null;            public  VistaSurface(Context  context)  {                super(context);                      SurfaceHolder  holder  =  this.getHolder();                holder.addCallback(this);        }              public  void  surfaceChanged(SurfaceHolder  holder,  int  format,                                                                    int  width,  int  height)  {                //  La  superficie  ha  cambiado  (formato  o  dimensiones)        }            public  void  surfaceCreated(SurfaceHolder  holder)  {                hilo  =  new  HiloDibujo(holder,  this);                hilo.start();        }            public  void  surfaceDestroyed(SurfaceHolder  holder)  {                hilo.detener();                try  {                        hilo.join();                }  catch  (InterruptedException  e)  {  }        }}

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

SurfaceView

16

Heredamos de SurfaceView e implementamos SurfaceHolder .Callback

Obtenermos el holder de la superficie y registramos el callback

Al crearse la superficie ejecutamos el hilo de dibujo

Al destruirse lo paramos

Page 17: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

       @Override        public  void  run()  {                while  (continuar)  {                        Canvas  c  =  null;                        try  {                                c  =  holder.lockCanvas(null);                                synchronized  (holder)  {                                        //  Dibujar  aqui  los  graficos                                        c.drawColor(Color.BLUE);                                }                        }  finally  {                                if  (c  !=  null)  {                                        holder.unlockCanvasAndPost(c);                                }                        }                }        }

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Hilo de dibujo

17

Obtenemos el lienzo a partir del holder, y lo bloqueamos

Debemos dibujar de forma sincronizada con el holder

Desbloqueamos el lienzo y mostramos en pantalla lo dibujado

Page 18: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

GLSurfaceView

• Se encarga de:• Inicialización y destrucción del contexto OpenGL• Gestión del hilo de render

• No hace falta sobrescribir la clase• Debemos definir un objeto Renderer

18

public  class  MiRenderer  implements  GLSurfaceView.Renderer  {                  public  void  onSurfaceCreated(GL10  gl,  EGLConfig  config)  {  ...  }          public  void  onSurfaceChanged(GL10  gl,  int  w,  int  h)  {  ...  }          public  void  onDrawFrame(GL10  gl)  {  ...  }

}

Page 19: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

public  class  MiActividad  extends  Activity  {        GLSurfaceView  vista;          @Override        protected  void  onCreate(Bundle  savedInstanceState)  {                super.onCreate(savedInstanceState);                vista  =  new  GLSurfaceView(this);                vista.setRenderer(new  MiRenderer());                setContentView(vista);        }          @Override        protected  void  onPause()  {                super.onPause();                vista.onPause();        }          @Override        protected  void  onResume()  {                super.onResume();                vista.onResume();        }}

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

Uso de GLSurfaceView

19

Comunicamos a la vista de OpenGL los eventos de pausa y reanudación

Proporcionamos nuestro renderer

Page 20: Presentación de PowerPointexpertojava.ua.es/dadm/restringido/multimedia/traspas/... · 2013. 2. 6. · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Multimedia © 2012-2013 Depto. Ciencia de la Computación e IA Grabación de audio y vídeo

¿Preguntas...?

20