This page has been robot translated, sorry for typos if any. Original content here.

Organisation de diffusion en direct depuis la caméra ip sur le site

Sur la page


Organisation de diffusion en direct depuis la caméra ip sur le site

Objectif

Considérez la tâche d'organiser des émissions vidéo en direct à partir de la caméra IP sur le site.

Notre stand est composé de trois éléments:

  • caméra ip
  • serveur multimédia
  • Flash Player dans le navigateur du côté client

Choisir une caméra ip

Afin d'être à l'aise pour prendre un flux de la caméra, il doit prendre en charge la transmission vidéo en direct (généralement en utilisant le protocole RTSP ). Il y a une autre option, quand à partir de la caméra à tout moment, vous pouvez prendre JPEG avec l'image actuelle via le protocole HTTP, mais ce n'est pas si pratique. Par conséquent, la caméra DCS-2121 D'Link avec prise en charge RTSP a été sélectionnée.

Serveur multimédia

La partie la plus difficile de la configuration, car il s'agit des fonctions d'obtenir la vidéo de la caméra, la conversion au format requis, la mise en cache et la distribution aux clients. En cours de route, je dirai qu'il est opportun de distribuer dans ce cas soit selon le protocole Adobo RTMP, qui est supporté nativement par les lecteurs flash, soit via HTTP.

Pour RTMP, il existe des solutions payantes: FMS , Wowza (ce dernier est gratuit avec moins de connexions simultanées) et gratuit ( red5 et rtmpd ).

Si vous distribuez via HTTP, les options sont encore plus nombreuses, car la tâche est divisée en deux sous-tâches:

  1. conversion vidéo
  2. distribution vidéo

Naturellement, le nombre de combinaisons augmente. Pour la distribution, vous pouvez utiliser, par exemple, apache ou lighthttpd. Pour convertir - ffmpeg.

Dans mon cas, il fallait faire tout

  1. sous Linux
  2. gratuitement
  3. juste

C'est pourquoi je me suis arrêté à la variante très simple, à mon avis, dans laquelle nous avons seulement besoin d'un programme sur le serveur - le lecteur vidéo VLC , que nous allons cependant configurer et compiler pour nos besoins. Ce lecteur vidéo n'a pas encore de support normal pour RTMP, nous allons donc donner le fichier flv via HTTP.

Flash Player dans le navigateur du côté client

En principe, tout devrait arriver, mais moi, pour une raison quelconque et n'a pas réussi à configurer JW Player . Le fichier FLV a été téléchargé sans fin sur le client et la mise en mémoire tampon n'a pas pris fin. Le timing a été resserré et le joueur a changé pour Flow player , à la suite de laquelle le problème a disparu.

Personnaliser

Variables

Pour éviter de faire d'autres réservations, nous supposerons que j'ai l' adresse IP du serveur - 10.0.0.2, la caméra - 10.0.0.3, le masque 255.0.0.0 et la passerelle 10.0.0.1, sous Linux je travaille sous l'utilisateur utilisateur, j'exécute toutes les commandes nécessaires via sudo .

Configuration de la caméra

