Versione per la stampa      Invia     
Valuta il contenuto e lascia un commento
MSDN
MSDN Library
Articoli tecnici
Windows Vista
 Sviluppare applicazioni per Windows...
Sviluppare applicazioni per Windows Media Center

di Cristian Civera - Microsoft MVP

Windows Media Center è un sistema di home entertainment da porre nei salotti che rende un PC uno strumento per ascoltare musica, guardare immagini, video e DVD, e registrare i programmi TV preferiti. Dapprima distribuito come un sistema operativo a parte di nome Windows XP Media Center Edition 2004/2005, è presente in una nuova e profondamente riscritta versione negli appena usciti Windows Vista Home Premium e Windows Vista Ultimate.
Windows Media Center è un programma scritto generalmente in .NET Framework 2.0, per la gestione dell'interfaccia, e codice unmanaged che fa uso di DirectShow (ramo di Windows Media Foundation, ex DirectX) per la gestione audio e dei sintonizzatori TV.
In Windows Vista il motore di interfaccia è nuovo e sfrutta un'architettura di rendering simile a Windows Presentation Foundation, il framework grafico dedicato allo sviluppo di applicazioni Windows dall'impatto visivo forte. La scelta è dovuta all'esigenza di rendere l'interfaccia di Media Center utilizzabile in modo efficace anche in streaming dai Media Center Extender: apparati, come per esempio l'XBOX 360, che sono in grado di usufruire dei medesimi contenuti presenti sugli HTPC (Home Theather PC) da una postazione remota.

In questa pagina

Possibilità di sviluppo ed estensione Possibilità di sviluppo ed estensione
Hosted HTML Applications Hosted HTML Applications
.NET Framework 3.0 XAML Browser Applications .NET Framework 3.0 XAML Browser Applications
Windows Media Center Presentation Layer Applications Windows Media Center Presentation Layer Applications
Distribuzione e installazione delle applicazioni Distribuzione e installazione delle applicazioni
Regole e consigli sul disegno delle applicazioni Regole e consigli sul disegno delle applicazioni
Conclusioni Conclusioni

Possibilità di sviluppo ed estensione

