Compartir a través de


Windows Phone

Creación de aplicaciones con medios para Windows Phone

Mark Hopkins

 

Windows Phone es una excelente plataforma para consumir medios. El reproductor de medios integrado y el Catálogo de soluciones de Windows Phone son mis principales fuentes de material para escuchar, tanto para la música como para mis podcasts favoritos. Escucho música en el gimnasio, en el auto o en el bus e incluso cuando me estoy preparando para comenzar el día. Me encantan las aplicaciones de medios que me permiten descubrir material que de otra forma tal vez nunca hubiera conocido. Por ejemplo, conocí mucha música nueva a través de la función integrada Smart DJ, como también gracias a varias otras aplicaciones de transmisión de música. Varias aplicaciones me permiten acceder a contenidos de vídeo proporcionados por YouTube y Vimeo.

Si está interesado en crear aplicaciones con medios para Windows Phone, debe colocar ciertas piezas en su lugar para lograr una integración óptima con el sistema operativo. En especial, debe asegurarse de que su aplicación participe y aparezca en el Concentrador de música y vídeo.

Integración con el Concentrador de música y vídeo

Los “concentradores” proporcionan un lugar conveniente para que los usuarios busquen los contenidos. El Concentrador de música y vídeo es el lugar propicio para los medios en los dispositivos basados en Windows Phone. Nos dirigimos ahí no solo para ver los contenidos, sino también porque nos otorga acceso instantáneo a los medios que nos resultan más importantes. De acuerdo con una investigación realizada por el equipo de Windows Phone, descubrimos que las cosas más comunes que los usuarios desean hacer es:

  1. Retomar algo que estaban reproduciendo.
  2. Ir al contenido que reproducen con mayor frecuencia.
  3. Buscar contenidos que recién agregaron al teléfono.

El Concentrador de música y vídeo ubica el contenido se centra en estas tres categorías e integra las aplicaciones de medios y la biblioteca de medios local en una sola experiencia. La Figura 1 muestra la vista panorámica completa del Concentrador de música y vídeo en Windows Phone.

The Music + Videos Hub on Windows Phone
Figura 1 Concentrador de música y vídeo en Windows Phone

Además de ser excelente para los usuarios finales, el Concentrador de música y vídeo aporta un gran valor a las aplicaciones. No requiere de una personalización proactiva por parte del usuario, de manera que el contenido se descubre fácilmente. Si usted tiene una aplicación que reproduce contenidos de música o vídeo, debería integrarla con el Concentrador de música y vídeo. Es una parte importante de la experiencia de Windows Phone.

Existen cuatro puntos clave de integración que su aplicación puede aprovechar en la experiencia de música y vídeo:

  1. Rellenar el mosaico Reproduciendo ahora.
  2. Agregar elementos a las listas Nuevo e Historial.
  3. Determinar si la aplicación se inició desde un elemento Nuevo o del Historial.
  4. Integración en la lista Aplicaciones.

Rellenar el mosaico Reproduciendo ahora

