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

Zielsetzung

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

Unser Stand besteht aus drei Komponenten:

  • Ip-Kamera
  • Medienserver
  • Flash-Player im Browser auf der Client-Seite

Auswählen einer IP-Kamera

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

Medienserver

Der schwierigste Teil der Konfiguration, wie die Funktionen des Abrufens von Video von der Kamera, das Konvertieren in das erforderliche Format, Zwischenspeichern und Verteilen an Kunden. Im Vorfeld 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 kostenpflichtige Lösungen: FMS , Wowza (Letzteres ist kostenlos mit weniger gleichzeitigen Verbindungen) und kostenlos ( red5 und rtmpd ).

Wenn Sie über HTTP verteilen, sind die Optionen sogar noch größer, da die Aufgabe in zwei Unteraufgaben unterteilt ist:

  1. Videoumwandlung
  2. Videoverteilung

Natürlich erhöht sich die Anzahl der Kombinationen. Für die Verteilung können Sie z. B. apache oder lighthttpd verwenden. Um zu konvertieren - ffmpeg.

In meinem Fall war es notwendig, alles zu tun

  1. unter Linux
  2. kostenlos
  3. nur

Deshalb habe ich bei der sehr, meiner Meinung nach, einfachen Variante angehalten, bei der wir nur ein Programm auf dem Server benötigen - den VLC- Videoplayer, den wir jedoch für unsere Bedürfnisse konfigurieren und kompilieren werden. Dieser Videoplayer hat noch keine normale Unterstützung für RTMP, also geben wir die Datei via HTTP.

Flash-Player im Browser auf der Client-Seite

Im Prinzip sollte jeder kommen, aber ich, aus irgendeinem Grund und habe es 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 wechselte zu Flow Spieler , wodurch das Problem verschwand.

Anpassen

Variablen

Um nicht weiter zu reservieren, 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, unter Linux arbeite ich unter dem Benutzer user, ich führe alle notwendigen Befehle über sudo aus ..

Kameraeinrichtung

Richten Sie die Kamera über die Weboberfläche ein, stellen Sie die erforderlichen Netzwerkparameter ein: IP-Adresse, Maske, Gateway, legen Sie die Uhrzeit frei. Wir müssen auch den Port angeben, an dem die Kamera den RTSP-Stream geben wird (Standardport 554 wird verwendet, ich beließ es).

Im Abschnitt "Audio und Video" legen wir die Eigenschaften des Videos fest, 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 korrekt ist, werden wir 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 Sie den Stream von der Kamera abholen. Wir müssen nur den Dateinamen angeben. Ich habe camera1.sdp eingegeben. Infolgedessen ist der Stream über rtsp: //10.0.0.3: 554 / camera1.sdp zugänglich.

Serverkonfiguration

Irgendein Linux, ich habe Debian Lenny benutzt. Erstellen Sie einen Ordner in dem Zuhause, 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/haupt/d/ debian-multimedia-schlüsselring / debian-multimedia-schlüsselring_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 stabile Hauptseite non-freel.deb

Wir müssen viele Pakete installieren, bevor wir direkt zu VLC gehen. 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 installieren yasm Unterversion xcb machen 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-gemein-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 Rest wird von der Quelle übernommen, um bestimmte Optionen aktivieren oder deaktivieren zu können. Beginnen wir mit der neuesten Version von ffmpeg:

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

Wenn Sie planen mit dem h264 Codec zu arbeiten, können Sie ffmpeg mit Optionen konfigurieren

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

Als nächstes benötigen wir eine sehr notwendige Bibliothek live555 Streaming Media, es ist damit, dass unser VLC-Player mit RTSP arbeiten wird.

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

Gehe nun zum VLC-Player. 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 / publ / videolan / vlc / neueste / 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 zu tun, damit wir etwas brauchen und nichts überflüssiges.
  1. .. / configure --freigabe -freigabe --enable-faad --disable-dbus --disable-hal \
  2. --disable-remoteosd --disable-qt4 --disable-skins2 --aktiviert-aktivx \
  3. --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --Disable-glx \
  4. --disable-opengl --disable-visuell --disable-nls --disable-mozilla \
  5. --enable-realrtsp --enable -flac --disable-lua --prefix = / usr \
  6. --with-live555-tree = / home / user / install / live --mit-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 den Player unter dem Stamm ausführen möchten , müssen Sie die Option --enable-run-as-root hinzufügen, wenn der Codec h264 --enable-x264 ist

Dann kompilieren wir und setzen den Spieler. Dieser Vorgang dauert ziemlich lange. In meinem Fall fehlte immer etwas zum Kompilieren, ich habe versucht, alle notwendigen Bibliotheken aufzulisten, aber auf jeden Fall kann sich alles von Version zu Version ändern, also achtet auf Fehler und liefert, was er verlangt.

  1. machen
  2. make installieren

Die Installation der Software ist abgeschlossen, alles, was wir brauchen, ist, den Player mit den erforderlichen Parametern zu starten. Im Allgemeinen ist der VLC-Player einzigartig in seiner Flexibilität.

Der Spieler wird mit uns in zwei simultanen Strömen arbeiten: der erste wird Video von der Kamera über RTSP empfangen, es in MPEG TS multiplexen und es zu localhost: 8001 geben, das zweite wird das Ergebnis von localhost: 8001 nehmen, komprimieren, kodieren, in FLV Behälter packen und geben HTTP an Port 8080. Lassen Sie uns zwei Dateien zum Starten dieser Streams erstellen:

  1. mkdir ~ Benutzer / Skripte
  2. touch ~ Benutzer / Skripte / Stream1.sh
  3. touch ~ Benutzer / Skripte / Stream2.sh

In stream1.sh fügen wir die folgenden Zeilen ein:

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

Hier haben wir dem Spieler gesagt, was er spielen soll und wo. Als Quelle wurde der Stream von der Kamera rtsp: //10.0.03: 554 / camera1.sdp ausgewählt, die Puffergröße wurde angegeben und sofort war unser erster Film stummgeschaltet ( -no-sout-audio ). Das Ergebnis wird von diesem Stream unter http://127.0.0.1:8001 ausgegeben. 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 seinen eigenen Cache, komprimiert ihn (vb - bitrate, fps - fps) und verteilt ihn über HTTP auf Port 8080 als Datei view01.flv. Wenn auf dem Server mehrere Schnittstellen vorhanden sind, können Sie unter dst die gleiche IP-Adresse der Schnittstelle angeben, auf der Sie die Verteilung vornehmen möchten.

Im industriellen Betrieb sollten die Threads im Hintergrund laufen und ohne Bindung an die Konsole, 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 der Füllung hängt direkt von der Größe des Caches ab (- rtsp-caching bzw. --http-caching ) Wir müssen eine Seite mit dem Player erstellen. Der Einfachheit halber machen wir es auf dem gleichen Server.

  1. apt-get installiert apache2
Spieler einstellen
  1. cd / var / www /

Laden Sie dann den Flow Player herunter. Auf der Entwicklerseite gibt es einen Einrichtungsassistenten, den Sie verwenden müssen, um sich zu 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 in den Ordner / var / www auf unserem Server.

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

  1. touch / var / www / index.html
Wir speichern den folgenden Text darin:
  1. < html > < Kopf >
  2. < meta http-equiv = "Inhaltstyp" content = "Text / HTML; Zeichensatz = UTF-8" > < script type = "text / javascript" src = "/player.js" > < / script >
  3. < title > Betrachten der Kamera 1 < / title >
  4. < / head >
  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 fertig, gehen Sie zum Browser unter http://10.0.0.2/ und schauen Sie sich die Sendung an.