Windows Media Center offre molte idee che consentono di estenderlo e dotarlo di funzionalità molto utili quando l'utente si trova comodamente seduto nel suo salotto. Si pensi per esempio alla possibilità di fornire una sezione per il controllo o la sorveglianza della propria casa, o una pagina per telefonare con sistemi di VOIP, per consultare la propria posta o le previsioni del tempo. Per potere fare tutto ciò, Microsoft mette a disposizione uno SDK scaricabile da questo indirizzo (http://www.microsoft.com/downloads/details.aspx?familyid=A43EA0B7-B85F-4612-AA08-3BF128C5873E&displaylang=en) che, una volta installato, fornisce la documentazione e le linee guida per lo sviluppo, alcuni esempi con le tecnologie disponibili e i template per Microsoft Visual Studio 2005. E' necessario quindi, per sviluppare, Visual Studio 2005 Professional o anche le versioni Express (VB o C#), installati su Windows Vista nelle versioni con Media Center installato.

Una volta preparato l'ambiente di sviluppo, sono disponibili diversi modi per estendere Media Center. Il più semplice di questi è tramite l'uso delle Hosted HTML Applications: applicazioni sviluppate in pagine HTML e Javascript. In alternativa è possibile sfruttare le applicazioni XBAP, sviluppate sfruttando .NET Framework 3.0 e in particolare Windows Presentation Foundation che offre maggiore potenza in termini di impatto grafico, animazioni e grafica vettoriale. Con queste due tipologie si creano delle pagine alle quali si può accedere tramite uno strato superiore, raggiungibile da un menu creato in Media Center, ma che non offre grandi prestazioni con i Media Center Extender.

La terza possibilità di sviluppo consiste nel realizzare applicazioni che sfruttino il Windows Media Center Presentation Layer, il medesimo motore di rendering con il quale è stato creato Media Center e che è in grado di garantire le stesse prestazioni anche per i Windows Media Center Extender, senza ulteriori strati presentativi, e di fornire il video overlay anche sulle pagine create. Delle tre tecnologie di sviluppo, quest'ultima è la più nuova e richiede più impegno iniziale, ma una maggiore qualità del risultato finale, mentre l'uso di HTML è più immediato e facile, ma più limitato nel frutto finale.

Hosted HTML Applications

Come accennato in precedenza, la forma più semplice di sviluppo per Windows Media Center è costituita dal creare pagine HTML. A tale scopo sono disponibili molteplici strumenti come Microsoft Visual Studio, Microsoft Expression Web Designer oppure tecnologie per creare pagine dinamiche, come ASP.NET 2.0 e AJAX. Purtroppo l'esperienza dell'utente non può essere ricca perché limitata dall'HTML stesso e dal fatto che Media Center, per visualizzare queste pagine, ospita il controllo di Internet Explorer.

All'interno della cartella di installazione del SDK, normalmente installato in %programfiles%\Microsoft SDKs\Windows Media Center\v5.0\, sono presenti una serie di esempi. Tra questi, nella sotto cartella Hosted HTML Samples, ci sono alcune pagine HTML che mostrano come simulare con Javascript i controlli più comuni: selezione, pulsanti, opzioni, scorrimento di testo ecc. Le logiche di questi controlli sono implementate in una serie di file .js che si possono riprendere nei propri progetti e sfruttare a proprio piacimento. Non esistono comunque dei modelli con immagini e colori per emulare il tema originale di Media Center e bisogna quindi provvedere alla loro creazione.

Rispetto al normale sviluppo di pagine web, vi è in più la possibilità di interagire con l'ambiente di Media Center. Per farlo da Javascript, tramite il membro window.external si ha accesso ad un modello oggetti che con un gruppo di proprietà e metodi permette di controllare l'esperienza multimediale dell'utente e di mostrare lo Shared View Port (la finestra situata in basso a sinistra che mostra il video/audio corrente). La documentazione su questi oggetti è disponibile a questo indirizzo (http://msdn2.microsoft.com/en-us/library/ms816298.aspx).

.NET Framework 3.0 XAML Browser Applications

In alternativa alle hosted HTML applications, se si ha già esperienza con Windows Presentation Foundation del .NET Framework 3.0, è possibile realizzare le cosiddette XBAP (Xaml Browser Application): applicazioni che si possono eseguire all'interno del browser Internet Explorer.

Per iniziare a sviluppare l'SDK installa un template di progetto di Visual Studio accessibile sotto la voce Windows Media Center -> Windows Media Center Application (WPF). Una volta creato il progetto, si ha già a disposizione una pagina XAML base e un file di stile di nome MediaCenterTheme.xaml che ridefinisce il disegno dei più comuni controlli, in modo da emulare similmente i colori ed il tema di Media Center.

Nell'immagine successiva sono visibili l'ambiente di sviluppo e il progetto quando viene creato:

Immagine 1

Mediante WPF non ci sono limiti nel disegnare o nella disposizione del layout grafico e sono disponibili strumenti per progettare direttamente in XAML. Della famiglia Microsoft Expression, Design è in grado di lavorare in vettoriale e di lavorare in modo specifico su immagini. Blend, invece, è in grado di preparare animazioni e di modificare gli style e i template dei controlli.

Una volta preparato il layout e scritto il codice che serve, è possibile compilare l'intero progetto che, terminata l’operazione, crea nella cartella bin\debug una serie di file:

  • nomeprogetto.exe: è l'assembly vero e proprio che contiene il codice, le risorse e lo XAML;

  • nome progetto.exe.manifest: contiene tutte le informazioni di sicurezza e permission set che l'applicazione richiede;

  • nomeprogetto.xbap: è un file XML che contiene tutte le informazioni di firma e provenienza per permettere al file .exe di essere eseguito all'interno di Internet Explorer. Eseguendo questo file si apre il browser che scarica e avvia l'applicazione ospitandola nel processo PresentationHost.exe. E' possibile effettuare l'attach di tale processo da Visual Studio per eseguire il debug del proprio assembly;

  • nomeprogetto.mcl: è un file XML che, se eseguito, apre l'applicazione XBAP all'interno del contesto Media Center.

E' importante notare che essendo la XBAP un'applicazione .NET che gira nel browser, questa è soggetta a una restrizione dei permessi e di conseguenza di ciò che l'applicazione può fare (scrittura su disco, stampa, network, reflection). Se necessario si può richiedere di elevare i permessi dell'utente così come spiegato nel file readme.txt allegato al progetto. Inoltre, qualora non si debba testare funzionalità inerenti a Media Center e se il codice prevede la possibilità di trovarsi fuori contesto, è possibile aprire il file XBAP invece del file MCL, così da rendere più semplice il debug.

Come per le pagine HTML, anche con le XBAP si ha a disposizione un modello oggetti, per interagire con Media Center e con l'esperienza corrente dell'utente, contenuto nell'assembly Microsoft.MediaCenter.dll e della quale si trova l'intera documentazione a questo indirizzo (http://msdn2.microsoft.com/en-us/library/ms816271.aspx). Se per esempio si vuole mostrare una finestra di dialogo al click di un pulsante tramite le API di Media Center, basta ottenere un riferimento al contesto con il membro statico AddInHost.Current ed utilizzare il metodo Dialog per lanciare la finestra.

C#
void OnAlarmClick(object sender, RoutedEventArgs e)
{
    Microsoft.MediaCenter.Hosting.AddInHost.Current.MediaCenterEnvironment.Dialog
("Allarme", "Questo è un messaggio d'allarme in WPF", DialogButtons.Ok, 5, false);
}
VB
Sub OnAlarmClick(sender As Object, e As RoutedEventArgs)
{
    Microsoft.MediaCenter.Hosting.AddInHost.Current.MediaCenterEnvironment.Dialog
("Allarme", "Questo è un messaggio d'allarme in WPF", DialogButtons.Ok, 5, false)
}

Nell'immagine seguente viene mostrato il risultato che si ottiene quando si preme sul pulsante di WPF:

Immagine 2

Windows Media Center Presentation Layer Applications

L'alternativa all'uso delle XBAP e, anzi, la via maestra da seguire, consiste nel creare le Windows Media Center Presentation Layer applications. Sono assembly .NET che vengono eseguiti all'interno di Media Center e sono in grado di sfruttare tutte le capacità grafiche messe a disposizione da Media Center, sia sull'HTPC stesso, sia sugli extender.

Questa tecnologia è in parte simile a WPF, poiché presenta caratteristiche simili nel layout, nella possibilità di utilizzare animazioni e trasformazioni, e soprattutto nella definizione dell'interfaccia utente, affidata ad un nuovo linguaggio di nome Windows Media Center Markup Language (MCML), basato su XML, che permette l'uso di binding e l'accesso agli assembly .NET.

Le regole sono abbastanza semplici: ogni tag rappresenta un elemento (una classe) e ogni suo attributo rappresenta una proprietà. In alternativa, ogni tag figlio identifica una proprietà e vi si ricorre qualora il tipo da definire sia complesso e non definibile semplicemente tramite attributo.

L'esempio seguente definisce una classe ColorFill (rettangolo di colorazione) e popola, tramite la sua proprietà Children, i figli creando una classe Text che a sua volta ha definite una serie di proprietà semplici: il colore, il carattere e il testo.

<ColorFill Layout="Dock">
    <Children>
        <Text Name="display" Color="Red" Font="Verdana,12" Content="Questo è un testo" />
    </Children>
</ColorFill>

Tramite L'SDK viene installato un secondo template per Visual Studio, raggiungibile sotto la voce Windows Media Center -> Windows Media Center Presentation Layer Application, che predispone l'ambiente con cartelle per contenere le immagini (cartella Images), le risorse (cartella Resources) e il markup: file con estensione .mcml che contengono appunto il markup MCML. Ad essi si aggiunge una classe autogenerata che implementa le interfacce di lancio IAddInModule e IAddInEntryPoint per navigare automaticamente sulla default.mcml.

Non è possibile disegnare in vettoriale e non sono molti gli elementi grafici disponibili, ma sono sufficienti per essere combinati e per generare tutti i controlli che possono servire. Non sono infatti presenti dei template di interfacce che emulano lo stile di Media Center, ma al contrario ci sono abbondanti esempi, situati nella cartella di installazione "Samples\Windows Media Center Presentation Layer Samples", che mostrano le funzionalità che si possono ricreare. Gli elementi di uso comune sono:

  • Clip: definisce una regione di disegno che i figli non possono superare. Fornisce funzionalità di attenuazione dei colori (fade) sui margini;

  • ColorFill: definisce un rettangolo colorato che si adatta automaticamente ai figli;

  • Panel: è un contenitore che permette di allineare i propri figli secondo logiche di griglia, ancora e scorrimento;

  • Repeater: replica il suo contento in funzione della sorgente indicata tramite la proprietà Source. Utile per mostrare liste;

  • Scroller: permette di definire un'area nella quale i figli si spostano orizzontalmente o verticalmente mediante l'uso di mouse, tastiera o telecomando;

  • Text: mostra del testo con qualsiasi carattere, anche multi linea e in formato RTF;

  • Graphic: mostra un'immagine anche proveniente da web permettendo, inoltre, di specificare l'immagine da utilizzare in fase di caricamento o in caso di errore.

Tutti gli elementi disponibili si possono ruotare e trasformare in congiunzione con le animazioni.

L'elemento root di ogni file MCML è sempre il tag Mcml del namespace http://schemas.microsoft.com/2006/mcml, nel quale sono racchiusi tutti gli elementi di Media Center e tramite prefissi xml è possibile fare riferimento ad altre classi contenute in assembly diversi. L'esempio seguente mappa il namespace XML "cor" sul namespace System dell'assembly MSCorLib.dll del quale è poi possibile usare tutti i tipi che contiene:

<Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
      xmlns:cor="assembly://MSCorLib/System">
    <cor:Int32 />
</Mcml>

Il linguaggio Mcml non è solo destinato alla definizione del layout, ma permette anche una semplice programmazione delle logiche che la pagina deve contenere. Ogni elemento contenitore definito dalla classe Ui può infatti dichiarare delle variabili pubbliche (proprietà Properties), delle variabili private (proprietà Locals) e delle regole (proprietà Rules).

Properties ha lo scopo di essere utilizzato come deposito di informazioni ed è soprattutto utile quando l'elemento grafico viene riutilizzato consentendone delle personalizzazioni.
Locals viene utilizzato per dichiarare e istanziare oggetti da utilizzare all'interno dell'elemento, mentre Rules permette di specificare azioni da eseguire a una determinata condizione di un elemento o di una variabile o di un evento, oppure di legare una proprietà di un elemento a un'altra (binding). L'esempio seguente crea una pagina, mostrante un count down dal 5 allo 0 per poi mostrare la scritta Go, che sfrutta una variabile d'appoggio per contare e un Timer per intervallare il conteggio:

<Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
      xmlns:cor="assembly://MSCorLib/System"
      xmlns:me="Me">
  <UI>

    <Properties>
      <Color Name="default" Color="White"/>
    </Properties>

    <Locals>
      <!-- dichiaro la variabile partendo da 6 -->
      <cor:Int32 Name="count" Int32="6" />
      <!-- dichiaro il timer e lo attivo -->
      <Timer Name="timer" Interval="1000" Enabled="true" />
      
    </Locals>

    <Rules>
      <!-- condizione che mostra Go!!! quando il timer è arrivato a zero
        l'ordine delle condizioni è importante. In questo caso è prioritario rispetto al binding
       -->
      <Condition Source="[count]" SourceValue="1" ConditionOp="LessThan" Target="[display.Content]
" Value="Go!!!" />

      <!-- lego il contatore al testo
          !cor:String esegue un cast dal tipo intero su stringa-->
      <Binding Source="[count!cor:String]" Target="[display.Content]" />

      <!-- intercetto i tick così da decrementare la variabile count-->
      <Changed Source="[timer.Tick]">
        <Actions>
          <!-- riassegno lo stesso valore sottrando uno -->
          <Set Target="[count]" Value="[count]">
            <Transformer>
              <MathTransformer Subtract="1"/>
            </Transformer>
          </Set>
        </Actions>
      </Changed>

      <!-- se il count down è arrivato a zero, fermo il timer -->
      <Condition Source="[count]" SourceValue="1" ConditionOp="LessThan" Target="[timer.Enabled]"
 Value="False" />

    </Rules>

    <Content>
      <Text Name="display" Color="[default]" Font="Verdana,32"/>
    </Content>

  </UI>
</Mcml>

Nel markup precedente viene fatto uso delle parentesi quadre per fare riferimento agli elementi e per richiamarli per nome. Sempre tra quadre è possibile effettuare anche interrogazioni a proprietà o richiamare metodi. Il codice seguente stampa il nome della classe Color ottenendo il tipo tramite il metodo managed GetType:

<Text Name="display" Color="[default.GetType.ToString]" Font="Verdana,32"/>

Poiché non è possibile scrivere del codice collegato al file .mcl, è possibile interagire con classi .NET solo tramite le espressioni quadre di classi istanziate all'interno di Locals. Il risultato della compilazione del progetto è infatti un singolo assembly contenente sia le risorse, i file .mcl e le classi .NET.

Gli strumenti messi a disposizione quando si utilizza questa tipologia di applicazioni sono due:

  • McmlVerifier.exe: valida e verifica il corretto markup inserito. Si integra con Visual Studio ed entra in funzione ogni volta che si compila, ma è possibile utilizzarlo a parte;

  • McmlPad.exe: avvia un file .mcl e permette di testarlo anche fuori dal contesto di Media Center.

Distribuzione e installazione delle applicazioni

Sviluppata la propria applicazione, non resta che preparare l'occorrente per distribuirla e installarla. La prima cosa da fare è definire uno o più punti di ingresso (entry points) legati a Media Center, a seconda del menu o del contesto in cui l'utente si trova. E' possibile quindi inserire una o più voci nel menu Online Media -> program library, tra le sorgenti radio, nello start menu, oppure all'interno del menu contestuale "more" che si ottiene in ogni lista di tipo audio, DVD, video e immagini.

La registrazione può essere effettuata mediante un file XML di configurazione passato poi a una utility, oppure tramite le API di registrazione, oppure ancora scrivendo direttamente nel registro. Oltre a questo, va considerato che per le XBAP, le Presentation Layer Applications e le applicazioni in background è necessario anche installare gli assembly in GAC, perciò questi trovano come miglior sistema di distribuzione, l'uso dei progetti di setup forniti da Visual Studio.

Se si sceglie la strada del file XML, il metodo .NET da utilizzare nel progetto di setup è ApplicationContext.RegisterApplication, mentre l'utility a riga di comando alla quale passare la configurazione è %windir%\ehome\RegisterMCEApp.exe. Se si è utilizzato il template di progetto per le MCL, si ha già a disposizione un file di nome App.xml che è possibile editare per scegliere descrizione, icona e posizionamento in Media Center. Per l'XBAP e per le hosted application occorre invece creare un file XML simile specificando invece dell'assembly, l'indirizzo del file .xbap o .html:

<application title="Wikipedia" id="{775DB9B5-6B8C-420f-8F12-F87CDB1C828B}">
  <entrypoint id="{F34F139B-FAAC-4ca1-8B68-AD7D9ABC4BF6}"
              url="c:\...\XBAPWikipedia.xbap" 
              title="XBAPWikipedia"
              description="XBAPWikipedia"
              ImageUrl=".\AppIcon.png">
    <category category="More With This\Video"/>
  </entrypoint>
</application>

A questo punto basta lanciare da DOS il comando:

%windir%\ehome\RegisterMCEApp.exe App.xml

Una volta concluso si riceve conferma dell'avvenuta registrazione dell'applicazione.

Regole e consigli sul disegno delle applicazioni

Qualunque tecnologia sia stata scelta per sviluppare applicazioni per Media Center è bene seguire, per renderle compatibili con il maggior numero di HTPC, alcune regole che Microsoft stessa osserva. Innanzitutto bisogna tenere conto del fatto che le pagine sono mostrate su televisori che non hanno la stessa qualità visiva dei monitor da PC. E' necessario quindi adottare caratteri grandi (suggeriti 20 punti) e di colore contrastante con lo sfondo (meglio se in tinta per il pulsante) con immagini nitide e ben definite, mentre i pulsanti devono avere un testo più descrittivo; evitare quindi semplici "ok" o "annulla". I televisori oggi in commercio possono avere un rapporto di risoluzione 4:3 o 16:9, perciò si consiglia di testare l'applicazioni su entrambi i rapporti utilizzando risoluzioni 1024x768 e 1366x768. Se si utilizzano immagini di sfondo è necessario prendere in considerazione che una parte di esse potrebbe essere tagliata, anche, per esigenze, dagli extender.

L'intera disposizione della pagina deve essere semplice e intuitiva per l'utente, fornendo una navigazione simile all'intero Media Center con spostamenti orizzontali e verticali, ma mai in diagonale, mediante tastiera, mouse e telecomando (il telecomando viene convertito in input da tastiera). Nella creazione del layout vanno inoltre presi in considerazione gli elementi che non sono sempre visibili, ma sono presenti nelle pagine di Media Center qualora l'utente utilizzi il mouse, stia modificando il volume o abbia un video/audio attivo. Nella figura seguente sono marcati in rosso questi elementi così da evitare sovrapposizioni non previste:

Immagine 3

Conclusioni

Windows Media Center è un applicativo che offre molte possibilità di ampliamento e sviluppo di soluzioni personalizzate. Questa nuova versione per Windows Vista è molto matura rispetto alla precedente e dispone di maggiori strumenti di sviluppo, una documentazione più completa e molti esempi. Le diverse tipologie di applicazione consentono da una parte di iniziare subito a creare semplici progetti, dall'altra di realizzare soluzioni complete e performanti.


© 2008 Microsoft Corporation. Tutti i diritti riservati. Condizioni per l'utilizzo  |  Marchi  |  Informativa sulla privacy
Page view tracker