Pārlūkot izejas kodu

硬盘录像机首帧图片修改

任敬轩 3 gadi atpakaļ
vecāks
revīzija
006fefb2cc

+ 1 - 1
Modules/Camera/Http/Controllers/Api/HaiKangController.php

@@ -449,7 +449,7 @@ class HaiKangController extends BaseController
 
             //sleep10秒生成文件
             $i = 1;
-            while ($i <= 5) {
+            while ($i <= 10) {
                 //判断m3u8文件是否存在
                 $file_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . CameraEnum::M3U8_FILE_NAME);
 

+ 44 - 33
Modules/Camera/Services/CameraServices.php

@@ -390,17 +390,17 @@ class CameraServices
         foreach ($mine_list as $key => $val) {
             $path .= '/' . $val['title'];
         }
-        $path .= '/' . $query->camera_name . $camera_id;
+        $path .= '/' . $query->camera_name;
 
         //标记摄像头为在线状态
         CameraList::where('id', $camera_id)->update(['camera_status' => CameraEnum::CAMERA_STATUS_ONLINE]);
 
         //已有拉流id,直接返回拉流链接
-        $has_file = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . CameraEnum::M3U8_FILE_NAME);
+        $has_file = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path  . '/' . CameraEnum::M3U8_FILE_NAME);
         if ($has_file) {
             $result['data'] = [
                 'camera_id' => $camera_id,
-                'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
+                'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . $path . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
             ];
 
             return  $result;
@@ -433,52 +433,63 @@ class CameraServices
 
         $result['data'] = [
             'camera_id' => $camera_id,
-            'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
+            'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . $path .  '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
         ];
 
-        //sleep10秒生成文件
-        $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');
+        //查询是否存在封面图
+        $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture');
+
+        if (!$cover_picture) {
+            if (!is_dir('/www/wwwroot/video.nxjiewei.com/public/' . CameraEnum::M3U8_FILE_PATH . '/' . $path)) {
+                mkdir('/www/wwwroot/video.nxjiewei.com/public/' . CameraEnum::M3U8_FILE_PATH . '/' . $path, 0777, true);
+            }
+            // dd($result_td['content'][0]['url']);
+            $exec = 'nohup /usr/bin/ffmpeg -i "' . $query->camera_url . '" -vcodec copy -acodec copy -vbsf h264_mp4toannexb -f hls -hls_flags delete_segments -segment_list_size 10 -hls_list_size 2 /www/wwwroot/video.nxjiewei.com/public/' . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/' . CameraEnum::M3U8_FILE_NAME . ' >/dev/null &';
+
+            shell_exec($exec);
+
+            //sleep10秒生成文件
+            $i = 1;
+            while ($i <= 10) {
+                //判断m3u8文件是否存在
+                $file_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . CameraEnum::M3U8_FILE_NAME);
+
+                //判断ts文件是否存在
+                $ts_exists = glob(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path  . '/' . CameraEnum::TS_FILE_SUFFIX);
+
+                if ($file_exists && $ts_exists) {
 
-            if ($file_exists && $ts_exists) {
-                //查询是否存在封面图
-                if (!$cover_picture) {
                     //获取第一帧作为封面图
                     $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;
+
+                    $cover_exec = 'ffmpeg -i ' . public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path  . '/' . CameraEnum::M3U8_FILE_NAME . ' -vf "select=between(mod(n\, 25)\, 0\, 0), setpts=N/24/TB" ' . public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path  . '/' . $file_name;
                     exec($cover_exec);
 
                     //判断图片是否存在
-                    $picture_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/' . $file_name);
+                    $picture_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path  . '/' . $file_name);
 
                     if ($picture_exists) {
+                        $cms = new CameraServices();
+
                         //上传图片到oss并更新数据库
-                        $picture_path = self::uploadOssFile($file_name, public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . date('Ymd', time()) . '/');
+                        $picture_path = $cms->uploadOssFile($file_name, public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path  . '/');
+
                         CameraList::where('id', $camera_id)->update(['cover_picture' => $picture_path]);
                     }
+
+                    return $result;
+                } else {
+                    sleep(1);
                 }
 
-                //更新拉流id
-                CameraList::where('id', $camera_id)->update(
-                    [
-                        'revert_id'  => trim($curl_res, '"'),
-                        'updated_at' => date('Y-m-d H:i:s'),
-                    ]
-                );
-                return $result;
-            } else {
-                sleep(1);
+                $i++;
             }
-
-            $i++;
+        }else{
+            return $result;
         }
 
+        
+
         //标记摄像头为异常状态
         CameraList::where('id', $camera_id)->update(['camera_status' => CameraEnum::CAMERA_STATUS_ERROR]);
 
@@ -577,7 +588,7 @@ class CameraServices
 
             //sleep10秒生成文件
             $i = 1;
-            while ($i <= 5) {
+            while ($i <= 10) {
                 //判断m3u8文件是否存在
                 $file_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . CameraEnum::M3U8_FILE_NAME);
 
@@ -737,7 +748,7 @@ class CameraServices
 
             //sleep10秒生成文件
             $i = 1;
-            while ($i <= 5) {
+            while ($i <= 10) {
                 //判断m3u8文件是否存在
                 $file_exists = file_exists(public_path() . '/' . CameraEnum::M3U8_FILE_PATH . $path . '/' . CameraEnum::M3U8_FILE_NAME);