Mostrare la WebCam in Silverlight

di Cristian Civera, in Silverlight,

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.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese