Totali 103
Anonimi 103
Registrati 0

Username
Password
   
Ricordami
  Ho perso i dati   Nuovo utente        
Cerca
























Webcam streaming
     
 

Servizio di "streaming". Visualizzazione in tempo reale delle immagini ad elevata frequenza di aggiornamento.

Il progetto presentato consente di visualizzare le immagini di una webcam collegata ad un pc da parte di uno o più utenti collegati ad internet.
Il punto di forza priincipale è che il client ed il server possono non essere raggiunti vicendevolmente, ovvero il server non diposne di un IP punbblico (statico) a cui può connettersi direttamente il client.
Questo scenario è spesso frequente a causa di politiche scelte dagli ISP o dalle configurazioni di rete, nonchè dalla scarsità di IP disponibili (utilizzo di NAT).
In commercio si trovano, anche a basso prezzo alcuni dispositivi, più o meno qualitativi, che racchiudono in unico involucro un dispositivo di acquisizione video ed un webserver http. Il cleint si connette a tale dispositivo e visualizza in streaming le immagini. Purtroppo come precedentemente illustrato ciò è possibile solo se il client è in grado di raggiungere il server, ovvero se può connettersi all'indirizzo del server. Nel caso di videosorveglianza interna ad un palazzo questo metodo è senza dubbio possibile, poco costoso e molto performante (es. se si usa il wireless).
Il progetto presentato consente di evitare questo problema avvalendosi di un webserver esterno e raggiugibile sia da parte del client sia da parte del sever e funziona come un "ponte" tra uno e l'altro.
 

L'application server ha il compito di intefacciarsi con la webcam e di elaborare le immagini per essere inviate al webserver.
Il webserver (sito internet) mantiene in memoria le immagini e le rende disponibili al client che ne fa richiesta. La comunicazione avviene sempre e soltanto tramite webservices (xml).
In questo modo si evitano completamente i problemi di visibilità tra client ed application server.
Questo meccanismo, così come è stato descritto, nasconde un problema di performace. L'application server dovrebbe inviare in continuazione immagini con la massima rapidità possibile per garantire in ogni momento la visualizzazione migliore ai client. Tuttavia questa soluzione non è proponibile in molti scenari, in cui non è possibile saturare la banda a disposizione o il traffico verso il webserver.
Dunque è necessario un sistema di controllo della frequenza con cui le immagini vengono inviate al webserver tramite webservices.
Per ovviare a questo problema il webserver tiene traccia delle immagini che il client richiede, memorizzando l'ultima richiesta effettuata dal client. 
L'application server invia ciclicamente e con una data frequenza minima (5 - 10 sec) un'immagine al webserver, che risponde indicando la data dell'ultima richiesta effettuata da un client. In base a questo valore l'application server incrementa o decrementa, entro limiti specificati, la frequenza di invio delle immagini, adattandosi alla frequenza delle richieste. Più frequenti sono le richieste del client, più rapidi sono gli invii di immagini da parte del server, attraverso un feedback positivo.

 

Tipologie di client

