فهرست منبع

修改接口自动切换码流功能

qiuzijian 3 سال پیش
والد
کامیت
9ac1954c34
4فایلهای تغییر یافته به همراه225 افزوده شده و 113 حذف شده
  1. 71 45
      .idea/workspace.xml
  2. 137 52
      Modules/Camera/Services/CameraServices.php
  3. 11 2
      app/Console/Commands/UpdateCameraStatus.php
  4. 6 14
      app/Http/Controllers/TestsController.php

+ 71 - 45
.idea/workspace.xml

@@ -3,6 +3,8 @@
   <component name="ChangeListManager">
     <list default="true" id="b5beace6-e4f4-419b-8299-c67e17af5998" name="Default Changelist" comment="">
       <change beforePath="$PROJECT_DIR$/Modules/Camera/Services/CameraServices.php" beforeDir="false" afterPath="$PROJECT_DIR$/Modules/Camera/Services/CameraServices.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/Console/Commands/UpdateCameraStatus.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Console/Commands/UpdateCameraStatus.php" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/app/Http/Controllers/TestsController.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/Http/Controllers/TestsController.php" afterDir="false" />
     </list>
     <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
     <option name="SHOW_DIALOG" value="false" />
@@ -28,10 +30,13 @@
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/Modules/Camera/Enum/CameraEnum.php">
+        <entry file="file://$PROJECT_DIR$/app/Http/Controllers/TestsController.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="379">
-              <caret line="33" column="28" selection-start-line="33" selection-start-column="10" selection-end-line="33" selection-end-column="28" />
+            <state relative-caret-position="525">
+              <caret line="30" column="26" lean-forward="true" selection-start-line="29" selection-start-column="8" selection-end-line="30" selection-end-column="26" />
+              <folding>
+                <element signature="e#126#164#0#PHP" expanded="true" />
+              </folding>
             </state>
           </provider>
         </entry>
@@ -39,8 +44,8 @@
       <file pinned="false" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/Modules/Camera/Services/CameraServices.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="646">
-              <caret line="830" column="74" selection-start-line="830" selection-start-column="74" selection-end-line="830" selection-end-column="74" />
+            <state relative-caret-position="-844">
+              <caret line="802" column="24" lean-forward="true" selection-start-line="802" selection-start-column="24" selection-end-line="802" selection-end-column="24" />
               <folding>
                 <element signature="e#129#150#0#PHP" expanded="true" />
               </folding>
@@ -49,9 +54,21 @@
         </entry>
       </file>
       <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="222">
+              <caret line="189" column="20" selection-start-line="189" selection-start-column="20" selection-end-line="189" selection-end-column="20" />
+              <folding>
+                <element signature="e#141#185#0#PHP" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/CameraApiController.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="69">
+            <state relative-caret-position="487">
               <caret line="82" column="50" selection-start-line="82" selection-start-column="50" selection-end-line="82" selection-end-column="50" />
               <folding>
                 <element signature="e#141#162#0#PHP" expanded="true" />
@@ -63,8 +80,8 @@
       <file pinned="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/app/Console/Commands/UpdateCameraStatus.php">
           <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="312">
-              <caret line="24" column="39" selection-start-line="24" selection-start-column="30" selection-end-line="24" selection-end-column="39" />
+            <state relative-caret-position="319">
+              <caret line="84" column="23" lean-forward="true" selection-start-line="84" selection-start-column="23" selection-end-line="84" selection-end-column="23" />
               <folding>
                 <element signature="e#40#71#0#PHP" expanded="true" />
               </folding>
@@ -76,7 +93,7 @@
         <entry file="file://$PROJECT_DIR$/app/Console/Commands/StopStreamDelFiles.php">
           <provider selected="true" editor-type-id="text-editor">
             <state relative-caret-position="571">
