Je développe actuellement le streaming en ligne à partir de 3 caméras miniDV connectées via FireWire, ce qui est assez similaire à vos besoins.
Petit conseil: vlc + flowplayer / jw player
Tout d'abord, il existe deux formats vidéo que vous pouvez utiliser en streaming en ligne: FLV et h264. FLV est plus facile à transcoder, le h264 a un meilleur rapport taille / qualité mais le transcodage consomme beaucoup plus de processeurs. Les deux peuvent être affichés par des lecteurs flash dans la page Web.
Deuxièmement, l'infrastructure de streaming. Étant donné que la bande passante de votre ordinateur portable est limitée (quelques Mbps), vous devez obtenir le flux sur votre serveur et le retransmettre aux clients. Ainsi, le flux coulera 1 fois vers le serveur, puis N fois vers les clients à partir de là. Vous n'avez pas décrit votre connexion Internet pour votre ordinateur portable, le scénario est donc divisé en deux sections:
L'ordinateur portable est connecté avec une adresse IP publique OU vous pouvez connecter le port NAT à l'ordinateur portable . Ce scénario est beaucoup plus facile, car vous pouvez vous connecter facilement du serveur au portable. Le gros inconvénient est que vous êtes lié à un emplacement (une adresse IP).
Ordinateur portable n'est pas connecté avec l' adresse publique I . C'est un peu délicat, mais cela fonctionnera à partir de n'importe quel réseau qui vous permettra de SSH sur votre serveur et d'avoir un téléchargement suffisant (1 Mbps devrait le faire).
Quel que soit le scénario utilisé, l’infrastructure ressemblera à ceci
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Streaming depuis un ordinateur portable
Capture vidéo de webcam . Je n'ai jamais capturé de flux à partir d'une webcam connectée localement, mais il existe de nombreux exemples pour le faire via V4L, par exemple:
Configuration de la webcam . La seule partie qui devrait vous intéresser est:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Quelle est la première partie de la commande VLC pour se connecter à la webcam. Pour plus de détails, suivez le HOWTO mentionné. Regardez en particulier la partie "groupe vidéo" et corrigez le chemin du périphérique vers / dev / video et / dev / audio. Ceux-ci peuvent être différents sur votre ordinateur portable.
Transcoder la vidéo en FLV . J'utilise personnellement FLV, car il demande moins de CPU. La chaîne de transcodage que j'utilise est la suivante:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
Qui transcodera le flux vidéo au format FLV avec audio MPGA (le MP3 n'est pas disponible sur mon Ubuntu). Samplerate est en quelque sorte obligatoire, il ne fonctionnera pas sans lui. Mais vous pouvez choisir un format plus petit, comme 22050. Cela transcodera le flux vidéo «tel quel», donc l'échelle est de 1: 1. Vous pouvez ajouter des paramètres de largeur et de hauteur, ou même des paramètres d'échelle. Regardez dans la documentation VLC.
Diffusez-le depuis un ordinateur portable . Maintenant, vous devez créer un flux local, sur lequel le serveur se connectera:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Cela liera le flux VLC à 0.0.0.0:8081/stream.flv. La commande entière ressemblera à ceci:
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}'
Réexécution sur le serveur
Capturez le flux sur le serveur et réenregistrez-le . Encore une fois, nous utilisons VLC pour capturer et diffuser. L'utilisation est basée sur le scénario d'infrastructure au début de ce post. Comme je l'ai montré, VLC sur un ordinateur portable diffuse de la vidéo sur un port. Ce port doit être accessible depuis le serveur. Si vous avez l'adresse IP publique d'un ordinateur portable ou un port NAT, vous pouvez le tester avec telnet:
server$ telnet public_ip_address 8081
Tout sauf le "délai d'expiration de la connexion" révélera que vous pouvez vous connecter au flux de votre ordinateur portable. Si vous n'avez pas d'adresse IP publique ou que vous ne pouvez pas utiliser le port NAT, vous devez le faire dans l'autre sens. Vous pouvez SSH de l'ordinateur portable au serveur et transférer à distance le port de votre ordinateur portable vers le serveur. La commande SSH correcte serait:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
Cette commande magique «liera» le port 8081 de votre ordinateur portable au port 8081. Cela signifie que lorsque vous vous connectez sur le serveur au 8081, vous vous connectez silencieusement au port 8081 de votre ordinateur portable via le tunnel SSH. Cool, hein? :) Donc, tout ce que nous avons à faire est de se connecter et de diffuser 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}'
Ou en cas d'adresse IP publique ou de port NAT:
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}'
Comme dans la partie ordinateur portable, votre VLC sur le serveur est lié au port 8082. Pourquoi 8082 et non 8081? 8081 est déjà pris par le transfert distant SSH. Pourquoi nous n'utilisons pas la partie transcodée comme dans le premier exemple? La vidéo est déjà au bon format, donc tout ce que nous avons à faire est de la diffuser telle quelle.
Test . Dans les deux exemples, vous pouvez tester la fonctionnalité en affichant les flux via VLC. Vous pouvez tester votre flux local:
laptop$ vlc http://localhost:8081/stream.flv
Et vous pouvez tester le flux de votre serveur:
laptop$ vlc http://server_ip_address:8082/stream.flv
Dans les deux cas, vous devriez voir l'entrée de votre webcam.
Afficher le flux sur le Web
L'affichage du flux sur le Web, qui fonctionnera dans la plupart des cas, se fait via Flash Player. J'ai essayé deux produits gratuits pour une utilisation non commerciale: JW Player et Flowplayer . Je suis resté avec Flowplayer, mais je ne me souviens pas de la raison, peut-être à cause des plugins (que je n'utilise pas :)) ou à cause d'une meilleure documentation.
Comment afficher le flux FLV de VLC dans la page Web est couvert ici: Stream VLC vers le site Web avec asf et Flash
Dépannage
Soyez conscient de nombreux problèmes qui surgiront. La première chose, comme dans tout, lisez . VLC est un programme très bavard, il vous indiquera donc où est le problème. Peut-être un problème avec les autorisations d'accès au périphérique vidéo / audio, les codecs manquants, les paramètres --sout mal orthographiés, ... Apprenez à utiliser iftop
pour voir si les données circulent vraiment via le réseau, etc.