Ich werde sofort eine Reservierung vornehmen: Während des Betriebs dieser Lösung wurde die Möglichkeit entdeckt, ein Videoarchiv mit SAMBA freizugeben. Diese Gelegenheit schien mir persönlich sehr bequem zu sein, und ich beschloss, sie in diesem Zusammenhang umzusetzen. Natürlich kann jemand eine Frage haben: "Gibt es eine Leitung und warum wird alles andere benötigt?" - In unserem Fall erwies sich diese Lösung als zu teuer.
- Unternehmensnetzwerk basierend auf Mikrotik über ein reguläres VPN
- Mehrere CCTVs, bestehend aus verschiedenen Kameras und einem Videorecorder
- Linux-Computer mit bereitgestelltem SAMBA-AD-DC- und WEB-Server in der Zentrale
Lohnt es sich daran zu erinnern, dass das Ganze von RTSP auf HLS konvertiert wird? Ich installiere den Shinobi-Host unter Linux gemäß dieser Anweisung . Die Installation ist nicht kompliziert, Sie müssen nur git und einige Abhängigkeiten installieren und das Installationsskript ausführen. Technisch die gleiche Linie, nur kostenlos. Vielleicht genug zum ersten Mal. Die Schnittstelle scheint nur bequemer, sonst das gleiche. Öffnen Sie nach der Installation und dem Start localhost : 8080 / super, melden Sie sich als admin@shinobi.video mit dem Kennwort admin an und erstellen Sie einen Haupteintrag für die Zugriffsüberwachung.
Die Standardspeicheroptionen haben bei mir nicht funktioniert. Außerdem habe ich während des Betriebs lange nach diesen Einstellungen gesucht, aber die Dringlichkeit hat mich gezwungen, cron.js (sudo pm2 stop cron) einfach zu deaktivieren und Linux-Tools zum Bereinigen der Videoarchivverzeichnisse zu verwenden.
Anzahl der Tage, an denen Videos gespeichert werden sollen - Die Anzahl der Tage, an denen Videos gespeichert werden sollen.
Anzahl der Tage, an denen Ereignisse gespeichert werden sollen - Die Anzahl der Tage, an denen Ereignisse gespeichert werden sollen (Anmeldungen, Kennwortänderungen usw.).
Anzahl der Tage, an denen Protokolle geführt werden sollen - Die Anzahl der Tage, an denen Systemnachrichten aufbewahrt werden sollen: Fehler, Fehler, Initialisierung.
Alle diese Parameter werden für jeden Benutzer individuell eingestellt, sehr praktisch. Es gibt aber auch eine API. Mit seinen Mitteln können Sie alle Streams eines bestimmten Monitors abrufen (ein Monitor ist eine Reihe von Streams für die Übertragung) und jeden von ihnen separat als Online-Übertragung auf einer Webseite präsentieren. Zunächst müssen Sie der Überwachung Informationen zu Streams von Videoüberwachungskameras hinzufügen.
Modus - Sendemodus: Aufnahme - Aufnahme, Nur ansehen - nur anzeigen .
Name - Der Name des Videostreams
Speicherort - Der Archivspeicherort, wenn Sie Aufzeichnen im Modus eingestellt haben
Vollständiger URL-Pfad - Ein Link zum RTSP-Stream selbst. Für die Netzüberwachung ist dies normalerweise der Link: rtsp: // IP: 554 / user = USER & password = PASSWORD & channel = CHANNELNUMBER & stream = 1.sdp? Real_stream - rtp-caching = 100 Die
in Shinobi angezeigten Informationen zum Ressourcenverbrauch unterscheiden sich stark von dem von htop angezeigt . In der Weboberfläche sehe ich ständig halb vollen Speicher, aber die Prozessorlast stimmt übrigens ziemlich gut mit der Anzeige auf der Konsole überein.
Soweit bekannt, ist es auch möglich, die System-GPU zum Konvertieren des Streams zu verwenden. Da wir es jedoch nicht installiert hatten, gab es keine Möglichkeit, dies sicherzustellen. Alles geschieht über die CPU. Wir haben 17 Streams konvertiert, von denen 3 lokal aufgezeichnet wurden. Ich werde hier Informationen über unseren Prozessor geben:
lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 36 bits physical, 48 bits virtual
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 30
Model name: Intel(R) Xeon(R) CPU X3440 @ 2.53GHz
Stepping: 5
CPU MHz: 1210.183
CPU max MHz: 2534,0000
CPU min MHz: 1200,0000
BogoMIPS: 5066.32
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
Wenn Sie nur eine Online-Sendung auf einer Webseite verbinden müssen, müssen Sie zuerst den API-Schlüssel dem Benutzer hinzufügen, an dessen Monitor wir interessiert sind. Eine vollständige API-Anleitung finden Sie auf der offiziellen Website der Anwendung. Platzieren Sie oben den Cursor auf der E-Mail des Benutzers, klicken Sie auf und wählen Sie das API-Element aus.
Der Hauptparameter für uns ist Zulässige IPs (zulässige IPs). Mein Zugriff ist nur für das lokale Netzwerk geöffnet. Wenn Sie jedoch Ihre Streams in das globale Internet streamen möchten, müssen Sie 0.0.0.0/0 angeben und den Shinobi-Port nach außen weiterleiten.
, Shinobi RTSP , -. . : , 100% -, - RJ-45. , IP : - . AHD . , , ( ) — , .
Informationen über Web-Streams können mit einer einfachen GET-Anforderung abgerufen werden. Das Ergebnis wird im JSON-Format abgerufen, das leicht in Daten konvertiert werden kann. Ein Beispiel für ein einfaches PHP-Skript:
<?php
$url = array(
'host' => '192.168.2.104', # , Shinobi
'port' => '8080', # web- Shinobi
'api' => 'TyIp1yRhqPLnJmlDpMzAenWYqVW8vt', # API
'monitor' => 'f2xnMN0VAv' # ID ,
);
$link = file_get_contents("http://". $url['host'] .":". $url['port'] ."/". $url['api'] ."/monitor/". $url['monitor'] ."/");
foreach(json_decode($link) as $data) {
$source['title'][] = $data->name;
$source['url'][] = "http://". $url['host'] .":". $url['port'] . $data->streams[0];
$source['width'][] = $data->width;
$source['height'][] = $data->height;
$source['status'][] = $data->status;
}
print "<html>
<head>
<title> </title>
<link rel='stylesheet' href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css' integrity='sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T' crossorigin='anonymous'>
<link href='https://vjs.zencdn.net/7.2.3/video-js.css' rel='stylesheet'>
</head>
<body>
<div class='container' style='padding: 30pt 0;'>
<div class='row'>
<div class='col-sm-12' style='margin: 10pt 0 10pt;'>
<div class='card'>
<div class='card-body'>
<form action='' method='POST'>
<select class='form-control form-control-lg' name='streamId' onchange='this.form.submit()'>
";
for($i = 0; $i <= count($source['title']); $i++){
if( $_POST['streamId'] == $i) {
print "<option value=". $i ." selected>". $source['title'][$i] ."</option>";
} else {
print "<option value=". $i .">". $source['title'][$i] ."</option>";
}
}
if( isset($_POST['streamId']) ) {
$id = $_POST['streamId'];
} else {
$id = 0;
}
print " </select></form>
</div>
</div>
</div>
<div class='col-sm-12'>
<div class='card'>
<div class='card-body'>
<video id='hls-example' style='margin: 0 auto;' class='video-js vjs-default-skin' width='". $source['width'][$id] ."' height='". $source['height'][$id] ."' controls>
<source type='application/x-mpegURL' src='". $source['url'][$id] ."'>
</video>
<!-- <p class='card-text'>This is another card with title and supporting text below. This card has some additional content to make it slightly taller overall.</p> -->
<p class='card-text' style='text-align: center;'> <small class='text-muted'> : ". $source['status'][$id] ."</small></p>
</div>
</div>
</div>
</div>
<script src='https://vjs.zencdn.net/ie8/ie8-version/videojs-ie8.min.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js'></script>
<script src='https://vjs.zencdn.net/7.2.3/video.js'></script>
<script>
var player = videojs('hls-example');
player.play();
</script>
</div>
</body>
</html>";
?>
Für einige Kameras habe ich den Aufnahmemodus angegeben. In diesem Fall wird nicht nur der Stream konvertiert, sondern auch von RTSP auf die lokale Festplatte aufgezeichnet. Wenn in den Aufzeichnungsparametern die Standardeinstellung angegeben ist, wird die Aufzeichnung im Ordner ./Shinobi/videos/ [MinitorID] / [[CameraID] gespeichert . Für mich sind einige Ordner vom Hauptmonitor über das Netzwerk zugänglich und werden über ein Gruppenrichtlinienobjekt für eine bestimmte Gruppe als Netzwerklaufwerke bereitgestellt.
Warum wird das gemacht? Ein einfaches Merkmal der Logistik: Es kommt vor, dass ein großes Auto mit Waren beladen wird und in eine andere Stadt fährt, wo es vom Käufer entladen wird, der sagen kann, dass etwas fehlt. Und es kommt vor, dass sie in ihren Läden etwas nicht mehr zählen können. Daher wird für das Lager von einigen Kameras, die bereits im MP4-Format vorliegen, eine separate Aufzeichnung erstellt. Dies kann Tonnen von Nachbesprechungszeit sparen.