-              <caret line="40" column="32" selection-start-line="40" selection-start-column="32" selection-end-line="40" selection-end-column="32" />
+              <caret line="40" column="32" lean-forward="true" selection-start-line="40" selection-start-column="32" selection-end-line="40" selection-end-column="32" />
               <folding>
                 <element signature="e#40#71#0#PHP" expanded="true" />
               </folding>
@@ -84,6 +101,15 @@
           </provider>
         </entry>
       </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/Modules/Camera/Enum/CameraEnum.php">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="274">
+              <caret line="104" column="26" selection-start-line="104" selection-start-column="10" selection-end-line="104" selection-end-column="26" />
+            </state>
+          </provider>
+        </entry>
+      </file>
     </leaf>
   </component>
   <component name="FindInProjectRecents">
@@ -171,11 +197,11 @@
         <option value="$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php" />
         <option value="$PROJECT_DIR$/app/Console/Commands/UpdateHkList.php" />
         <option value="$PROJECT_DIR$/Modules/Camera/Database/Migrations/2022_01_21_151316_add_field_to_camera_list_2021_01_21.php" />
-        <option value="$PROJECT_DIR$/app/Console/Commands/UpdateCameraStatus.php" />
         <option value="$PROJECT_DIR$/Modules/Camera/Routes/web.php" />
         <option value="$PROJECT_DIR$/Modules/Camera/Enum/CameraEnum.php" />
-        <option value="$PROJECT_DIR$/app/Http/Controllers/TestsController.php" />
         <option value="$PROJECT_DIR$/Modules/Camera/Http/Controllers/CameraController.php" />
+        <option value="$PROJECT_DIR$/app/Http/Controllers/TestsController.php" />
+        <option value="$PROJECT_DIR$/app/Console/Commands/UpdateCameraStatus.php" />
         <option value="$PROJECT_DIR$/Modules/Camera/Services/CameraServices.php" />
       </list>
     </option>
@@ -413,12 +439,12 @@
       <workItem from="1641785500605" duration="61000" />
       <workItem from="1641786030534" duration="477000" />
       <workItem from="1641800375826" duration="26685000" />
-      <workItem from="1643085370753" duration="13691000" />
+      <workItem from="1643085370753" duration="18328000" />
     </task>
     <servers />
   </component>
   <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="443742000" />
+    <option name="totallyTimeSpent" value="448379000" />
   </component>
   <component name="ToolWindowManager">
     <frame x="0" y="0" width="1440" height="900" extended-state="0" />
@@ -689,16 +715,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="252">
-          <caret line="165" column="20" selection-start-line="165" selection-start-column="20" selection-end-line="165" selection-end-column="20" />
-          <folding>
-            <element signature="e#141#185#0#PHP" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/app/Helpers.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="1911">
@@ -734,13 +750,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Modules/Camera/Enum/CameraEnum.php">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="379">
-          <caret line="33" column="28" selection-start-line="33" selection-start-column="10" selection-end-line="33" selection-end-column="28" />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/app/Console/Commands/UpdateHkList.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="565">
@@ -751,10 +760,20 @@
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/CameraController.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="347">
+          <caret line="461" column="44" lean-forward="true" selection-start-line="461" selection-start-column="44" selection-end-line="461" selection-end-column="44" />
+          <folding>
+            <element signature="e#51#107#0#PHP" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/app/Console/Commands/StopStreamDelFiles.php">
       <provider selected="true" editor-type-id="text-editor">
         <state relative-caret-position="571">
-          <caret line="40" column="32" selection-start-line="40" selection-start-column="32" selection-end-line="40" selection-end-column="32" />
+          <caret line="40" column="32" lean-forward="true" selection-start-line="40" selection-start-column="32" selection-end-line="40" selection-end-column="32" />
           <folding>
             <element signature="e#40#71#0#PHP" expanded="true" />
           </folding>
