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

Organisation der Live-Übertragung von der IP-Kamera auf der Website

Auf der Seite


Organisation der Live-Übertragung von der IP-Kamera auf der Website

Ziel

Betrachten Sie die Aufgabe, Live-Video-Übertragungen von der IP-Kamera auf der Website zu organisieren.

Unser Stand besteht aus drei Komponenten:

  • IP-Kamera
  • Medienserver
  • flash player im Browser auf der Client-Seite

Wählen einer IP-Kamera

Um bequem einen Stream von der Kamera aufnehmen zu können, muss er die Live-Videoübertragung unterstützen (normalerweise unter Verwendung des RTSP- Protokolls). Es gibt eine andere Möglichkeit, wenn Sie von der Kamera zu jeder Zeit JPEG mit dem aktuellen Rahmen über das HTTP-Protokoll aufnehmen können, aber es ist nicht so bequem. Daher wurde die D'Link DCS-2121 Kamera mit RTSP-Unterstützung ausgewählt.

Medienserver

Der schwierigste Teil der Konfiguration, da es die Funktionen des Abrufens von Videos von der Kamera, des Konvertierens in das erforderliche Format, des Caching und der Verteilung an Kunden ist. Im weiteren Verlauf werde ich sagen, dass es sinnvoll ist, in diesem Fall entweder nach dem Adobo-Protokoll RTMP, das nativ von Flash-Playern unterstützt wird, oder über HTTP zu verteilen.

Für RTMP gibt es bezahlte Lösungen: FMS , Wowza (letzteres ist kostenlos mit weniger gleichzeitigen Verbindungen) und frei ( red5 und rtmpd ).

Wenn Sie über HTTP verteilen, sind die Optionen sogar noch mehr, da die Aufgabe in zwei Teilaufgaben unterteilt ist:

  1. Videokonvertierung
  2. Videoverteilung

Natürlich erhöht sich die Anzahl der Kombinationen. Für die Verteilung können Sie beispielsweise apache oder lighthttpd verwenden. Umwandeln - ffmpeg.

In meinem Fall war es notwendig, alles zu machen

  1. unter Linux
  2. kostenlos
  3. einfach

Deshalb habe ich bei der, meiner Meinung nach, einfachen Variante, in der wir nur ein Programm auf dem Server brauchen - den VLC- Videoplayer, den wir jedoch für unsere Bedürfnisse konfigurieren und übersetzen werden - aufgehört. Dieser Video-Player hat noch keine normale Unterstützung für RTMP, daher geben wir die FLV-Datei über HTTP.

flash player im Browser auf der Client-Seite

Im Prinzip sollte jeder auftauchen, aber ich habe es aus irgendeinem Grund nicht geschafft, JW Player zu konfigurieren. Die FLV-Datei wurde endlos auf den Client heruntergeladen, und die Pufferung wurde nicht beendet. Das Timing wurde verschärft und der Spieler wurde zum Flow-Spieler , wodurch das Problem verschwand.

Anpassen

Variablen

Um weitere Reservierungen zu vermeiden, nehmen wir an, dass ich die IP-Adresse des Servers - 10.0.0.2, die Kamera - 10.0.0.3, die Maske 255.0.0.0 und das Gateway 10.0.0.1 habe, in Linux arbeite ich unter dem Benutzer user, ich führe alle notwendigen Befehle über sudo aus .

Kamera-Setup

Richten Sie die Kamera über das Webinterface ein, stellen Sie die notwendigen Netzwerkparameter ein: IP-Adresse, Maske, Gateway, legen Sie die Zeit offen. Wir müssen auch den Port angeben, an dem die Kamera den RTSP-Stream liefert (Standard-Port 554 wird verwendet, ich habe ihn verlassen).

Im Bereich "Audio und Video" werden wir die Eigenschaften des Videos festlegen, die wir benötigen. In jedem Fall können wir die Bitrate und die Größe des Bildes später auf dem Server während der Konvertierung ändern, aber um sicherzustellen, dass alles genau ist, werden wir hier sofort darauf hinweisen. Wir werden MPEG4 640x480, 15 fps, 512kb Bitrate verwenden.

