84 lines
2.0 KiB
PHP
84 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace app\controllers;
|
|
|
|
use Yii;
|
|
use yii\web\Controller;
|
|
|
|
class CameraController extends Controller
|
|
{
|
|
public function actionStream($id, $scale = 50)
|
|
{
|
|
$cms = Yii::$app->params['cameras'];
|
|
if (!isset($cms[$id]))
|
|
{
|
|
throw new NotFoundHttpException();
|
|
}
|
|
if (!is_numeric($scale)) $scale = 50;
|
|
$zm_id = $cms[$id];
|
|
$source_url = Yii::$app->params['zmUrl'].'/cgi-bin/nph-zms?scale='.$scale.'&mode=jpeg&maxfps=30&buffer=1000&monitor='.$zm_id.'&connkey='.rand(0, 65536);
|
|
$fp = fopen($source_url, 'r', false);
|
|
if ($fp)
|
|
{
|
|
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
|
|
// send mjpeg header:
|
|
header("Cache-Control: no-cache");
|
|
header("Cache-Control: private");
|
|
header("Pragma: no-cache");
|
|
header("Content-type: multipart/x-mixed-replace; boundary=ZoneMinderFrame");
|
|
|
|
// pass data
|
|
fpassthru($fp);
|
|
fclose($fp);
|
|
}
|
|
else throw new NotFoundHttpException();
|
|
}
|
|
|
|
public function actionView($id)
|
|
{
|
|
$cms = Yii::$app->params['cameras'];
|
|
if (!isset($cms[$id]))
|
|
{
|
|
throw new NotFoundHttpException();
|
|
}
|
|
$archive = $this->getArchive($cms[$id]);
|
|
return $this->render('view',
|
|
[
|
|
'id' => $id,
|
|
'archive' => array_reverse($archive),
|
|
]);
|
|
}
|
|
|
|
private function getArchive($zm_id) : array
|
|
{
|
|
$client = new \app\components\ApiClient(Yii::$app->params['zmUrl'].'zm/api');
|
|
$json = $client->getEvents($zm_id, date("Y-m-d H:i:s", time() - 7 * 24 * 3600));
|
|
$r = json_decode($json, true);
|
|
$result = [];
|
|
foreach ($r['events'] as $e)
|
|
{
|
|
$result[] = new \app\models\zm\Event($e['Event']);
|
|
}
|
|
$pages_count = $r['pagination']['pageCount'];
|
|
for ($i = 2; $i <= $pages_count; $i++)
|
|
{
|
|
$json = $client->getEvents($zm_id, date("Y-m-d H:i:s", time() - 7 * 24 * 3600), $i);
|
|
$r = json_decode($json, true);
|
|
foreach ($r['events'] as $e)
|
|
{
|
|
$result[] = new \app\models\zm\Event($e['Event']);
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
public function actionViewArchive($event_id)
|
|
{
|
|
return $this->render('view_archive',
|
|
[
|
|
'id' => $event_id,
|
|
]);
|
|
}
|
|
}
|
|
|