@@ -763,8 +782,8 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/app/Http/Controllers/TestsController.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="462">
-          <caret line="27" column="8" selection-start-line="27" selection-start-column="8" selection-end-line="28" selection-end-column="20" />
+        <state relative-caret-position="525">
+          <caret line="30" column="26" lean-forward="true" selection-start-line="29" selection-start-column="8" selection-end-line="30" selection-end-column="26" />
           <folding>
             <element signature="e#126#164#0#PHP" expanded="true" />
           </folding>
@@ -773,38 +792,45 @@
     </entry>
     <entry file="file://$PROJECT_DIR$/app/Console/Commands/UpdateCameraStatus.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="312">
-          <caret line="24" column="39" selection-start-line="24" selection-start-column="30" selection-end-line="24" selection-end-column="39" />
+        <state relative-caret-position="319">
+          <caret line="84" column="23" lean-forward="true" selection-start-line="84" selection-start-column="23" selection-end-line="84" selection-end-column="23" />
           <folding>
             <element signature="e#40#71#0#PHP" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/CameraController.php">
+    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/CameraApiController.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="347">
-          <caret line="461" column="44" lean-forward="true" selection-start-line="461" selection-start-column="44" selection-end-line="461" selection-end-column="44" />
+        <state relative-caret-position="487">
+          <caret line="82" column="50" selection-start-line="82" selection-start-column="50" selection-end-line="82" selection-end-column="50" />
           <folding>
-            <element signature="e#51#107#0#PHP" expanded="true" />
+            <element signature="e#141#162#0#PHP" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/CameraApiController.php">
+    <entry file="file://$PROJECT_DIR$/Modules/Camera/Http/Controllers/Api/HaiKangController.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="69">
-          <caret line="82" column="50" selection-start-line="82" selection-start-column="50" selection-end-line="82" selection-end-column="50" />
+        <state relative-caret-position="222">
+          <caret line="189" column="20" selection-start-line="189" selection-start-column="20" selection-end-line="189" selection-end-column="20" />
           <folding>
-            <element signature="e#141#162#0#PHP" expanded="true" />
+            <element signature="e#141#185#0#PHP" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
+    <entry file="file://$PROJECT_DIR$/Modules/Camera/Enum/CameraEnum.php">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="274">
+          <caret line="104" column="26" selection-start-line="104" selection-start-column="10" selection-end-line="104" selection-end-column="26" />
+        </state>
+      </provider>
+    </entry>
     <entry file="file://$PROJECT_DIR$/Modules/Camera/Services/CameraServices.php">
       <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="646">
-          <caret line="830" column="74" selection-start-line="830" selection-start-column="74" selection-end-line="830" selection-end-column="74" />
+        <state relative-caret-position="-844">
+          <caret line="802" column="24" lean-forward="true" selection-start-line="802" selection-start-column="24" selection-end-line="802" selection-end-column="24" />
           <folding>
             <element signature="e#129#150#0#PHP" expanded="true" />
           </folding>

+ 137 - 52
Modules/Camera/Services/CameraServices.php

