Parcourir la source

硬盘录像机首帧图片

任敬轩 il y a 3 ans
Parent
commit
41b9289a7c
1 fichiers modifiés avec 35 ajouts et 1 suppressions
  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)
     {