Este mosaico es el lugar más destacado del Concentrador de música y vídeo; muestra una imagen relativamente grande del último contenido que se reprodujo o que actualmente está en pausa. Al pulsar este mosaico se reanuda o se inicia la reproducción del contenido visible. Al rellenar esta imagen, se promueve su contenido y además se crea un punto de entrada adicional a la experiencia de reproducción de la aplicación. Para actualizar el elemento Reproduciendo ahora, debe configurar la propiedad MediaHistory.Instance.NowPlaying, tal como se muestra en las siguientes líneas de código (en este artículo uso C#):

MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
// <hubTileImageStream> must be a valid ImageStream.
mediaHistoryItem.ImageStream = <hubTileImageStream>;
mediaHistoryItem.Source = "";
mediaHistoryItem.Title = "NowPlaying";
mediaHistoryItem.PlayerContext.Add("keyString", "Song Name");
MediaHistory.Instance.NowPlaying = mediaHistoryItem;

Agregar elementos al Historial

Los contenidos que se reprodujeron recientemente en el teléfono se pueden mostrar en el mosaico Historial al usar el método MediaHistory.Instance.WriteRecentPlay. Al igual que en el mosaico Reproduciendo ahora, los mosaicos Historial muestran imágenes y se pueden pulsar para iniciar la reproducción de su contenido. Aquí vemos cómo actualizar la lista Historial:

MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
// <hubTileImageStream> must be a valid ImageStream.
mediaHistoryItem.ImageStream = <hubTileImageStream>;
mediaHistoryItem.Source = "";
mediaHistoryItem.Title = "RecentPlay";
mediaHistoryItem.PlayerContext.Add("keyString", "Song Name");
MediaHistory.Instance.WriteRecentPlay(mediaHistoryItem);

Agregar elementos nuevos

Los mosaicos “Nuevo” funcionan igual que los mosaicos del Historial, pero muestran los contenidos que se agregaron recientemente al teléfono. Por ejemplo, un mosaico Nuevo puede promover un archivo de música que recién se descargó al teléfono. Sin embargo, estos mosaicos también se pueden usar para cosas como estaciones de radio o listas de reproducción recién creadas. Aquí también se aplica la misma acción de iniciar la reproducción al pulsar el mosaico. El siguiente código demuestra cómo actualizar la lista Nuevo:

MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
// <hubTileImageStream> must be a valid ImageStream.
mediaHistoryItem.ImageStream = <hubTileImageStream>;
mediaHistoryItem.Source = "";
mediaHistoryItem.Title = "MediaHistoryNew";
mediaHistoryItem.PlayerContext.Add("keyString", "Song Name");
MediaHistory.Instance.WriteAcquiredItem(mediaHistoryItem);

Determinar cómo se inició la aplicación

Los mosaicos Historial y Nuevo solo se deben usar para iniciar la reproducción y no como puntos de inicio genéricos hacia la aplicación. No hay problemas si se inició la aplicación y se muestra la interfaz de usuario. Lo importante es que la música o el vídeo debe comenzar con un simple toque, para que la experiencia sea eficiente y coherente.

Para determinar si la aplicación se inició desde un mosaico Historial o Nuevo, comience por reemplazar el método virtual OnNavigatedTo. La información de NavigationContext se usa para determinar los medios asociados con el elemento, en este caso una canción de la biblioteca de medios del dispositivo. La canción se comienza a reproducir en el controlador de eventos Loaded de PhoneApplicationPage cuando se termina de cargar la página. Para obtener más información sobre esto, descargue el Ejemplo del Concentrador de música y vídeo de MSDN Library en bit.ly/y0tEiX.

El código en la Figura 2 muestra cómo determinar si la aplicación se inició o no desde un elemento de la lista Historial o Nuevo.

Figura 2 Determinar si una aplicación se inició o no desde un elemento de la lista Historial o Nuevo

// Indicates whether the app was launched from a MediaHistoryItem.
bool _historyItemLaunch = false;
// Key for MediaHistoryItem key-value pair.
const String _playSongKey = "keyString";   
// The song to play.
Song _playingSong = null;
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
  MediaLibrary library = new MediaLibrary();
  if (NavigationContext.QueryString.ContainsKey(_playSongKey))
  {
    // The app launched from a history item.
    // Change _playingSong even if something was already playing
    // because the user directly chose a song history item.
    // Use the navigation context to find the song by name.
    String songToPlay = NavigationContext.QueryString[_playSongKey];
    foreach (Song song in library.Songs)
    {
      if (0 == String.Compare(songToPlay, song.Name))
      {
        _playingSong = song;
        break;
      }
    }
    // Set a flag to indicate that the app started from a
    // history item and that it should immediately start
    // playing the song after the UI has finished loading.
    _historyItemLaunch = true;
  }
}
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
  if (_historyItemLaunch)
  {
    // Launched from a history item, start playing the song.
    if (_playingSong != null)
    {
      MediaPlayer.Play(_playingSong);
    }
  }
}