Hier müssen Sie die RTSP-URL angeben. Diese Adresse wird verwendet, wenn der Stream von der Kamera aufgenommen wird. Wir müssen nur den Dateinamen angeben. Ich habe camera1.sdp eingegeben. Daher ist der Stream über rtsp: //10.0.0.3: 554 / camera1.sdp erreichbar

Serverkonfiguration

Irgendein Linux, ich habe Debian Lenny benutzt. Erstellen Sie einen Ordner im Haus, in dem wir arbeiten werden:

  1. mkdir ~ Benutzer / installieren
  2. CD ~ Benutzer / installieren

Wir müssen die Codecs herunterladen, also verbinden wir das Debian-Multimedia-Repository:

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

Fügen Sie eine Zeile zu /etc/apt/sources.list hinzu

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

Bevor wir direkt zu VLC gehen, müssen wir viele Pakete installieren. Ich habe versucht, hier alles aufzulisten, aber vielleicht ist etwas nicht genug, in diesem Fall muss das Vermisste geliefert werden.

  1. apt-get- Aktualisierung
  2. apt-get install yasm machen 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-common-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

Der gesamte Rest wird von der Quelle platziert, um bestimmte Optionen aktivieren oder deaktivieren zu können. Fangen wir mit der neuesten Version von ffmpeg an:

  1. svn : svn : // svn.ffmpeg.org / ffmpeg / trunk ffmpeg
  2. CD ffmpeg
  3. . / konfigurieren
  4. machen
  5. Installieren
  6. CD ..

Wenn Sie mit dem h264-Codec arbeiten möchten, können Sie ffmpeg mit Optionen konfigurieren

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

Als nächstes brauchen wir eine sehr notwendige Bibliothek live555 Streaming Media, damit wird unser VLC Player mit RTSP arbeiten.

  1. wget http: // www.live555.com / liveMedia / öffentlich / live555-latest.tar.gz
  2. tar zxvf. / live555-aktuell.tar.gz
  3. CD live
  4. . / genMakefiles Linux
  5. machen
  6. CD ..

Gehe jetzt zum VLC Player selbst. Wir gehen http://download.videolan.org/pub/videolan/vlc/latest/ und sehen, was die neueste Version ist, dann extrahieren und entpacken wir die Quellen. In meinem Fall sah es so aus:

  1. wget http: // download.videolan.org/pub/videolan/vlc/letztes/vlc- 1.1.0.tar.bz2
  2. bzip2 -d vlc-1.1.0.tar.bz2
  3. Teer xvf. / vlc-1.1.0.tar
  4. CD vlc-1.1.0
Die Konfiguration von VLC ist der kreativste Teil, wir werden versuchen, es so zu machen, dass wir etwas brauchen und nichts überflüssig.
  1. . / configure --enable-release --enable-faad --deaktivierbar-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 / benutzer / installieren / leben --with-ffmpeg-tree = / home / user / install / ffmpeg

In der letzten Zeile geben wir die Pfade zu den Quellen ffmpeg und live555 an, mit denen wir an den vorherigen Schritten gearbeitet haben. Wenn Sie planen, den Player unter dem Stammverzeichnis auszuführen , müssen Sie die Option --enable-run-as-root hinzufügen, wenn der h264-Codec --enable-x264 lautet

Dann kompilieren wir und legen den Player. Dieser Vorgang benötigt einige Zeit. In meinem Fall fehlte immer etwas, das kompiliert werden musste. Ich habe versucht, alle notwendigen Bibliotheken aufzulisten, aber auf jeden Fall kann sich alles von Version zu Version ändern, also auf Fehler achten und liefern, was er verlangt.

  1. machen
  2. Installieren

Die Installation der Software ist abgeschlossen, wir müssen lediglich den Player mit den erforderlichen Parametern starten. Im Allgemeinen ist der VLC-Player einzigartig in seiner Flexibilität.

Der Spieler wird mit uns in zwei simultanen Streams arbeiten: der erste wird Video von der Kamera über RTSP empfangen, multiplext es in MPEG TS und gibt es an localhost: 8001, der zweite wird das Ergebnis von localhost: 8001, komprimieren, encodieren, in FLV container packen und geben HTTP auf Port 8080. Lassen Sie uns 2 Dateien zum Starten dieser Streams erstellen:

  1. mkdir ~ Benutzer / Skripte
  2. berühre ~ user / scripts / stream1.sh
  3. berühre ~ user / scripts / stream2.sh

