Riproduzione multimediale in Windows Phone Brando Mordenti Matricola 661278
INTRODUZIONE In questa tesina sarà sviluppato un discorso sulle linee guida per creare un app multimediale elaborata per Windows Phone in grado di riprodurre audio e video facendo attenzione a preservare la durata della batteria e a ottimizzare il rendering. Il lettore multimediale viene utilizzato per visualizzare e ascoltare video, audio e immagini. La riproduzione multimediale può essere incorporata in una pagina o con un gruppo di altri controlli (in linea) oppure in una visualizzazione a schermo intero. Il lettore multimediale supporta layout dei controlli su una singola riga o su due righe Singola riga, adatto per gli schermi compatti Su due righe, consigliato negli schermi più grandi
Il lettore include un set standard di pulsanti, alcuni dei quali vengono visualizzati o nascosti a seconda del device (un esempio di set di controlli di base: play, pausa, indietro, avanti). I set di pulsanti possono essere modificati, così come lo sfondo della barra di controllo e la disposizione dei layout, anche se la personalizzazione andrebbe limitata il più possibile poichè i controlli predefiniti sono già ottimizzati e soprattutto è necessario fare attenzione a non sovraffollare la barra con un alto numero di opzioni. IMPLEMENTAZIONE Alla base di un app Windows Phone che includa la possibilità di riprodurre e visualizzare elementi multimediale sta la classe MediaElement. La creazione della suddetta classe, l abilitazione dei controlli di trasporto e il caricamento di file multimediali dal dispositivo e dalla rete sono le operazioni fondamentali per la riproduzione di elementi multimediali. Altre funzionalità importanti per questo proposito sono il corretto impedimento dell attenuazione dello schermo, la riproduzione di audio in background, l interazione con i controlli di trasporto multimediale di sistema, il ridimensionamento dei video, la creazione di controlli di trasporto personalizzati e l abilitazione del rendering a finestra intera. Operazioni importanti per l app sono la manutenzione dello stato dell app, la creazione di elementi di interfaccia nella barra dell app, creazione di riquadri a comparsa delle impostazioni e animazione dell interfaccia utente.
ESEMPIO PRATICO Dopo aver creato un progetto ed aggiunto un elemento Pagina base, vedremo quali sono le operazioni fondamentali per la riproduzione di elementi multimediali CONCETTI DI BASE Prima di iniziare è opportuno sapere che per ottenere funzionalità semplici di riproduzione audio/video è sufficiente aggiungere un oggetto MediaElement al codice XAML e impostare la proprietà Source su un file multimediale; la classe MediaElement invece consente di riprodurre sia video che audio. Per il controllo della riproduzione multimediale in Windows Phone 8.1 sono stati introdotti controlli di trasporto predefiniti, abilitabili/disabilitabili tramite la proprietà AreTransportControlsEnabled. I controlli di trasporto rendono disponibili comandi di interfaccia comuni come il pulsante Play e i controlli del volume. Le app Windows Phone scritte in C++, C# o Visual Basic supportano la maggioranza dei formati audio/video.
APRIRE FILE Con il passaggio precedente abbiamo preparato la riproduzione degli elementi multimediali. Ora vedremo come impostare l origine multimediale mentre l app è in esecuzione. Il controllo FileOpenPicker consente all utente di selezionare un file dal device e impostare la proprietà MediaElement. Source sul file restituito da FileOpenPicker. Per archiviare le autorizzazioni per i file aperti con FileOpenPicker va usata la proprietà StorageApplicationPermissions.FutureAccessList, per esempio dopo il ripristino dell app da uno stato di chiusura. Il FileOpenPicker non consente però quando si vuole impostare l origine multimediale su un file nella rete. Per questo, andrebbe creato un oggetto Uri per il percorso del file multimediale e impostata la proprietà MediaElement.Source su tale oggetto.
MANTENERE ATTIVA LA VISUALIZZAZIONE In generale, quando un app non rileva l input dell utente entro un determinato periodo di tempo, lo schermo si attenua e poi si spegne. Questo è un aspetto che nelle app multimediali con riproduzione di video va disabilitato usando la classe System.Windows.Display.DisplayRequest per comunicare al sistema di mantenere lo schermo sempre attivo per l app, ma è importante ricordarsi di annullare la richiesta quando l app viene sospesa o quando termina (o viene sospesa) la riproduzione del file. Se il rendering a finestra intera viene abilitato tramite il pulsante nei controlli di MediaElement oppure con la proprietà IsFullWindow, il sistema gestisce automaticamente la disabilitazione/riabilitazione dell attenuazione dello schermo. CONTROLLI DEL TRASPORTO MULTIMEDIALE DI SISTEMA La classe per gestire le interazioni con i controlli di trasporto multimediale di sistema è SystemMediaTransportControls. Essi sono diversi da quelli nell oggetto MediaElement e vengono visualizzati quando si premono i tasti multimediali sull hardware, come il controllo del volume.
RIPRODUZIONE DI AUDIO IN BACKGROUND Per riprodurre l audio in background bisogna impostare l attività audio in background nella sezione Declarations nel file Manifest dell app. Inoltre è necessario abilitare le proprietà IsPlayEnabled e IsPauseEnabled in SystemMediaTransportControls e gesire l evento ButtonPressed. RIDIMENSIONARE E ADATTARE IL VIDEO La proprietà MediaElement.Stretch definisce la modalità di riempimento dello spazio dell elemento contenitore dell oggetto MediaElement. Stretch può assumere vari stati: None, Uniform, UniformToFill, Fill CONTROLLI DEL TRASPORTO PERSONALIZZATI Per creare controlli di trasporto personalizzati, va sostituita l interfaccia predefinita (disattivando i controlli predefiniti con il parametro AreTransportControlsEnabled a false) con una nuova personalizzata. Gli elementi di UI che interagiscono con l app e con MediaElement vanno posizionati nell elemento <PageBottom.AppBar>. Ci sono numerosi simboli (classe Symbol ) utilizzabili per AppBarButton.Icon.
ANIMAZIONE DELL INTERFACCIA UTENTE Possono essere aggiunte animazioni per vivacizzare e dare risalto all app. Per esempio, per un semplice effetto di dissolvenza dei messaggi di testo si possono usare Strotyboard e DoubleAnimation nella proprietà Opacity di una TextBlock. Oppure, per le animazioni di transizione, si può usare la classe EntranceThemeTransition per rendere dinamici gli oggetti AppBarButton all apertura della barra dell app. GESTIONE CICLO DI VITA E STATO DELLE APP Il salvataggio dello stato delle app è un passaggio importante perchè l app può essere sospesa in background in qualsiasi momento e chiusa dal sistema, quindi è importante che alla ripresa dell app l utente trovi gli elementi multimediali nella stessa posizione e le impostazioni preservate. Lo stato dell app può essere salvato nello spazio di archiviazione isolato nel dispositivo oppure in risorse di archiviazioni mobili. Quest ultima scelta è più vantaggiosa in quanto consente agli utenti di eseguire app su più device condividendo lo stato con tutti.
Gli stati MediaElement importanti da salvare sono Source, Position, Stretch, IsLooping, CurrentState, AutoPlay e AudioStreamIndex. SuspentionManager.cs e NavigationHelper.cs sono classi helper incluse in tutti i modelli di Visual Studio che semplificano la gestione di sospensione, ripresa e ripresa dalla chiusura. Alcuni stati di MediaElement come MediaElement.Position o NaturalDuration vanno ripristinati nel gestore dell evento MediaOpen, poichè l elemento position va caricato prima di impostare queste NaturalDuration in quanto non può essere maggiore di quest ultimo.