IP camera

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan R

Jan R

14/06/2015 08:54:37
Quote Anchor link
Hoi,

Is er iemand die ervaring heeft met IP camera's; Ik heb 2 nas'en die elk 2 camera's ondersteunen.
QNAP TS-415 en synology 415play.
hieraan zou ik de 2 camera's willen laten opnemen. De connectie zal via Wi-Fi moeten op de Telenet router en de resolutie HD.

Vragen:
Waar moet ik op letten.
Wat is een goed merk/model
...



Jan
 
PHP hulp

PHP hulp

30/11/2024 22:34:03
 
Marthijn Buijs

Marthijn Buijs

14/06/2015 10:40:29
Quote Anchor link
Ik denk niet dat er hier mensen zijn die ervaring mee hebben met dit hebben.
Kijk eens bij een elektronica winkel of een specialzaak zou ik zeggen ;)
 
Paco de Wulp

Paco de Wulp

14/06/2015 10:52:17
Quote Anchor link
Waarom denk je dat Maarten ??
Iedereen heeft zo zijn hobbies. Toch ?
Gewijzigd op 14/06/2015 10:54:14 door Paco de Wulp
 
Daan Slagter

Daan Slagter

14/06/2015 11:57:03
Quote Anchor link
Hoi, ik heb een Synology nas met een IP camera alleen ik heb niet gekeken welke merken mijn nas ondersteunde waardoor het moeilijker was om het werkend te krijgen wat uiteindelijke wel gelukt is. Dus ik zou een merk nemen die jouw nas ondersteunt.
 
Ivo P

Ivo P

15/06/2015 10:11:19
Quote Anchor link
Ik had eerste camera's en pas later een NAS.

Maar nog steeds neem ik op via mijn eerste oplossing: mbt PHP op de webserver.

Er draait een continue cronjob. Deze start om 0:00 en eindigt zodra de datum verandert. (dus na 24 uur).

Gedurende de loop van het script start hij een commando waarmee middels wget de stream van de camera wordt uitgelezen.

Om de grootte van de file te beperken, en om gericht een opname te kunnen terugvinden, wordt na 1 kwartier de opname gestopt en een nieuwe gestart. (kan uiteraard ook met een andere periode)

In principe zou de cronjob ook eenmalig kunnen starten en niet meer afbreken.
Maar mocht om een of andere reden het proces crashen of de server restarten oid. dan zouden mijn opnamen permanent stoppen.
Nu heb ik in elk geval de zekerheid dat uiterlijk om 0:00 opnieuw gestart wordt met opnemen.

aanroep middels

/usr/bin/php /path/record.php cam1


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
  $dateStart
= new DateTime();
  $dateEnd = (new DateTime())->modify('+1 day');
  $dateNow = new DateTime();

  $cam = $argv[1];

  switch($cam)
  {

    // config van de camera's:
    case 'cam1':
      $camnr = 1;
      $port = 999;
      $user = '....';
      $password = '*****';
      $server = 'some.url.nl';
      $pathserver = 'videostream.cgi?resolution=64';
      $saveto_ext = 'mjpg';
      break;
  }



  $path = '/data/secucam/';
  $file = 'cam%d-%s.'. $saveto_ext;

  $command_mask = "/usr/bin/wget -b -o /dev/null --user=%s --password=%s  -O %s  'http://%s:%d/%s'";

  while($dateNow < $dateEnd)
  {

    set_time_limit(100);
    $saveto = $path . sprintf($file, $camnr, date('Y-m-d-Hi'));

    $command = ('/usr/bin/nohup ' . sprintf($command_mask, $user, $password, $saveto, $server, $port, $pathserver) . ' & echo $!');
     echo $command .'<br>';

    $response = shell_exec($command);
    $response = str_replace(PHP_EOL, ' ', $response);

//     echo '#' . $response . '#';
    $pid = preg_replace('#^.*pid (\d+)\..*#', '$1', $response);

//     echo '@'.$pid .'@';

    sleep(15 * 60);
    $killcommand = '/bin/kill ' . (int) $pid;
    echo $killcommand . PHP_EOL;
    shell_exec($killcommand);

    $dateNow = new DateTime();
  }

?>


Er zitten nog wat overbodige zaken in:
$dateStart lijkt overbodig,
set_time_limit() is alleen zinnig in combinatie met apache, niet als je een script via php aanroept
en de echo heeft ook geen zin.

Maar mogelijk krijg je hier een idee van de werking van.

het commando videostream.cgi blijkt bij veel camera's te werken. Kennelijk hebben veel merken toch min of meer dezelfde firmware, danwel bestaat er toch een soort standaard in.
Varianten:
'videostream.cgi?rate=0&user=admin&pwd='
'cgi/mjpg/mjpeg.cgi'
'videostream.cgi'


Als je via firebug meekijkt wat je webinterface naar de camera stuurt, kun je zien welke commando's allemaal gestuurd kunnen worden.

Een ander script zorgt voor de draai van de camera elke x tijd. Daar moest ik wel uitzoeken wat precies de commando regel voor de camera was.


Als de webserver zich buiten je netwerk bevindt (datacenter) dan is het nodig dat je camera's van buiten bereikbaar zijn.
Je moet de betreffende poort dus via NAT forwarden naar de juiste poort intern en het juiste ip-adres intern
 
Willem vp

Willem vp

24/06/2015 17:12:54
Quote Anchor link
Ivo P op 15/06/2015 10:11:19:
Er draait een continue cronjob. Deze start om 0:00 en eindigt zodra de datum verandert. (dus na 24 uur).
[...]
In principe zou de cronjob ook eenmalig kunnen starten en niet meer afbreken.
Maar mocht om een of andere reden het proces crashen of de server restarten oid. dan zouden mijn opnamen permanent stoppen.

Voor dit soort scripts kun je beter inittab gebruiken (of systemd in recente CentOS/Fedora-versies). Dat heeft als voordeel dat zodra een proces om wat voor reden dan ook stopt, het meteen weer wordt gestart.

Alternatief (maar minder elegant) is om via cron je script elk kwartier of zo te starten en in je code te checken of er al een proces loopt.

Overigens: via crontab kun je ook jobs starten bij een reboot door de 5 datum/tijdvelden die aan het begin van de regel staan te vervangen door de alias @reboot.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.