8

APIs Multimedia

Embed Size (px)

Citation preview

Page 1: APIs Multimedia
Page 2: APIs Multimedia

API  Audio    

En  este  capítulo,  usted  aprenderá  cómo  reproducir  y  grabar  sonidos.  Al  igual  que  con  las  imágenes,  verá  que  puede  reproducir  archivos  de  sonido  locales  y  remotos,  y  tener  un  control  programático  sobre  esa  reproducción.    Las  API  de  audio  son  parte  del  módulo  principal  Ti.Media,  que  contiene  todas  las  APIs  para  la  funcionalidad  relacionada  con  multimedia  .  Contiene  los  siguientes  espacios  de  nombres  (namespaces):    Ti.Media.Sound  -­‐  utilizado  para  reproducir  sonidos  básicos    Ti.Media.AudioPlayer  -­‐  utilizado  para  streaming  de  audio  para  el  control  de  dispositivos  y  de  bajo  nivel  de  la  reproducción  de  audio    Ti.Media.AudioRecorder  -­‐  se  utiliza  para  la  grabación  de  audio  desde  el  micrófono  del  dispositivo    Reproducción  de  sonidos  básicos    Usted  puede  utilizar  el  objeto  Ti.Media.Sound  añadir  beeps  y  sonidos  de  feedback  para  el  usuario.  También  puede  usarlo  para  sonidos  ambientales  (la  reproducción  en  segundo  plano  mientras  la  aplicación  está  activa).  Tenga  en  cuenta,  sin  embargo  que,  con  el  objeto  de  sonido,  todo  el  archivo  de  sonido  se  carga  en  la  memoria  antes  de  reproducirse.  Esto  aumenta  el  uso  de  memoria  en  su  aplicación.  También  crea  un  retraso  antes  de  que  el  sonido  se  puede  jugar  por  primera  vez  (mientras  el  archivo  está  siendo  leído  en  la  memoria).  Puede  establecer  sound.preload  =  true  para  precargar  el  sonido,  pero  todavía  hay  demora    para  que  el  archivo  lea  en  la  memoria.      El  objeto  Sound  incluye  algunos  métodos  útiles,  como  play  (),  pause  ()  y  stop  ()  .  La  propiedad  url  acepta  una  ruta  de  archivo  local  o  una  URL  a  un  archivo  de  sonido    remoto.  (El  archivo  de  sonido  se  debe  descargar  antes  de  que  se  puede  reproducir,  no  será  transmitido).  Usted  puede  controlar  el  volumen,  ya  sea  con  el  método  setVolume  ()  o  estableciendo  la  propiedad  del  volumen.  Consulte  la  documentación  de  la  API  para  la  información  completa.    // create the sound/media object var sound = Titanium.Media.createSound({ url: 'your_sound_file.mp3', preload: true }); var button = Ti.UI.createButton({ title: 'Click to play sound', width:'200', height:'40', top:20 }); button.addEventListener('click', function() { sound.play(); });  

Page 3: APIs Multimedia

Cámara  y  Galería  de  fotos  API    

Aprenderemos  cómo  explorar  la  cámara  y  la  galería  de  fotos  y  sus  APIs.  Veremos  cómo  capturar  una  imagen  de  la  cámara,  utilizarla  en  una  aplicación,  y  guardarla  en  la  galería  o  el  sistema  de  archivos.  También  explora  las  API  de  galería  estrechamente  relacionada,  que  permiten  a  sus  usuarios  buscar  imágenes  de  sus  álbumes  de  fotos  para  su  uso  dentro  de  la  aplicación.    

Las  API  que  se  utilizan  para  acceder  a  la  cámara  y  galería  de  fotos  son  muy  similares.  Ambos  utilizan  la  misma  firma  de  función,  aunque  los  nombres  de  los  métodos  reales  varían.  Vamos  a  empezar  con  un  vistazo  a  la  API  de  la  cámara  y  luego  ver  cómo  se  aplican  las  mismas  técnicas  para  la  galería.      Cámara    Usted  puede  tener  acceso  tanto  a  la  cámara  trasera  y  la  cámara  frontal  en  los  dispositivos  que  las  poseen.  Puede  capturar  imágenes  fijas  y  vídeo  desde  la  cámara.  Por  lo  tanto,  usted  puede  utilizar  las  imágenes  resultantes  en  su  aplicación,  guardarlos  en  el  sistema  de  archivos,  cargarlos  o  guardarlos  en  la  galería.  Se  abre  la  cámara  mediante  una  llamada  al  método  showCamera  ()    Al  hacerlo,  usted  define  tres  funciones  de  devolución  de  llamada  que  se  llaman  segñunel  éxito,  cancelación,  y  los  eventos  de  error,    de  la  solicitud  como  se  muestra  aquí:    // This example is only able to capture video on the iOS platform. // To capture video on the Android platform, see the Android Capture Video Example below. Titanium.Media.showCamera({ success:function(event) { // called when media returned from the camera Ti.API.debug('Our type was: '+event.mediaType); if(event.mediaType == Ti.Media.MEDIA_TYPE_PHOTO) { var imageView = Ti.UI.createImageView({ width:win.width, height:win.height, image:event.media }); win.add(imageView); } else { alert("got the wrong type back ="+event.mediaType); } }, cancel:function() { // called when user cancels taking a picture }, error:function(error) {

