"Unknown ONVIF Camera", 'monitor' => array( 'Function' => "Monitor", 'Type' => 'Ffmpeg', 'Host' => $device_ep, ), ); foreach ( preg_split('|,\s*|', $matches[2]) as $attr_val ) { if( preg_match( '|(.+)=\'(.*)\'|', $attr_val, $tokens ) ) { if($tokens[1] == "hardware") { $camera['model'] = $tokens[2]; } elseif($tokens[1] == "name") { $camera['monitor']['Name'] = $tokens[2]; } elseif($tokens[1] == "location") { // $camera['location'] = $tokens[2]; } } } $cameras[$count ++] = $camera; } } } return( $cameras ); } function probeProfiles( $device_ep, $username, $password ) { $profiles = array(); $count = 0; if ( $lines = @execONVIF( "profiles $device_ep $username $password" ) ) { foreach ( $lines as $line ) { $line = rtrim( $line ); if ( preg_match( '|^(.+),\s*(.+),\s*(.+),\s*(.+),\s*(.+),\s*(.+),\s*(.+)\s*$|', $line, $matches ) ) { $stream_uri = $matches[7]; // add user@pass to URI if( preg_match( '|^(\S+://)(.+)$|', $stream_uri, $tokens ) ) { $stream_uri = $tokens[1].$username.':'.$password.'@'.$tokens[2]; } $profile = array( # 'monitor' part of camera 'Type' => 'Ffmpeg', 'Width' => $matches[4], 'Height' => $matches[5], 'MaxFPS' => $matches[6], 'Path' => $stream_uri, // local-only: 'Profile' => $matches[1], 'Name' => $matches[2], 'Encoding' => $matches[3], ); $profiles[$count ++] = $profile; } } } return( $profiles ); } //==== STEP 1 ============================================================ $focusWindow = true; xhtmlHeaders(__FILE__, $SLANG['MonitorProbe'] ); if( !isset($_REQUEST['step']) || ($_REQUEST['step'] == "1")) { $monitors = array(); foreach ( dbFetchAll( "select Id, Name, Host from Monitors where Type = 'Remote' order by Host" ) as $monitor ) { if ( preg_match( '/^(.+)@(.+)$/', $monitor['Host'], $matches ) ) { //echo "1: ".$matches[2]." = ".gethostbyname($matches[2])."
"; $monitors[gethostbyname($matches[2])] = $monitor; } else { //echo "2: ".$monitor['Host']." = ".gethostbyname($monitor['Host'])."
"; $monitors[gethostbyname($monitor['Host'])] = $monitor; } } $detcameras = probeCameras( '' ); foreach ( $detcameras as $camera ) { if ( preg_match( '|([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)|', $camera['monitor']['Host'], $matches ) ) { $ip = $matches[1]; } $host = $ip; /* if ( isset($monitors[$ip]) ) { $monitor = $monitors[$ip]; $sourceString .= " (".$monitor['Name'].")"; } else { $sourceString .= " - ".$SLANG['Available']; } $cameras[$sourceDesc] = $sourceString; } */ // $sourceDesc = htmlspecialchars(serialize($camera['monitor'])); $sourceDesc = base64_encode(serialize($camera['monitor'])); $sourceString = $camera['model'].' @ '.$host; $cameras[$sourceDesc] = $sourceString; } if ( count($cameras) <= 0 ) $cameras[0] = $SLANG['NoDetectedCameras']; ?>

$value ) { if ( isset($value) ) { $monitor[$name] = $value; } } $camera['monitor'] = $monitor; //print $monitor['Host'].", ".$_REQUEST['username'].", ".$_REQUEST['password']."
"; $detprofiles = probeProfiles( $monitor['Host'], $_REQUEST['username'], $_REQUEST['password']); foreach ( $detprofiles as $profile ) { $monitor = $camera['monitor']; $sourceString = "${profile['Name']} : ${profile['Encoding']}" . " (${profile['Width']}x${profile['Height']} @ ${profile['MaxFPS']}fps)"; // copy technical details $monitor['Width'] = $profile['Width']; $monitor['Height'] = $profile['Height']; $monitor['MaxFPS'] = $profile['MaxFPS']; $monitor['AlarmMaxFPS'] = $profile['AlarmMaxFPS']; $monitor['Path'] = $profile['Path']; // $sourceDesc = htmlspecialchars(serialize($monitor)); $sourceDesc = base64_encode(serialize($monitor)); $cameras[$sourceDesc] = $sourceString; } if ( count($cameras) <= 0 ) $cameras[0] = $SLANG['NoDetectedCameras']; ?>