@@ -797,73 +797,158 @@ class CameraServices
         $result_hk = $haikang->getCamerasUrl();
 
         if ($result_hk['data']['url']) {
-            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);
-            }
-            //取流进程
-            $exec = 'nohup /usr/bin/ffmpeg -i ' . $result_hk['data']['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);
+            //先取当前码流
+            $res = self::getVideoStream($result_hk, $path, $camera_id);
 
-                //查询是否存在封面图
-                $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture');
-
-                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 . '/' . 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 . '/' . $file_name);
-
-                        if ($picture_exists) {
-                            //上传图片到oss并更新数据库
-                            $picture_path = self::uploadOssFile($file_name, public_path() . '/' . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/');
-                            CameraList::where('id', $camera_id)->update(['cover_picture' => $picture_path]);
-                        }
-                    }
+            if (!$res) {
+                $code_stream = self::exchangCodeStream($camera->code_stream);
+                Input::replace(
+                    [
+                        'url'             => trim($query->ip, '/') . ':' . $query->port,
+                        'key'             => $query->key,
+                        'secret'          => $query->secret,
+                        'cameraIndexCode' => $camera->index_code,
+                        'streamType'      => CameraEnum::CODE_STREAM_HAK[$code_stream],
+                        'protocol'        => 'rtmp',
+                    ]
+                );
+                $haikang   = new HaiKangController();
+                $result_hk_2 = $haikang->getCamerasUrl();
 
-                    $result['data'] = [
-                        'camera_id' => $camera_id,
-                        'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
-                    ];
+                if (!$result_hk_2['data']['url']) {
+                    $result['status'] = false;
+                    $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
+                    return $result;
+                }
 
-                    CameraList::where('id', $camera_id)->update(['revert_id' => CameraEnum::CAMERA_FILE_EXIST]);
+                $res = self::getVideoStream($result_hk_2, $path, $camera_id);
 
+                if (!$res) {
+                    $result['status'] = false;
+                    $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
                     return $result;
                 } else {
-                    sleep(1);
+                    //更新视频码流
+                    CameraList::where('id', $camera_id)->update(['code_stram' => $code_stream]);
+                    $result['data'] = $res['data'];
                 }
+            } else {
+                $result['data'] = $res['data'];
+            }
+        } else {  //直接获取rtmp失败时切换码流重新获取
+            $code_stream = self::exchangCodeStream($camera->code_stream);
+            Input::replace(
+                [
+                    'url'             => trim($query->ip, '/') . ':' . $query->port,
+                    'key'             => $query->key,
+                    'secret'          => $query->secret,
+                    'cameraIndexCode' => $camera->index_code,
+                    'streamType'      => CameraEnum::CODE_STREAM_HAK[$code_stream],
+                    'protocol'        => 'rtmp',
+                ]
+            );
+            $haikang   = new HaiKangController();
+            $result_hk_2 = $haikang->getCamerasUrl();
 
-                $i++;
+            if (!$result_hk_2['data']['url']) {
+                $result['status'] = false;
+                $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
+                return $result;
             }
 
-            $result['status'] = false;
-            $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
-            return $result;
-        } else {
-            $result['status'] = false;
-            $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
-        }
+            $res = self::getVideoStream($result_hk_2, $path, $camera_id);
 
-        $result['data'] = [
-            'camera_id' => $camera_id,
-            'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
-        ];
+            if (!$res) {
+                $result['status'] = false;
+                $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
+                return $result;
+            } else {
+                //更新视频码流
+                CameraList::where('id', $camera_id)->update(['code_stram' => $code_stream]);
+                $result['data'] = $res['data'];
+            }
+        }
 
         return $result;
     }
 
+    //获取视频流
+    public static function getVideoStream($result_hk, $path, $camera_id)
+    {
+        $result = [];
+
+        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);
+        }
+        //取流进程
+        $exec = 'nohup /usr/bin/ffmpeg -i ' . $result_hk['data']['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);
+
+            //查询是否存在封面图
+            $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture');
+
+            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 . '/' . 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 . '/' . $file_name);
+
+                    if ($picture_exists) {
+                        //上传图片到oss并更新数据库
+                        $picture_path = self::uploadOssFile($file_name, public_path() . '/' . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/');
+                        CameraList::where('id', $camera_id)->update(['cover_picture' => $picture_path]);
+                    }
+                }
+
+                $result['data'] = [
+                    'camera_id' => $camera_id,
+                    'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
+                ];
+
+                CameraList::where('id', $camera_id)->update(['revert_id' => CameraEnum::CAMERA_FILE_EXIST]);
+
+                return $result;
+            } else {
+                sleep(1);
+            }
+
+            $i++;
+        }
+
+        return false;
+    }
+
+    //切换视频码流
+    public static function exchangCodeStream($code_stream)
+    {
+        $return_code = CameraEnum::CODE_STREAM_MAIN;
+
+        //子码流切主码流
+        if ($code_stream == CameraEnum::CODE_STREAM_SUB) {
+            $return_code = CameraEnum::CODE_STREAM_MAIN;
+        }
+
+        //主码流切子码流
+        if ($code_stream == CameraEnum::CODE_STREAM_MAIN) {
+            $return_code = CameraEnum::CODE_STREAM_SUB;
+        }
+
+        return $return_code;
+    }
+
     //获取内网服务器摄像头播放地址
     public static function getIntranetCameraUrl($camera_id)
     {

+ 11 - 2
app/Console/Commands/UpdateCameraStatus.php

@@ -80,10 +80,19 @@ class UpdateCameraStatus extends Command
             }
             $i++;
 