In stream1.sh fügen wir folgende Zeilen ein:

  1. #! / bin / sh
  2. vlc -vv rtsp: // 10.0.0.3: 554 / kameras1.sdp --rtsp-caching = 100000 --no-sout-audio --out \
  3. '#std {Zugriff = http, dst = 127.0.0.1: 8001, mux = ts}'

Hier haben wir dem Spieler gesagt, was er wo spielen soll. Als Quelle wurde der Stream von der rtsp: //10.0.03: 554 / camera1.sdp Kamera ausgewählt, die Puffergröße wurde angegeben und sofort war unser erster Film stumm ( --no-sout-audio ). Das Ergebnis wird von diesem Stream unter http://127.0.0.1:8001 angegeben. In stream2.sh fügen wir die Zeilen ein:

  1. #! / bin / sh
  2. vlc -vv http: // 127.0.0.1: 8001 --loop --http-caching = 10000 --out \
  3. '#Transcode {vcodec = FLV1, vb = 512, fps = 15}: std {Zugriff = http {Mime = Video / x-flv}, dst =: 8080 / view01.flv, mux = ffmpeg {mux = flv}} "

Der zweite Thread nimmt http://127.0.0.1:8001, hat einen eigenen Cache, komprimiert ihn (vb - bitrate, fps - fps) und verteilt ihn via HTTP auf Port 8080 als Datei view01.flv. Wenn auf dem Server mehrere Schnittstellen vorhanden sind, können Sie in dst dieselbe spezifische IP-Adresse der Schnittstelle angeben, auf die Sie verteilen möchten.

Im industriellen Betrieb sollten die Threads im Hintergrund und ohne Bindung an die Konsole laufen, in unserem Beispiel werden wir sie nur in zwei Konsolen ausführen. vlc sollte den Puffer für eine Weile füllen und dann in den normalen Modus wechseln. Die Dauer des Füllens hängt direkt von der Größe des Cache ab ( --rtsp-caching bzw. --http-caching ) Wir müssen eine Seite mit dem Player erstellen. Der Einfachheit halber werden wir es auf demselben Server machen.

  1. apt-get installiert apache2
Einstellen des Spielers
  1. cd / var / www /

Dann lade Flow Player herunter. Auf der Website des Entwicklers gibt es einen Setup-Assistenten, um ihn zu verwenden, Sie müssen sich registrieren. Ein Assistent ist unter http://flowplayer.org/setup/index.html verfügbar.

Da wir einen Live-Stream haben und die Kamera die aktuelle Uhrzeit direkt im Bild anzeigt, sollte der Player minimalistisch sein. Deaktivieren Sie alle außer der Schaltfläche "Vollbild", laden Sie den Player herunter und entpacken Sie den Inhalt des Archivs im Ordner / var / www auf unserem Server.

Um alles perfekt zu machen, habe ich die SWF- und JS-Dateien auch in player.swf und player.js umbenannt. Ich würde nicht über diese Tatsache schreiben, wenn ich vergessen hätte, wie sie vorher genannt wurden. Daher werde ich im Text auch meine neuen Namen verwenden. Also, erstellen Sie eine HTML-Seite

  1. berühre / var / www / index.html
Wir speichern den folgenden Text darin:
  1. < html > < Kopf >
  2. < Meta http-equiv = "Inhaltstyp" content = "text / html; Zeichensatz = UTF-8" > < Skripttyp = "text / javascript" src = "/player.js" > < / script >
  3. < title > Anzeigen der Kamera 1 < / title >
  4. < / Kopf >
  5. < Körper >
  6. < h1 > Kamera # 1 < / h1 >
  7. < a
  8. href = "http://stream.kubsu.ru:8080/view01.flv"
  9. style = "display: block; Breite: 520px; Höhe: 330px; Rand: 10px auto;"
  10. id = "Spieler" >
  11. < / a >
  12. < Skript >
  13. flowplayer ("Spieler", "/player.swf");
  14. < / script >
  15. < / body > < / html >

Alles ist bereit, gehen Sie zum Browser unter http://10.0.0.2/ und schauen Sie sich die Sendung an.