Per facilitare la fruizione del client è stato implementato un sistema universale, adatto cioè a più devices, per ottenere l'immagine più aggiornata.
E' stata creata una pagina specifica "getimage.aspx" il cui codebehind si occupa di contattare il webservice e di rispondere con un "response content" di tipo immagine.
Un'altra pagina web contiene un tag HTML immagine che punta a "getimage.aspx" tramite un semplice tag HTML
<img src="GetImage.aspx" border = id="webcam" name="webcam" onload="Receive()"  onerror="Error()" width=600 height=400 border=1 style="border-color:#00ff00; border-style:solid;" alt="wecam genova streaming by webservices">
Nello specifiico il tag è generato da un codice javascript che ogni 100mSec effettua il refresh dell'immagine inserendo anche una querystring alla pagina es: "GetImage.aspx?id=234" dove il valore dell'id è generato in sequenza per evitare il caching della pagina web (o dell'immagine) da parte del browser.

Un altro sistema adottato per il reperimento delle immagini è tramite MS Silverlight incorporato in una pagina web. Questa soluzione è più elegante e performante, ma meno fruibile da parte dei client, poichè non tutti i devices supportano questa tecnologia legata a Microsoft: tra l'altro Internet Explorer per Windows Mobile 7.1 non supporta Silverlight. Il vantaggio dell'utilizzo di Silverlight è che il codebehind del form contatta direttamente il webserver ed una volta terminata la richiesta ed ottenuto il response aggiorna il Canvas con la nuova immagine appena ottenuta.

Riferimenti demo:
Streaming) http://www.solchiere.it/webcam/webcamon-line.aspx
Silverlight) http://www.solchiere.it/webcam/streaming.aspx

 Tracciamento dei client ai fini di controllo

Sia che si acceda alla pagina web che rimanda alla "GetImage.aspx", sia che si utilizzi Silverlight, è stato implementato un sistema di monitoraggio degli utenti in modo tale da tracciare le informazioni seguenti: sorgente (pagina web o Silverlight), indirizzo IP, hostname, web browser, GUID (generato randomicamente).
Per reperire queste informazioni viene contattato un webservice che analizza la request del client e risponde con una stringa contenente i dati citati convenientemente formattati.
Nel caso si contatti "GetImage.aspx" viene controllato se esiste una session con una determinata chiave, e se non esiste viene chiamato il webservices che recupera le informazioni sull'utente e viene quindi creata la session con questi dati, in modo che alla richiesta successiva non venga ripetuta la chiamata ai webservices risparmiando tempo, banda e CPU.
Nel caso di Silverlight si contatta direttamente il webservice che fornisce le informazioni sull'utente.

  Sevizio di visualizzazione delle immagini "semplice" con frequenza di refresh lenta

Oltre allo streaming (inteso solo come fruizione rapida delle immagini) è affiancato un sistema molto più semplice di visualizzazione delle immagini.
Il sistema è molto più semplice rispetto al precedente: l'application server invia un'immagine al webserver che salva tale immagine su filesystem (sul server).
La pagina web fa semplicemente riferimento a tale risorsa con un tag TTML di tipo "img". Anche in questo caso un codice lato client ricarica l'immagine con una frequenza predefinita (nell'ordine di 30 secondi - 1 minuto).
L'invio dell'immagine dall'application server avviene tramite webservices. Se si inviasse l'immagine tramite FTP la webfarm probabilmente bannerebbe il nostro IP per un eccessivo utilizzo dello stesso: è una politica molto usata dalle webfarm per scoraggiare l'uso dell'FTP per inviare frequentemente dati.

Riferimenti:
Slow) http://www.solchiere.it/webcam/index.aspx

 Creazione di Video da immagini

L'application server salva su Filesystem un'immagine con una certa periodicità (es: ogni minuto) ed ogni periodo prefissato ordina le immagini per data di creazione ed elabora un video in formato AVI con FPS e dimensione di Width ed Height specificate. Per evitare che il video diventi troppo lungo è fissato un numero massimo di immagini memorizzate nella cartella temporanea: quando si supera questo numero di immagini ad ogni nuova immagine inserita viene cancellata quella più vecchia.
Una volta terminata la generazione del video, il file viene caricato sul server tramite FTP. In questo caso la scelta dell'FTP è quasi obbligata poichè mediamente il file video generato è di 15 MB.

Riferimenti:
Video) http://www.solchiere.it/webcam/video.aspx

Filtri