-            //每循环20个停止一次推流
-            if ($i == 50) {
+            //每循环30个停止一次推流
+            if ($i == 30) {
                 $i = 0;
+                //停止推流
                 CameraServices::stopCameraStream();
+                //创建目录
+//                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);
+//                }
+                //杀掉取流进程
+                $exec = "kill -9 `ps -ef | grep ffmpeg|awk '{print $2}'`";
+                shell_exec($exec);
+
             }
         }
     }

+ 6 - 14
app/Http/Controllers/TestsController.php

@@ -25,20 +25,12 @@ class TestsController {
 
     public function test()
     {
-        $result = exec('ffmpeg -i /www/wwwroot/video.nxjiewei.com/public/files/video/m3u8/羊场湾煤矿/一号井工业电视系统/主运输胶带机/主井机尾/20220125/out.m3u8 -vf "select=between(mod(n\, 25)\, 0\, 0), setpts=N/24/TB" /www/wwwroot/video.nxjiewei.com/public/files/video/output.png &');
+//        $result = exec('ffmpeg -i /www/wwwroot/video.nxjiewei.com/public/files/video/m3u8/羊场湾煤矿/一号井工业电视系统/主运输胶带机/主井机尾/20220125/out.m3u8 -vf "select=between(mod(n\, 25)\, 0\, 0), setpts=N/24/TB" /www/wwwroot/video.nxjiewei.com/public/files/video/output.png &');
+//        dd($result);
+        $exec = "kill -9 `ps -ef | grep ffmpeg|awk '{print $2}'`";
+        shell_exec($exec);
+        $exec = 'sudo kill -p `ps -ef | grep ffmpeg|awk ' . '{print $2}`';
+        $result = shell_exec($exec);
         dd($result);
-        $file = '/www/wwwroot/video.nxjiewei.com/public/files/video/m3u8/羊场湾煤矿/一号井工业电视系统/主运输胶带机/主井机尾/20220125/out.m3u8';
-//        $file = './out.m3u8';
-        $image_path = '/www/wwwroot/video.nxjiewei.com/public/files/video/';
-        $str = 'ffmpeg -i ' . $file . ' -vf "select=between(mod(n\, 25)\, 0\, 0), setpts=N/24/TB" ' . $image_path . 'output-%04d.png';
-        $result = exec($str, $output, $return_var);
-        var_dump($result);
-        echo '<br/>';
-        var_dump($output);
-        echo '<br/>';
-        var_dump($return_var);
-
-        'ffmpeg -i /www/wwwroot/video.nxjiewei.com/public/files/video/m3u8/羊场湾煤矿/一号井工业电视系统/主运输胶带机/主井机尾/20220125/out.m3u8 -vf "select=(gte(t\,120))*(isnan(prev_selected_t)+gte(t-prev_selected_t\,120))" -vsync 0 /www/wwwroot/video.nxjiewei.com/public/files/video/image_%05d.jpg';
-//        'ffmpeg -i /www/wwwroot/video.nxjiewei.com/public/files/video/m3u8/羊场湾煤矿/一号井工业电视系统/主运输胶带机/主井机尾/20220125/out.m3u8 -vf "select=between(mod(n\, 25)\, 0\, 0), setpts=N/24/TB" output-%04d.png';
     }
 }