Was ist das Hauptproblem bei modernen kostengünstigen IP-Kameras? Sie können sie nicht einfach zu Ihrer Site hinzufügen! Sie rendern Videos in einem völlig anderen Format als die Browser verstehen. Ja, natürlich können Sie direkt zur Kamera gehen (und oft nur mit IE), und viele Modelle haben eine "Wolke". Das Problem bleibt jedoch bestehen: Ich kann nicht einfach eine Kamera wie ein einfaches Bild auf einer Website platzieren!
Ich habe viele Lösungen für die Organisation von Sendungen von IP-Kameras verschiedener Anbieter geprüft, einschließlich OpenSource-Lösungen. Die meisten haben einen Nachteil, der für mich sehr wichtig ist: Das System erfasst ständig den Strom von der Kamera, auch wenn keine Zuschauer anwesend sind.
In meinem Fall musste auf der Site ein Bild von Remote-Kameras angezeigt werden, die über einen 4G-Kanal in einem Remote-Bereich verbunden waren. Die Upload-Geschwindigkeit stieg im besten Fall nicht über 10 Mbit / s, betrug jedoch normalerweise 2-3 Mbit / s. Obwohl der Verkehr unbegrenzt ist, warnte der Anbieter inoffiziell, dass der Verbrauch von mehr als 200 GB Verkehr sicherlich negative Auswirkungen haben wird, wie beispielsweise die bedingte "unbegrenzte". Ich nehme an, sie werden einfach die Geschwindigkeit "verringern".
Einige der auf den Freiflächen von GitHub gefundenen Lösungen waren praktisch geeignet, hatten jedoch keine gute Dokumentation oder schienen nur kompliziert und umständlich zu sein.
Und ich brauchte ein Online-Rundfunksystem mit folgenden Eigenschaften:
verbraucht keinen Verkehr in Abwesenheit von Zuschauern;
durchschnittliche tägliche gleichzeitige Anzahl von Zuschauern - 1-3 Personen;
Unterstützung, wenn nicht alle, dann die meisten gängigen Internetbrowser, einschließlich mobiler;
so einfach und verständlich wie möglich;
preiswert;
vorzugsweise OpenSource.
Nachdem ich umfangreiche Erfahrungen mit dem FFMpeg-Programm gesammelt hatte, beschloss ich, all diese Funktionen selbst zu implementieren. Was ist am Ende falsch an einem "Fahrrad", das mit eigenen Händen hergestellt wurde, wenn Sie den Wunsch und die Zeit haben?
« , iVideon?» . , , , . , , ( ). , ( , ). , , . , «iVideon-» .
, , , Google Chrome Mozilla Firefox, H.264- . « » FFMpeg :
-movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov
FFMpeg, MP4- moov moof .
:
«-c copy
» ;
«-an
» — (- , , );
«-t
» ( , );
«-rtsp_transport tcp
» — , RTP-, NAT ( );
«-probesize 32
» — ;
«-stimeout 5000000
» — - (5 ).
, PHP? . :
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header('Accept-Ranges:bytes');
header('Connection:keep-alive');
header('Content-type: video/mp4');
PHP FFMpeg :
passthru("ffmpeg < > -f mp4 pipe:");
, , Safari Mac iOS. , MP4 , — . , «» Google Chrome, .
, — MJPEG , , MP4, — ? — , , , … , , . , .
, . , :
: OGV WEBM;
();
, , (, ), , ;
- Mac. - — , . , «». Safari — .
, , — . :
, , Debian, Apache+PHP7 FFMpeg;
SSL- ;
www ;
camera.php (; ) $key, $redirectToIfBackground , ;
camera.php : camera.php?a=<rtsp- base64>&b=<>&c=<rtsp- base64>. «c» , .
, 5 . , base64 , http://base64.ru/, RTSP-.
, . MODX Revolution, , . CMS. $key $camera_server_url ( — , , ).
, :
{camera**RTSP-*RTSP- }
RTSP- . , . RTSP- , Onvif Device Manager. , « ».
. , , , . , «» camera.php, RTSP-, ( RTSP-), $key. , RTSP. «» . , . , … - «», .
Übrigens sind alle meine Kameras persönlich über VPN (ich liebe Wireguard) in einem Netzwerk verbunden, alle Links, die ich mit "grauer IP" registriere. Bequem, sicher, glücklich.
Mein Code wird unter der MIT-Lizenz veröffentlicht.
Das Projekt verwendet die von Serkan Yerşen entwickelte, vom MIT lizenzierte Bibliothek ifvisible.js.