瀏覽代碼

硬盘录像机首帧图片

任敬轩 3 年之前
父節點
當前提交
41b9289a7c
共有 1 個文件被更改,包括 35 次插入1 次删除
  1. 35 1
      Modules/Camera/Services/CameraServices.php

+ 35 - 1
Modules/Camera/Services/CameraServices.php

@@ -491,12 +491,46 @@ class CameraServices
         $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture');
 
         if (!$cover_picture) {
-            register_shutdown_function(array(new HaiKangController(), "getFirstPicture"),$path,$query->camera_url);
+            register_shutdown_function(array(new CameraServices(), "getFirstPicture"),$camera_id,$path);
         }
 
         return $result;
     }
 
+    //硬盘录像机获取首帧图片
+    public static function getFirstPicture($camera_id,$path){
+        $i = 1;
+        while ($i <= 10) {
+            //判断m3u8文件是否存在
+            $file_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . CameraEnum::M3U8_FILE_NAME);
+            //判断ts文件是否存在
+            $ts_exists = glob(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . CameraEnum::TS_FILE_SUFFIX);
+            //查询是否存在封面图
+//            $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture');
+
+            if ($file_exists && $ts_exists) {
+                //获取第一帧作为封面图
+                $file_name = time() . CameraEnum::COVER_PICTURE_NAME;
+                $cover_exec = 'ffmpeg -i ' . public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . CameraEnum::M3U8_FILE_NAME . ' -vf "select=between(mod(n\, 25)\, 0\, 0), setpts=N/24/TB" ' . public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . $file_name;
+                exec($cover_exec);
+
+                //判断图片是否存在
+                $picture_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . $file_name);
+
+                if ($picture_exists) {
+                    //上传图片到oss并更新数据库
+                    $picture_path = self::uploadOssFile($file_name, public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/');
+                    CameraList::where('id', $camera_id)->update(['cover_picture' => $picture_path]);
+                }
+
+            } else {
+                sleep(1);
+            }
+
+            $i++;
+        }
+    }
+
     //硬盘录像机获取rtsp
     public static function getRtspYingPan($camera_id)
     {