Sono stati realizzati due tipi di filtro caricati nell'application server come "plugins", ovvero sono dll che implementano una particolare interfaccia definita in un'altra dll "IFilter" che definisce il contratto del filtro stesso.
L'interfaccia del filtro consente di passare al filtro un'immagine (Bitmap) come riferimento. Il filtro, in modo specifico, effettua un'elaborazione dello stesso oppure inserisce del testo come watermark sulla stessa.
Inoltre l'interfaccia del filtro consente di agganciardi alla GUI dell'applicativo e di mostrare tramite un UserControl un'interfaccia grafica per gestire le impostazioni del filtro.
L'utilizzo dei plugiins consente di creare facilmente nuovi filtri senza dover modificare o conoscere il codice dell'application server, ma semplicemente implementando un'interfaccia. I filtri (.dll) vengono caricati in automatico dal "plugger" e mostrati a video per essere selezionati e configurati dall'utente.

E' gestita anche la serializzazione e deserializzazione dei dati per ciascun filtro impostato, in modo tale da non dover ripetere la configurazione e la scelta dei filtri ad ogni riavvio dell'application server.

Salvataggio delle impostazioni

Al momento della chiusura dell'application server viene serializzato in XML un set di dati contenente tutte le impostazioni effettuate dall'utente, mentre all'avvio dell'application server lo stesso file viene caricato.
La serializzazione e deserializzazione delle impostazioni comprende anche quelle dei filtri utilizzati.

Note tecniche

Tutti i servizi di elaborazione dati o interfacciamento con i webservices da parte dell'application server avvengono su thread separati e concorrenti, che interagiscono con l'interfaccia grafica (in modo thread safe).
Sono state utilizzate delle "code" (queue) bloccanti in fase di scrittura e lettura per rendere indipendenti la sorgente dell'immagine ovvero lo strato di grabbing dell'immagien dal device di aquisizione video (webcam o scheda di acquisizione video) ed i consumers, ovvero i services.

 Dettagli

L'immagine seguente illustra graficamente il fuzionamento schematizzato del sistema.

dettaglio sistema webcam
 

Screenshot dell'application server

Di seguito alcuni screenshot dell'application server realizzato totalmente in C# versione del Framework 3.5 (ad eccezione di alcuni progetti in managed C++).

 

Tab principale:
Il tab principale contiene il controllo per la visualizzazione delle immaginio della webcam (o della sorgente di acquisizione), ed I comandi per avviare o fermare i servizi.
I riquadri relativi ad ogni servizio ("Streaming" inteso come fast images, "FTP", inteso comne slow images e "Video") mostrano l'ultima immagine elaborata, ovvero quella recuperaata dalla coda producer-consumer.

L'imagine mostra il tab dei grafici in cui sono mostrati (dall'alto al basso): i bytes inviati, le richieste fatte dai client ed il numero di client connessi al servizio di "streaming".


 
L'immagine mostra l'elenco aggiornato dei client connessi al servizio di "straming". Come di è descritto precedentemente vengono tracciate alcune informazioni (anonime !) relative alla fruizione del servizio.
Una nota importante è il luogo di provenienza delle richieste che utilizza un webservice "esterno" per ottenere dall'indirizzo IP del client le informazikni relative al luogo geografico (se possibile).
Viene mantenuta una HashTable con chiave "IP" in modo da non richiamare il webservice per ottenere i dati geografici ad ogni aggiornamento della tabella.


 

L'immagine mostra i le impostazioni relative alla configurazione dell'FTP per il caricamento del video sul webserver.



L'immagine illustra il tab di selezione e configurazione dei filtri.
Attualmente sono stati sviluppati due filtri: "Text overlay" e "Date Time overlay" che consentono di inserire un testo statico o l'ora di sistema sull'immagine.
E' possibile selezionare la posizione del test, il collore, il carattere, l'opacità e la presenza di un riquadro che funge da sfondo per il testo.



Il tab illustrato consente di personalizzare i principali parametri dei servizi.

 
 
Demo video
 
  Il video è aggiornato su: www.solchiere.it/webcam/video.aspx
 
 

 
Commenti degli utenti:

Scrivi un commento
     
 
Autenticarsi per inserire un commento

Label