Nel precedente post ho illustrato la mia idea di dialogo tra Silverlight e la macchina host, ma ora vediamo un caso pratico.
Prima di tutto ho preparato un'applicazione Windows senza finestre, ma che rimane sulla system tray mettendosi in ascolto come policy server e su un'altra porta in attesa di connessioni. Questo "server" alla prima connessione avvia un filtro DirectShow che prende l'immagine della WebCam, prende ogni frame attraverso un Sample Grabber e lo comprime in Jpeg ad una qualità non troppo impegnativa. I bytes risultati vengono inviati al client preceduti da 8 byte che indicano la dimensione dell'immagine e quindi dei bytes che il client si deve aspettare. Ciò che ottengo quindi è di fatto un Motion Jpeg pià alcuni controlli che il server fa per saltare frame qualora il client sia in ritardo a ricevere i fotogrammi.
Il client Silverlight invece avvia la connessione e in modo ciclico legge nel buffer i primi 8 byte per conoscere la dimensione dell'immagine. Carica i restanti byte con i quale crea un MemoryStream che dà poi in pasto al metodo BitmapImage.SetSource. Quest'ultimo carica l'immagine che viene poi associata ad un oggetto Image di Silverlight. In pratica quindi, vi è un flusso continuo di bytes di immagini compresse che vengono poi ricostruite per formare i fotogrammi dell'immagine con il quale poi ci si può sbizzarrire come si vuole.
Ho creato poi un deployment con ClickOnce per avviare il server automaticamente e dei byte "magici" che manda il client per chiudere il server. Questo il risultato finale:
Silverlight con questa tecnica si comporta bene e l'uso della CPU è non è intenso, garantendo sempre un flusso fluido dell'immagine.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Progress di una chiamata Silverlight ad un servizio, il 9 giugno 2010 alle 12:34
- Silverlight - Real time audio peak meter , il 31 maggio 2009 alle 11:14
- Salvare immagini Bitmap con Silverlight 3.0, il 29 maggio 2009 alle 19:56
- Silverlight - Audio peak meter, il 23 maggio 2009 alle 18:32
- Comunicazione TCP tra Silverlight e WPF, il 6 maggio 2009 alle 23:39