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, ]); } }