Attualmente sviluppo streaming online da 3 telecamere miniDV collegate tramite FireWire, che è abbastanza simile alle tue esigenze.
Suggerimento rapido: vlc + flowplayer / jw player
Innanzitutto, esistono due formati video che è possibile utilizzare nello streaming online: FLV e h264. FLV è più facile da transcodificare, h264 ha un rapporto dimensioni / qualità migliore ma la transcodifica richiede molto più CPU. Entrambi possono essere visualizzati da Flash Player nella pagina Web.
In secondo luogo, l'infrastruttura di streaming. Dal momento che la tua larghezza di banda dal laptop è limitata (un paio di top Mbps) devi ottenere lo streaming sul tuo server e riprodurlo nuovamente sui client. Quindi il flusso scorrerà 1 volta al server e quindi N volte ai client da lì. Non hai descritto la tua connessione Internet per il tuo laptop, quindi lo scenario è diviso in due sezioni:
Il laptop è collegato con un indirizzo IP pubblico OPPURE puoi portare la porta NAT sul laptop . Questo scenario è molto più semplice, dal momento che è possibile connettersi dal server al laptop in modo facile e semplice. Il grande svantaggio è che sei legato a una posizione (un indirizzo IP).
Il laptop non è collegato con un indirizzo I pubblico . Questo è un po 'complicato, ma funzionerà da qualsiasi rete che ti permetterà di SSH sul tuo server e avrà un caricamento sufficiente (1 Mbps dovrebbe farlo).
Indipendentemente dallo scenario utilizzato, l'infrastruttura apparirà così
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Streaming da laptop
Cattura video dalla webcam . Non ho mai catturato streaming da webcam collegate localmente, ma ci sono molti esempi su come farlo tramite V4L, ad esempio:
Impostazione webcam . L'unica parte a cui dovresti essere interessato è:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Qual è la prima parte del comando VLC per connettersi alla webcam. Per maggiori dettagli segui il menzionato HOWTO. Guarda in particolare la parte "gruppo video" e il percorso corretto del dispositivo verso / dev / video e / dev / audio. Questi possono essere diversi sul tuo laptop.
Transcodifica video in FLV . Personalmente uso FLV, poiché richiede meno CPU. La stringa di transcodifica che utilizzo è questa:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
Che transcodificherà lo streaming video in formato FLV con audio MPGA (MP3 non è disponibile nel mio Ubuntu). Il campionamento è in qualche modo obbligatorio, senza di esso non funzionerà. Ma puoi scegliere più piccoli, come 22050. Questo transcodificherà il flusso video "così com'è", quindi la scala è 1: 1. È possibile aggiungere parametri di larghezza e altezza o persino parametri di scala. Guarda nella documentazione VLC.
Streaming dal laptop . Ora devi creare un flusso locale, su cui si connetterà il server:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Ciò vincolerà il flusso VLC a 0.0.0.0:8081/stream.flv. L'intero comando sarà simile al seguente:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}'
Riavvio sul server
Cattura stream sul server e ripristinalo . Ancora una volta, utilizziamo VLC per acquisire e riprodurre in streaming. L'utilizzo si basa sullo scenario di infrastruttura dall'inizio di questo post. Come ho mostrato, VLC su laptop trasmette video in streaming su alcune porte. Questa porta deve essere accessibile dal server. Se si dispone di un indirizzo IP pubblico di laptop o porta NATed, è possibile testarlo con telnet:
server$ telnet public_ip_address 8081
Tutto ciò che non sia "timeout di connessione" rivelerà che è possibile connettersi al flusso del laptop. Se non si dispone di un indirizzo IP pubblico o non è possibile eseguire la porta NAT, è necessario farlo al contrario. Puoi SSH da laptop a server e inoltrare in remoto la porta del tuo laptop al server. Il comando SSH corretto sarebbe:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
Questo comando magico "vincolerà" la porta 8081 del laptop alla porta 8081 del server. Ciò significa che quando ci si collega al server 8081, si connetterà silenziosamente alla porta 8081 del laptop tramite il tunnel SSH. Bene, eh? :) Quindi tutto ciò che dobbiamo fare è connettere e trasmettere VLC:
server$ vlc http://localhost:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
O nel caso con indirizzo IP pubblico o porta NATed:
server$ vlc http://public_ip_address:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Come nella parte laptop, il VLC sul server è associato alla porta 8082. Perché 8082 e non 8081? 8081 è già preso dal forward forward di SSH. Perché non utilizziamo la parte transcodifica come nel primo esempio? Il video è già nel formato giusto, quindi tutto ciò che dobbiamo fare è semplicemente lo streaming così com'è.
Test . In entrambi gli esempi, è possibile testare la funzionalità visualizzando i flussi tramite VLC. Puoi testare il tuo stream locale:
laptop$ vlc http://localhost:8081/stream.flv
E puoi testare il flusso del tuo server:
laptop$ vlc http://server_ip_address:8082/stream.flv
In entrambi i casi, dovresti vedere l'input della tua webcam.
Visualizza stream sul Web
La visualizzazione dello streaming sul Web, che funzionerà nella maggior parte dei casi, avviene tramite Flash Player. Ho provato due prodotti, gratuiti per uso non commerciale: JW Player e Flowplayer . Sono rimasto con Flowplayer, ma non ricordo il motivo, forse a causa dei plugin (che non uso :)) o della migliore documentazione.
Come visualizzare lo stream FLV da VLC nella pagina Web è spiegato qui: Stream VLC al sito Web con asf e Flash
Risoluzione dei problemi
Essere consapevoli di molti problemi che sorgeranno. Per prima cosa, come in tutto, leggi . VLC è un programma molto loquace, quindi ti dirà dove si trova il problema. Potrebbe essere un problema con le autorizzazioni per accedere al dispositivo audio / video, codec, errate --sout parametri mancanti, ... Imparare ad usare iftop
per vedere se i flussi di dati in realtà attraverso di rete, etc.