Продолжаем серию скриптов "на свой лад", вдруг пригодится!
Те, кто пилит свои страницы "сцены" - хотят все сделать по красоте, вот и я хотел. В блоге Как подружить Camshoter и обычную вебку я уже рассказывал как сделать из вебки - камеру наблюдения, у меня оставалось только реализация для показа архива.
Создаем сценарий например или функцию. Передать можно: date в формате DD.MM.YYYY, camid - ID камеры из модуля, showCol - сколько результатов будет отдано
$date = explode(".", strip_tags($_GET['date']));
($date) ? $date = date('Y-m-d', time()) : $date = $date[2].'-'.$date[1].'-'.$date[0];
($camID) ? $camID = '1' : $camID = strip_tags($_GET['camid']);
($showCol == 0) ? $showCol = 10 : $showCol = (int) $_GET['showCol'];
$path = '/var/www/html/cms/cached/nvr/cam'.$camID.'/'.$date.'/';
$path_to_files = '/cms/cached/nvr/cam'.$camID.'/'.$date.'/';
$scanFiles = scandir($path, 1);
$arrayData = [];
$iteration = 0;
$countArray = count($scanFiles);
foreach($scanFiles as $key => $value) {
//Отсеим папки и файлы меньше 10кб
if(is_dir($path.$value) || filesize($path.$value) <= 10000) continue;
//Найдем mp4 видео и выкинем формат, чтобы JS было проще
if(explode('.', $value)[1] == 'mp4') array_push($arrayData, $path_to_files.explode('.', $value)[0]);
//+ итерация цикла
$iteration++;
//- счет, чтобы убрать папки "наверх"
$countArray--;
if($countArray <= 2) break;
if($iteration >= $showCol) break;
//Чистим кеш
clearstatcache();
}
echo json_encode($arrayData);
В ответе будет JSON объект вида:
["\/cms\/cached\/nvr\/cam1\/2020-01-28\/cam1_2020-01-28_230008","\/cms\/cached\/nvr\/cam1\/2020-01-28\/cam1_2020-01-28_225940","\/cms\/cached\/nvr\/cam1\/2020-01-28\/cam1_2020-01-28_224856","\/cms\/cached\/nvr\/cam1\/2020-01-28\/cam1_2020-01-28_224320","\/cms\/cached\/nvr\/cam1\/2020-01-28\/cam1_2020-01-28_224114","\/cms\/cached\/nvr\/cam1\/2020-01-28\/cam1_2020-01-28_223843","\/cms\/cached\/nvr\/cam1\/2020-01-28\/cam1_2020-01-28_223549"]
добавляем к любому значению .jpg или .mp4 и получаем данные.
Как кодировать видео, чтобы смотреть в html5 плеере, вот так:
ffmpeg -y -i rtsp://192.168.1.100:5554/live -t #sec -f mp4 -c:v libx264 -r 30 #savename
Вставлять в модуле в FFMEGCMD:(*)
Примерно вот так:
//Функция запроса картинок и видео с камер
function getCameraData() {
date = $("#dateCameraPick").val();
camID = $("#ShowCameraID").val();
showCol = $("#showColCameraVideo").val();
iteration = 0;
$('#camera_history_show').html('<div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12 text-center"><img src="assets/img/load_history.gif"><br>Загружаем данные...</div>')
$.getJSON({
url: '/objects/?script=camScanFiles&date=' + date + '&camid=' + camID + '&showCol=' + showCol,
success: function(responce) {
if(responce.length != 0) {
$('#camera_history_show').html('');
for (var value in responce) {
nameSplit = responce[value].split('/');
(iteration >= 1) ? html = $('#camera_history_show').html() : html = '';
$('#camera_history_show').html(html + '<div class="col-xl-2 col-lg-3 col-md-4 col-sm-6 col-6 text-center mb-3" onclick="$(\'#cameraVideoPlayer\').attr(\'src\', \'' + responce[value] + '.mp4\');$(\'#cameraVideoPlayer_Name\').html(\'' + nameSplit[6] + ' (<a href=' + responce[value] + '.mp4 download>Скачать</a>)\');$(\'#modal-playerCameraVideo\').modal(\'show\');"><img style="width: 100%;border-radius: 5px;" src="' + responce[value] + '.jpg"><span style="font-size: 0.8rem;">' + nameSplit[6] + '</span></div>');
iteration++;
}
} else {
$('#camera_history_show').html('<div class="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12 text-center"><div style="margin-top: 50px;"><i class="la la-folder-open" style="font-size: 4rem;"></i><br>Нет записей за этот день!</div></div>')
}
},
error: function(responce) {
showNoty('error', 'Не удалось получить данные с сервера умного дома... getCameraData()->error');
}
});
}
Скрипт не доделан, но работает. Может пригодится:
function camShotter($camID = 1, $sec = 10) {
if($camID == 1) $ipcam = 'rtsp://192.168.1.100:5554/live';
//Путь до папки для камеры
$path = '/var/www/html/tablet/cams/cam_'.$camID.'/';
//Флаг на совпадение имен папок
$todayFolder= 0;
//Текущая дата для записей
$curFolderName = date('dmY', time());
//Проверим есть ли папка с сегоднешней датой
if(!is_dir($path.$curFolderName)) {
mkdir($path.$curFolderName, 0755, true);
} else {
clearstatcache();
//Пройдемся еще раз уже по новой директории
$scan = scandir($path.$curFolderName, 1);
if(count($scan) == 2) {
mkdir($path.$curFolderName.'/100000', 0755, true);
} else {
$addDir = $scan[0]+1;
mkdir($path.$curFolderName.'/'.$addDir, 0755, true);
//Делаем фото
safe_exec('sudo timeout -s INT 60s ffmpeg -ss 00:00:02 -i '.$ipcam.' -f image2 -vframes 1 -y '.$path.$curFolderName.'/'.$addDir.'/photo.jpg');
//Пишем видео
safe_exec('sudo timeout -s INT 120s ffmpeg -y -i '.$ipcam.' -t 00:00:'.$sec.' -f mp4 -r 30 -c:v libx264 '.$path.$curFolderName.'/'.$addDir.'/video.mp4');
}
}
return 'ok!';
}
Нижний Новгород, Россия
На форуме: SmoKE_xDDD