Integración con la página Aplicaciones

Si la aplicación solicita una o más de las API mencionadas, esta aparecerá automáticamente en la lista Aplicaciones dentro del Concentrador, además de aparecer en la lista principal de aplicaciones. Esto permite acceder fácilmente a la aplicación y encontrarla rápidamente; así forma parte de la experiencia total de los medios. Esta integración automática ocurre cuando el proceso de envío y certificación del Concentrador de aplicaciones detecta que la aplicación solicitó las API MediaHistory y MediaHistoryItem y cambia el manifiesto de la aplicación al configurar el atributo HubType, para reflejar que se trata de una aplicación de medios. Esto lo puede configurar por su propia cuenta antes del envío (con fines de prueba solamente) al actualizar el elemento <App> en el archivo WMAppManifest.xml en su proyecto de Windows Phone:

<App  ... HubType="1">

Esto permitirá que el programa aparezca en la lista Aplicaciones durante las pruebas. Observe que el proceso de envío a AppHub sobrescribirá este archivo antes de la publicación en función de las API que detecte y las que llame la aplicación.

Archivos gráficos requeridos

Ya que el Concentrador de música y vídeo se centra en los contenidos, la cantidad de espacio que recibe cada aplicación depende del uso. Esto quiere decir que mientras más se use la aplicación, más destacado será el contenido. Para los clientes que usan la aplicación a menudo, el Concentrador de música y vídeo se llenará de contenido, lo que le brinda una excelente oportunidad de promoción.

Como el Concentrador de música y vídeo agrupa contenidos de varias fuentes diferentes, es importante que reflexione sobre el diseño visual del mosaico, para distinguir su aplicación del resto. El significado de esto depende de la aplicación. Tenga presente que, por ejemplo, el usuario tendrá una imagen de álbum genérico que será visible en la misma lista de sus álbumes reales. Si usted posee una estación de radio que justamente está reproduciendo una canción de un álbum, la aplicación de su estación de radio debería mostrar un mosaico que sea visualmente diferente de la imagen de la carátula del álbum que vería al reproducir la canción desde la biblioteca de medios. Plantéese la posibilidad de usar mosaicos que muestren su marca o imagen para el contenido.

Los mosaicos que aparecen en el Concentrador de música y vídeo deben cumplir con las siguientes reglas iconográficas:

  • Todos los mosaicos deben contener el título o logo de la aplicación.
  • El mosaico Reproduciendo ahora debe tener 358 x 358 píxeles. El archivo debe pesar 75 KB o menos.
  • Los otros mosaicos deben medir 173 x 173 píxeles.
  • La propiedad Title de la clase MediaHistoryItem se debe configurar en un texto que represente el contenido, como por ejemplo el nombre de una estación o el título del vídeo.

Para no confundir a los usuarios, los mosaicos no deben contener imágenes del álbum, a menos que el álbum se reproduzca al presionar el mosaico. Si la aplicación reproduce una secuencia, el gráfico del mosaico debe describir la secuencia en reproducción. Aunque esto no es un requerimiento para la certificación, es un procedimiento recomendado.

Reproducción de medios

Al reproducir un vídeo, la experiencia es similar, ya sea si crea una aplicación con XNA Framework o Silverlight. En las aplicaciones con XNA Framework, use la clase MediaPlayerLauncher, la que inicia el reproductor de medios de Windows Phone cuando se solicita MediaPlayerLauncher.Show. En Silverlight, use la API MediaElement, la cual le permite una mayor personalización de la experiencia del usuario (como la apariencia y la ubicación de los controles), pero finalmente también usa el reproductor de medios de Windows Phone para mostrar el vídeo. El caso del audio es un poco más interesante.

MediaElement y SoundEffect