Page 4: APIs Multimedia

// called when there's an error var a = Titanium.UI.createAlertDialog({title:'Camera'}); if (error.code == Titanium.Media.NO_CAMERA) { a.setMessage('Please run this test on device'); } else { a.setMessage('Unexpected error: ' + error.code); } a.show(); }, saveToPhotoGallery:true, // allowEditing and mediaTypes are iOS-only settings allowEditing:true, mediaTypes:[Ti.Media.MEDIA_TYPE_VIDEO,Ti.Media.MEDIA_TYPE_PHOTO] });    La  propiedad  saveToPhotoGallery  controla  si  la  foto  o  vídeo  se  guarda  automáticamente  en  la  galería  de  fotos  del  dispositivo.  Usando  Ti.Filesystem  podría  guardar  en  el  sistema  de  archivos  ,  y/o  en  la  galería.    Algunas  otras  propiedades  útiles  incluyen  :    autohide  (boolean  )  si  la  cámara  debe  ocultarse  automáticamente  después  de  que  la  captura  de  los  medios  de  comunicación  se  completa  (  por  defecto  es  true  )  (  iOS  solamente  )  animated  (  boolean)  si  el  diálogo  debería  estar  animado  (por  defecto  es  true)  al  mostrar  y  ocultar  (Android  y  iOS  solamente)  AllowEditing  (boolean  )  si  los  medios  de  comunicación  deben  ser  editables  después  de  la  captura  en  la  interfaz  de  la  interfaz  de  usuario  (  sólo  para  iOS  )  mediaTypes  una  serie  de  constantes  de  tipo  de  medios  de  comunicación  con  el  apoyo  de  la  interfaz  de  usuario  del  dispositivo  de  captura  (  iOS  solamente)  videoMaximumDuration  (float  )  la  duración  del  tiempo  en  milisegundos  para  permitir  la  captura  antes  de  terminar  (  iOS  solamente)  videoQuality  (  Ti.Media  constante)  para  indicar  la  calidad  de  vídeo  durante  la  captura  (  iOS  solamente)  showControls  (boolean  )  para  indicar  si  se  incorporan  controles  en  los  controles  de  interfaz  de  usuario  (  iOS  solamente)  Overlay  (  Ti.UI.View  )  que  se  añade  como  una  superposición  a  la  interfaz  de  usuario  de  la  cámara  (  en  la  parte  superior  )  (  iOS  solamente)            

Page 5: APIs Multimedia

