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 der Organisation von Live-Video-Sendungen von der IP-Kamera auf der Website.

Unser Stand besteht aus drei Komponenten:

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

Auswahl einer IP-Kamera

Um bequem einen Stream von der Kamera zu nehmen, muss er die Live-Videoübertragung unterstützen (in der Regel mit dem RTSP- Protokoll). Es gibt noch eine andere Möglichkeit, wenn man von der Kamera zu jeder Zeit JPEG mit dem aktuellen Frame über das HTTP-Protokoll abholen kann, 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 Erhaltens von Video von der Kamera ist, das Umwandeln in das erforderliche Format, das Caching und die Verteilung an Kunden. Vorwärts gehen, werde ich sagen, dass es zweckmäßig ist, in diesem Fall entweder nach dem Adobo-Protokoll RTMP zu verteilen, das nativ von Flash-Playern oder über HTTP unterstützt wird.

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

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

  1. Video-Konvertierung
  2. Video-Verteilung

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

In meinem Fall war es notwendig, alles zu machen

  1. unter Linux
  2. kostenlos
  3. nur

Das ist der Grund, warum ich in meiner Meinung nach eine einfache Variante gestoppt habe, in der wir nur ein Programm auf dem Server brauchen - den VLC- Videoplayer, den wir aber für unsere Bedürfnisse konfigurieren und kompilieren werden. Dieser Video-Player hat noch keine normale Unterstützung für RTMP, also geben wir die FLV-Datei über HTTP.

Flash-Player im Browser auf der Client-Seite

Grundsätzlich sollte jeder kommen, aber ich, aus irgendeinem Grund und 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 verschwunden war.

Anpassen

Variablen

Um die Vorbehalte zu vermeiden, gehen wir davon aus, dass ich die IP-Adresse des Servers habe - 10.0.0.2, die Kamera - 10.0.0.3, die Maske 255.0.0.0 und das Gateway 10.0.0.1, unter Linux arbeite ich unter dem User User, ich laufe alle notwendigen Befehle via sudo .

Kamera-Setup

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

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

Gerade hier muss man RTSP URL angeben, diese Adresse wird beim Abholen des Streams von der Kamera verwendet, wir müssen nur den Dateinamen angeben. Ich habe Kamera1.sdp eingegeben. Als Ergebnis wird der Stream über rtsp zugänglich sein: //10.0.0.3: 554 / camera1.sdp

Server-Konfiguration

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

  1. mkdir ~ user / install
  2. cd ~ user / install

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-keyring / 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 stabil main nicht 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 Fehlende ausgeliefert werden.

  1. apt-get update
  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 ganze Rest wird aus der Quelle gesetzt, um bestimmte Optionen aktivieren oder deaktivieren zu können. Beginnen wir mit der neuesten Version von ffmpeg:

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

Wenn du mit dem h264 Codec arbeiten möchtest, kannst du ffmpeg mit Optionen konfigurieren

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

Als nächstes brauchen wir eine sehr notwendige Bibliothek live55 Streaming-Medien, es ist damit, dass unser VLC-Player mit RTSP arbeiten wird.

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

Gehen Sie nun zum VLC-Spieler. 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 / latest / 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
Die Konfiguration von VLC ist der kreativste Teil, wir werden versuchen, es zu tun, so dass es etwas gibt, was wir brauchen und nichts überflüssig sind.
  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 / user / install / live --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 der Wurzel auszuführen , müssen Sie die Option --enable-run-as-root hinzufügen, wenn der h264-Codec --enable-x264 ist

Dann kompilieren wir den Spieler. Dieser Vorgang dauert ziemlich lange. In meinem Fall gab es immer etwas fehlt zu kompilieren, ich habe versucht, alle notwendigen Bibliotheken aufzählen, aber auf jeden Fall kann alles von Version zu Version wechseln, also auf Fehler aufpassen und liefern was er verlangt.

  1. machen
  2. make installieren

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

Der Spieler wird mit uns in zwei gleichzeitigen Streams arbeiten: der erste erhält Video von der Kamera über RTSP, multiplex es in MPEG TS und gib es zu localhost: 8001, der zweite wird das Ergebnis von localhost: 8001, komprimieren, verschlüsseln, packen in FLV-Container und geben zu HTTP auf Port 8080. Lassen Sie uns 2 Dateien zum Starten dieser Streams machen:

  1. mkdir ~ user / scripts
  2. touch ~ user / scripts / stream1.sh
  3. touch ~ 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 / camera1.sdp --rtsp-caching = 100000 --no-sout-audio --sout \
  3. '#std {access = http, dst = 127.0.0.1: 8001, mux = ts}'

Hier haben wir dem Spieler erzählt, was zu spielen und wo. 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 gegeben werden unter http://127.0.0.1:8001In stream2.sh fügen wir die Zeilen:

  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 {access = 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 es mehrere Schnittstellen auf dem Server gibt, können Sie in dst die gleiche spezifische IP-Adresse der Schnittstelle angeben, auf der Sie verteilen möchten.

Im industriellen Betrieb sollten die Fäden im Hintergrund und ohne Bindung an die Konsole laufen, in unserem Beispiel werden wir sie nur in zwei Konsolen laufen lassen. vlc sollte den Puffer für eine Weile füllen und dann in den normalen Modus gehen. Die Dauer der Befüllung hängt direkt von der Größe des Cache ab ( --rtsp-caching und --http-caching ). Wir müssen eine Seite mit dem Spieler erstellen. Zur Vereinfachung machen wir es auf dem gleichen Server.

  1. apt-get install apache2
Einstellen des Players
  1. cd / var / www /

Dann laden Sie Flow Player herunter. Auf der Entwickler-Website gibt es einen Setup-Assistenten, um es zu benutzen, müssen Sie 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 Spieler minimalistisch sein. Deaktivieren Sie alle außer dem Button "Fullscreen", 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 auch die swf- und js-Dateien an player.swf bzw. player.js umbenannt. Ich würde nicht über diese Tatsache schreiben, wenn ich vergessen habe, wie sie vorher genannt 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 > < head >
  2. < meta http-equiv = "content-type" content = "text / html; charset = UTF-8" > < script type = "text / javascript" src = "/player.js" > < / script >
  3. < title > Kamera anzeigen 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; width: 520px; height: 330px; margin: 10px auto;"
  10. id = "Spieler" >
  11. < / a >
  12. < script >
  13. flowplayer ("player", "/player.swf");
  14. < / script >
  15. < / body > < / html >

Alles ist fertig, geh zum Browser bei http://10.0.0.2/ und schaue die Sendung an.