En las aplicaciones XNA Framework, use la clase SoundEffect (o las clases relacionadas SoundEffectInstance y DynamicSoundEffectInstance) para reproducir audio. Estas clases solo permiten reproducir orígenes de audio en formato WAV. Pero otorgan un control mayor sobre la reproducción y ofrecen algunas funciones interesantes, como la capacidad de reproducir hasta 16 sonidos simultanemente y la posibilidad de mezclarlos en la salida.

En las aplicaciones Silverlight, puede usar la clase MediaElement para reproducir audio, además de vídeo. MediaElement permite reproducir WAV, WMA, MP3 y otros orígenes de audio. Consulte los Códecs de medios compatibles con Windows Phone (bit.ly/aflZrb) para conocer la lista completa de formatos de audio que se pueden reproducir en Windows Phone. MediaElement permite reproducir un solo sonido a la vez. Si hay otro sonido en reproducción, MediaElement lo detendrá al iniciar la reproducción de un sonido nuevo.

En las aplicaciones Silverlight, también puede usar la clase SoundEffect para la reproducción de audio. Para usar una API de XNA Framework en una aplicación Silverlight, deberá simular el bucle Game de las aplicaciones con XNA Framework. Para esto, generalmente creo un método llamado StartGameLoop para configurar un GameTimer. Llamo el método StartGameLoop desde el constructor de mi clase derivada PhoneApplicationPage (consulte la Figura 3). GameTimer es una nueva clase disponible en el Windows Phone 7.1 SDK para facilitar la integración de Silverlight y XNA Framework.

Figura 3 Mi StartGameLoop de Silverlight simula el bucle Game de XNA Framework

// Constructor
public MainPage()
{
  InitializeComponent();
   StartGameLoop();
}
private void StartGameLoop()
{
  // Timer to simulate the XNA game loop (SoundEffect
  // class is from the XNA Framework).
  GameTimer gameTimer = new GameTimer();
  gameTimer.UpdateInterval = TimeSpan.FromMilliseconds(33);
  // Call FrameworkDispatcher.Update to update the XNA Framework internals.
  gameTimer.Update += delegate { try { FrameworkDispatcher.Update(); } catch { } };
  // Start the GameTimer running.
  gameTimer.Start();
  // Prime the pump or you'll get an exception
  // on the first XNA Framework call.
  FrameworkDispatcher.Update();
}

Después de implementar este bucle de temporizado, puede llamar las API de XNA Framework desde cualquier otro lugar en la clase derivada PhoneApplicationPage.

Certificación del Catálogo de soluciones

Cuando una aplicación llama las clases MediaHistory o MediaHistoryItem, se la considera como una aplicación del Concentrador de música y vídeo, y al instalarla en el teléfono aparecerá en la lista Aplicaciones. El proceso de envío detecta que la aplicación usa esta clase y actualiza automáticamente el tipo del concentrador a Música y vídeo en el archivo de manifiesto de la aplicación de Windows Phone.

Para que la aplicación se acepte en el Catálogo de soluciones, debe cumplir con varios requisitos de certificación relacionados con la reproducción de medios. En el momento de escribir este artículo, estos requisitos aparecían documentados en las secciones 6.4 y 6.5 de los Requisitos para la certificación de aplicaciones para Windows Phone en bit.ly/kN6N7Z. Los requisitos de certificación siempre están sujetos a modificación y se actualizan regularmente, así que para todas las pautas que aparecen a continuación, asegúrese de contar con la versión más reciente.

Los requisitos de certificación dictaminan que cuando se inicia la aplicación no se puede interrumpir la música que está reproduciendo el usuario. Esto tiene sentido, ya que el usuario puede estar disfrutando su música favorita mientras interactúa con un juego, por ejemplo. Las secciones 6.5.1 y 6.5.2 abordan esta situación puntual.

También resulta interesante la sección 6.5.3, la cual establece que:

Una aplicación puede interrumpir la música actualmente en reproducción en el teléfono para reproducir un vídeo de movimiento completo que no sea interactivo o un segmento de audio que no sea interactivo (por ejemplo, una escena cinemática o un clip de medios) sin pedirle autorización del usuario.

La aplicación debe reanudar la música que estaba reproduciendo anteriormente cuando se cierra la aplicación.

Por lo tanto, ¿cómo pausamos y reiniciamos la música del usuario? En el caso de las aplicaciones Silverlight, debemos configurar el bucle Game simulado, tal como vimos anteriormente.

Yo experimenté con la interrupción del audio actualmente en reproducción; reproduje mi efecto de sonido e inmediatamente reanudé el audio que se estaba reproduciendo. Esto creó una experiencia de usuario molesta y realmente redujo el impacto del efecto del sonido que yo quería reproducir. Así que finalmente pausé el audio actualmente en reproducción cuando el usuario navega a mi página y luego lo reanudé cuando sale. Para esto, reemplacé los métodos OnNavigatedTo y OnNavigatedFrom. Dentro de esos métodos reemplazados, llamé algunas funciones auxiliares para pausar y reanudar el audio, tal como se muestra en la Figura 4.

Figura 4 Métodos reemplazados OnNavigatedTo y OnNavigatedFrom para pausar el audio

protected override void OnNavigatedTo(NavigationEventArgs e)
{
  // If the MediaPlayer is already playing music,
  // pause it upon entering the app.
  PauseMediaPlayer();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
  // If the MediaPlayer was already playing music,
  // resume playback as the user leaves the app.
  ResumeMediaPlayer();
}
private void PauseMediaPlayer()
{
  // See the MainPage Constructor earlier in the
  // article where the GameTimer object is created.
  // This enables the use of the XNA Framework MediaPlayer
  // class by pumping the XNA FrameworkDispatcher.
  // Pause the media player if it's already playing music.
  if (!MediaPlayer.GameHasControl)
  {
    MediaPlayer.Pause();
    resumeMediaPlayerAfterDone = true;
  }
}
private void ResumeMediaPlayer()
{
  // If music was playing, resume playback.
  if (resumeMediaPlayerAfterDone)
  {
    MediaPlayer.Resume();
  }
}

Ciudadano modelo

Para resumir, al crear aplicaciones de medios para el sistema operativo Windows Phone, existen varios puntos que hay que tener en cuenta, más allá de los detalles de bajo nivel sobre el control mismo de los medios.

Asegúrese de integrar su aplicación con el Concentrador de música y vídeo, para que esta presente el comportamiento esperado por el usuario para las aplicaciones de medios. Esto significa que debe rellenar los mosaicos Historial y Nuevo con sus contenidos y asegurarse de que el programa aparezca en la lista Aplicaciones.

Lea y comprenda los requisitos de certificación para las aplicaciones de medios, de manera que su aplicación logre pasar por el proceso de envío al Catálogo de soluciones de Windows Phone.

Al seguir estas pautas, se asegura de que los usuarios tendrán un buen comienzo, ya que sabrán cómo interactuar con su aplicación. También aumentará la visibilidad de su aplicación y de sus contenidos, al asegurarse de que aparezcan en las áreas apropiadas del Concentrador de música y vídeo. Y su aplicación será un “ciudadano modelo” de Windows Phone.

Mark Hopkins es programador senior en el equipo de documentación para desarrolladores de Windows Phone. Ha trabajado en Microsoft desde 1992 con productos enfocados en los desarrolladores, incluido el soporte técnico para desarrolladores, Visual C++, MFC, Windows Platform SDK, Internet Explorer SDK, Tablet PC SDK, Surface SDK y Windows Phone SDK. También es músico y un fanático del equipo Seattle Sounders FC.

Gracias a los siguientes expertos técnicos por su ayuda en la revisión de este artículo: Andrew Byrne, Kim Cameron, Robert Lyon, Nitya Ravi,Cheryl Simmons y Matt Stroshane