Usted  puede  previamente,  comprobar  la  disponibilidad  de  la  cámara  con  la  propiedad  Titanium.Media.isCameraSupported  :  es  falsa  si  el  dispositivo  no  tiene  cámara.  El  simulador  /  emulador  no  tiene  soporte  de  la  cámara  .  Otros  dispositivos  sin  cámaras  incluyen  tercera  generación  y  más  viejos  iPods,  el  Nook  Color  y  Kindle  Fire  .    Soporte  de  la  cámara  delantera/trasera  Usted  puede  tener  acceso  tanto  a  la  que  se  enfrentan  las  cámaras  frontal  y  posterior  ,  si  el  dispositivo  dispone  de  esas  cámaras.  El  siguiente  fragmento  de  código  muestra  una  forma  en  que  podría  hacer  esto.  Las  propiedades  más  importantes  son  el  método  Ti.Media.CAMERA_REAR  y  Ti.Media.CAMERA_FRONT  así  como  la  Ti.Media.switchCamera()    var cameras = Ti.Media.availableCameras; for (var c=0; c < cameras.length; c++) { // if we have a rear camera ... we add switch button if (cameras[c]==Ti.Media.CAMERA_REAR) { overlay.add(cameraType); cameraType.addEventListener('click',function() { if (Ti.Media.camera == Ti.Media.CAMERA_FRONT) { cameraType.title = "front"; Ti.Media.switchCamera(Ti.Media.CAMERA_REAR); } else { cameraType.title = "rear"; Ti.Media.switchCamera(Ti.Media.CAMERA_FRONT); } }); break; } }

Page 6: APIs Multimedia

Galería    Usted  abre  la  galería  nativa  mediante  una  llamada  al  método  

openPhotoGallery  ()  Al  igual  que  con  la  cámara  ,  se  definen  tres  funciones  de  devolución  de  llamada  que  se  llaman  según  el  éxito  ,  cancelación  ,  y  eventos  de  error.  Los  métodos  de  la  cámara  y  de  la  galería  son  muy  similares.  Basta  con  sustituir  showCamera  ()  con  openPhotoGallery  ()  en  el  bloque  de  código  anterior  y  usted  será  bueno  para  ir.            Algunas  otras  propiedades  útiles  incluyen  :    animated  (  boolean)  si  el  diálogo  debería  ser  animado  (por  defecto  es  true)  al  mostrar  y  ocultar  AllowEditing  (boolean  )  si  los  medios  de  comunicación  deben  ser  editables  después  de  la  captura  en  la  interfaz  de  la  interfaz  de  usuario  saveToPhotoGallery  (boolean  )  si  los  medios  modificados  deben  ser  guardados  fuera  de  la  galería  ,  por  lo  general  sólo  es  útil  con  AllowEditing  =  true  mediaTypes  una  serie  de  constantes  de  tipo  de  medios  de  comunicación  con  el  apoyo  de  la  interfaz  de  usuario  del  dispositivo  de  captura  showControls  (  boolean  )  para  indicar  si  el  incorporado  en  los  controles  de  interfaz  de  usuario  se  debe  mostrar  overlay  (  Ti.UI.View  )  que  se  añade  como  una  superposición  a  la  interfaz  de  usuario  de  la  cámara  (  en  la  parte  superior  )  popoverView  (  Ti.UI.View  )  (sólo  iPad)  para  posicionar  la  galería  de  fotos  en  una  vista  específica  (popover)  arrowDirection  (sólo  iPad)  controlar  el  tipo  de  flecha  y  la  posición  de  la  galería                              

Page 7: APIs Multimedia

API  de  Vídeo    Incluye  cómo  se  pueden  insertar  vídeos  dentro  de  sus  aplicaciones.  También  cómo  reproducir  archivos  locales  y  cómo  transmitir  vídeos  remotos.        Podemos  utilizar  el  Titanium.Media.VideoPlayer  para  reproducir  vídeos  en  la  app  de  Titanium.  Este  objeto  crea  cuando  se  llama  Titanium.Media.createVideoPlayer  ()  Se  proporcionan  métodos  útiles,  como  el  play()  ,  pause()  y  stop()  .      Puede  reproducir  archivos  de  vídeo  locales,  llamamos  al  método  setMedia()  o  ajustando  la  propiedad  de  medios.  Ambos  aceptan  un  archivo  (File)  o  un  objeto  Blob.  Puede  reproducir  un  vídeo  remoto  llamando  al  método  setUrl  ()  o  estableciendo  la  propiedad  url.  Por  último,  se  puede  establecer  la  propiedad  de  reproducción  automática  en  true  para  reproducir  automáticamente  el  vídeo.    El  VideoPlayer  es  tratado  como  una  View  regular  de  Titanium.  Por  lo  tanto,  puede  superponer  las  imágenes  y  vistas  sobre  el  VideoPlayer  mediante  su  inclusión  en  la  jerarquía  de  vistas.  De  esta  manera:    var activeMovie = Titanium.Media.createVideoPlayer(); // create a label var movieLabel = Titanium.UI.createLabel({ text:'Do not try this at home', width:'auto', height:35, color:'white', font:{fontSize:24,fontFamily:'Helvetica Neue'} }); // add label to view activeMovie.add(movieLabel); En  Android,  el  VideoPlayer  debe  ser  utilizado  de  pantalla  completa.  No  puede  ser  embebido  en  una  vista  más  pequeña.  Esto  se  debe  a  que  en  Android,  el  VideoPlayer  no  es  técnicamente  un  proxy  para  un  objeto  de  vista  nativo  como  lo  es  en  iOS.  En  su  lugar,  la  creación  de  la  VideoPlayer  gatilla  un  proceso  intent  que  se  lanza  el  reproductor  de  video    de  Actividad  nativa.  Es  por  esta  razón  que  en  Android,  no  se  peude  llamar  a  win.add  (videoPlayer).  Si  es  así  causaría  un  error.      En  iOS,  puede  incrustar  el  reproductor  de  video  dentro  de  una  ventana  o  vista;  que  no  tiene  que  ser  mostrado  a  tamaño  completo.  Basta  con  establecer  las  propiedades  de  alto  y  ancho  en  la  VideoPlayer.  Para  ver  el  reproductor  de  pantalla  completa,  se  puede  establecer  videoPlayer.fullscreen  =  true.        

Page 8: APIs Multimedia

Usted  puede  controlar  la  forma  en  que  se  muestran  los  controles  de  reproducción  de  vídeo  para  el  reproducto.  Usted  puede  "integrar"  el  dentro  del  reproductor,  de  ésta  manera:    activeMovie.add(movieLabel); var activeMovie = Titanium.Media.createVideoPlayer({ url:'../movie.mp4', movieControlStyle: Titanium.Media.VIDEO_CONTROL_EMBEDDED });