Mettre en place la caméra via l'interface Web, définir les paramètres réseau nécessaires: adresse IP, masque, passerelle, exposer l'heure. Nous devons également spécifier le port sur lequel la caméra donnera le flux RTSP (le port standard 554 est utilisé, je l'ai quitté).

Dans la section "Audio et Vidéo", nous définirons les caractéristiques de la vidéo dont nous avons besoin. Dans tous les cas, nous pouvons changer le débit et la taille de l'image plus tard sur le serveur lors de la conversion, mais pour nous assurer que tout est correct, nous le signalerons immédiatement ici. Nous allons utiliser MPEG4 640x480, 15 fps, 512kb bitrate.

Juste ici, vous devez spécifier URL RTSP cette adresse sera utilisée lors de la collecte du flux de la caméra, nous avons seulement besoin de spécifier le nom du fichier. Je suis entré dans camera1.sdp. En conséquence, le flux sera accessible via rtsp: //10.0.0.3: 554 / camera1.sdp

Configuration du serveur

N'importe quel Linux, j'ai utilisé Debian Lenny. Créez un dossier dans la maison où nous allons travailler:

  1. mkdir ~ utilisateur / installer
  2. cd ~ utilisateur / installer

Nous avons besoin de télécharger les codecs, donc nous connectons le dépôt debian-multimedia:

  1. wget http: // www.debian-multimedia.org / pool / main / d / debian-multimedia-keyring / debian-multimedia-keyring_2008.10.16_all.deb
  2. dpkg -i . / debian-multimedia-keyring_2008.10.16_all.deb

Ajouter une ligne à /etc/apt/sources.list

  1. deb http: // www.debian-multimedia.org stable principal non-freel.deb

Nous devrons installer plusieurs paquets avant de passer directement à VLC. J'ai essayé d'énumérer tout ici, mais peut-être que quelque chose ne suffit pas, dans ce cas, les disparus devront être livrés.

  1. apt-get mise à jour
  2. apt-get install yasm faire subversion xcb libxcb1-dev libxcb-shm0-dev libxcb-keysyms0-dev \
  3. libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev libavutilcvs49-dev \
  4. autoconf g ++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \
  5. libavutilcvs49 libavahi-client3 libavahi-commun-dev libpostproccvs51-dev libswscalecvs0-dev \
  6. libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264- 54 automake1.9 libgcrypt11-dev \
  7. liblame-dev liblua5.1-0 -dev libmad0-dev libmpeg2-4 -dev libogg-dev libvorbis-dev zlib1g-dev \
  8. libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev libx264-dev x264

Tout le reste sera mis à la source pour pouvoir activer ou désactiver certaines options. Commençons par la dernière version de ffmpeg:

  1. svn checkout svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg
  2. cd ffmpeg
  3. . / configurer
  4. faire
  5. faire l' installation
  6. cd ..

Si vous envisagez de travailler avec le codec h264, vous pouvez configurer ffmpeg avec des options

./configure --enable-libx264 --enable-gpl

Ensuite, nous avons besoin d'une bibliothèque très nécessaire live555 streaming media, c'est avec elle que notre lecteur VLC fonctionnera avec RTSP.

  1. wget http: // www.live555.com / liveMedia / public / live555-latest.tar.gz
  2. tar zxvf. / live555-latest.tar.gz
  3. cd en direct
  4. . / genMakefiles linux
  5. faire
  6. cd ..

Maintenant, allez au joueur VLC lui-même. Nous allons http://download.videolan.org/pub/videolan/vlc/latest/ et voyons quelle est la dernière version, puis nous extrayons et décompressons les sources. Dans mon cas, cela ressemblait à ceci:

  1. wget http: // télécharger.videolan.org / pub / videolan / vlc / dernier / vlc-1.1.0.tar.bz2
  2. bzip2 -d vlc-1.1.0.tar.bz2
  3. tar xvf. / vlc-1.1.0.tar
  4. cd vlc-1.1.0
La configuration de VLC est la partie la plus créative, nous allons essayer de le faire pour qu'il y ait quelque chose dont nous avons besoin et rien de superflu.
  1. . / configure --enable-release --enable -faad --disable-dbus --disable-hal \
  2. --disable-remoteosd --disable-qt4 --disable-skins2 --disable-activex \
  3. --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \
  4. --disable-opengl --disable-visual --disable-nls --disable-mozilla \
  5. --enable-realrtsp --enable-flac --disable-lua --prefix = / usr \
  6. --with-live555-tree = / home / utilisateur / install / live --avec-ffmpeg-tree = / home / utilisateur / install / ffmpeg

Dans la dernière ligne, nous spécifions les chemins vers les sources ffmpeg et live555, avec lesquels nous avons travaillé sur les étapes précédentes. Si vous prévoyez d'exécuter le lecteur sous la racine, vous devez ajouter l'option --enable-run-as-root , si le codec h264 est --enable-x264

Ensuite, nous compilons et mettons le joueur. Cette procédure prend beaucoup de temps. Dans mon cas, il manquait toujours quelque chose à compiler, j'ai essayé d'énumérer toutes les bibliothèques nécessaires, mais dans tous les cas, tout peut changer de version en version, alors faites attention aux erreurs et livrez ce qu'il demande.

  1. faire
  2. faire l' installation

L'installation du logiciel est terminée, il suffit de lancer le lecteur avec les paramètres requis. En général, le lecteur VLC est unique dans sa flexibilité.

Le joueur travaillera avec nous dans deux flux simultanés: le premier recevra la vidéo de la caméra via RTSP, le multiplexera en MPEG TS et le donnera à localhost: 8001, le second prendra le résultat de localhost: 8001, compressera, encodera, emballera dans le conteneur FLV et donnera HTTP sur le port 8080. Faisons deux fichiers pour lancer ces flux respectivement:

  1. mkdir ~ utilisateur / scripts
  2. touchez ~ utilisateur / scripts / stream1.sh
  3. Touchez ~ user / scripts / stream2.sh

Dans stream1.sh, nous insérons les lignes suivantes:

  1. #! / bin / sh
  2. vlc -vv rtsp: // 10.0.0.3: 554 / camera1.sdp --rtsp-cache = 100000 --no-sout-audio --sout \
  3. '#std {accès = http, dst = 127.0.0.1: 8001, mux = ts}'

Ici, nous avons dit au joueur quoi jouer et où. En tant que source, le flux de la caméra rtsp: //10.0.03: 554 / camera1.sdp a été sélectionné, la taille de la mémoire tampon a été spécifiée et immédiatement notre premier film était muet ( --no-sout-audio ). Le résultat sera donné par ce flux à http://127.0.0.1:8001Dans stream2.sh nous insérons les lignes:

  1. #! / bin / sh
  2. vlc -vv http: // 127.0.0.1: 8001 --loop --http-caching = 10000 --sout \
  3. '#transcode {vcodec = FLV1, vb = 512, fps = 15}: std {accès = http {mime = vidéo / x-flv}, dst =: 8080 / view01.flv, mux = ffmpeg {mux = flv}} '

Le deuxième thread prend http://127.0.0.1:8001, a son propre cache, le compresse (vb - bitrate, fps - fps) et le distribue via HTTP sur le port 8080 en tant que fichier view01.flv. S'il y a plusieurs interfaces sur le serveur, vous pouvez spécifier dans dst la même adresse IP spécifique de l'interface sur laquelle vous voulez distribuer.

En exploitation industrielle, les threads doivent être exécutés en arrière-plan et sans se lier à la console, dans notre exemple, nous les exécuterons uniquement sur deux consoles. VLC devrait remplir le tampon pendant un moment, puis passer en mode normal. La durée du remplissage dépend directement de la taille du cache ( --rtsp-cache et --http-cache, respectivement) .Nous devons créer une page avec le lecteur. Pour simplifier, nous allons le faire sur le même serveur.

  1. apt-get installer apache2
Réglage du lecteur
  1. cd / var / www /

Ensuite, téléchargez Flow Player. Sur le site du développeur, il y a un assistant d'installation pour l'utiliser, vous devez vous inscrire. Un assistant est disponible sur http://flowplayer.org/setup/index.html .

Puisque nous avons un flux en direct et que la caméra affiche l'heure actuelle directement dans l'image, le joueur doit être minimaliste. Désactivez tout sauf le bouton "Plein écran", téléchargez le lecteur et déballez le contenu de l'archive dans le dossier / var / www sur notre serveur.

Pour que tout soit parfait, j'ai aussi renommé les fichiers swf et js en player.swf et player.js, respectivement. Je n'écrirais pas sur ce fait, si j'avais oublié comment ils avaient été appelés auparavant. Par conséquent, dans le texte, j'utiliserai également mes nouveaux noms. Donc, créez une page html

  1. touchez / var / www / index.html
Nous sauvegardons le texte suivant:
  1. < html > < head >
  2. < meta http-equiv = "contenu-type" content = "texte / html; jeu de caractères = UTF-8" > < script type = "texte / javascript" src = "/player.js" > < / script >
  3. < title > Affichage de la caméra 1 < / title >
  4. < / head >
  5. < body >
  6. < h1 > Caméra n ° 1 < / h1 >
  7. < a
  8. href = "http://stream.kubsu.ru:8080/view01.flv"
  9. style = "display: block; largeur: 520px; hauteur: 330px; marge: 10px auto;"
  10. id = "joueur" >
  11. < / a >
  12. < script >
  13. flowplayer ("joueur", "/player.swf");
  14. < / script >
  15. < / body > < / html >

Tout est prêt, allez sur le navigateur à http://10.0.0.2/ et regardez la diffusion.