Jelajahi Sumber

回放接口修改

任敬轩 3 tahun lalu
induk
melakukan
3da12ce54f

+ 15 - 3
Modules/Camera/Http/Controllers/Api/CameraApiController.php

@@ -15,6 +15,7 @@ use Illuminate\Support\Facades\Log;
 use Modules\Camera\Entities\CameraList;
 use Modules\Camera\Enum\CameraEnum;
 use Modules\Camera\Services\CameraServices;
+use Modules\Mine\Entities\MineList;
 use Modules\Mine\Entities\MineListExt;
 use DB;
 
@@ -263,10 +264,21 @@ class CameraApiController extends BaseController
         $end_time = explode('+',$end_time);
         $end_time = $end_time[0].$str.$end_time[1];
 
-        $haikang = new HaiKangController();
-        $result = CameraServices::getPlaybackUrl($camera_id,$start_time,$end_time);
+        $degree = MineList::where('id', $query->mine_id)->value('degree');
+        $degree = explode('|', $degree)[0];
+        $mine_res = DB::table('mine_list')->where('id',$degree)->get();
+
+        //判断是否在配置文件里,在的不用走ffmpeg
+        if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('playback'))){
+            $result = CameraServices::getPlaybackRtsp($camera_id,$start_time,$end_time);
+            return self::successResponse($result);
+        }else{
+            $result = CameraServices::getPlaybackRtmp($camera_id,$start_time,$end_time);
+            return self::successResponse($result);
+        }
+
+
 
-        return self::successResponse($result);
     }
 
     /**

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

@@ -332,7 +332,10 @@ class HaiKangController extends BaseController
         return $result;
     }
 
-    public function getPlaybackUrl(){
+    public function getPlaybackRtsp(){
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+
         $camera_id = Input::get('camera_id');
         $start_time = Input::get('start_time');
         $end_time = Input::get('end_time');
@@ -367,6 +370,52 @@ class HaiKangController extends BaseController
 
         $data = json_decode($data, true);
 
+        if ($data['content']['data']['url']) {
+            $result['camera_id'] = $camera_id;
+            $result['url'] = $data['content']['data']['url'];
+        } else {
+            $result['status'] = false;
+            $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
+        }
+
+        return $data;
+    }
+
+    public function getPlaybackRtmp(){
+        $camera_id = Input::get('camera_id');
+        $start_time = Input::get('start_time');
+        $end_time = Input::get('end_time');
+
+        $query = CameraList::where('id', $camera_id)->first();
+
+//        $url        = $this->artemis.'/api/video/v2/cameras/playbackURLs';
+//        $params['cameraIndexCode'] = $query->index_code;
+//        $params['recordLocation']      = 0;
+//        $params['protocol']        = 'rtsp';//rtsp
+//        $params['transmode']        = 0;
+//        $params['beginTime']       = $start_time;
+//        $params['endTime']       = $end_time;
+//        $params['uuid'] = '';
+//        $params['expand'] = 'transcode=0';
+//        $params['streamform'] = 'ps';
+//        $params['lockType'] = 0;
+
+        $url        = $this->artemis.'/api/video/v1/cameras/playbackURLs';
+        $params['cameraIndexCode'] = $query->index_code;
+        $params['recordLocation']      = 0;
+        $params['protocol']        = 'rtmp';//rtsp
+        $params['transmode']        = 0;
+        $params['beginTime']       = $start_time;
+        $params['endTime']       = $end_time;
+//        $params['uuid'] = '';
+//        $params['expand'] = 'streamform=ps';
+
+        $this->sign = $this->get_sign($url);
+
+        $data = $this->curlPost($this->pre_url . $url, json_encode($params));
+
+        $data = json_decode($data, true);
+
         return $data;
     }
 

+ 82 - 3
Modules/Camera/Services/CameraServices.php

@@ -971,14 +971,32 @@ class CameraServices
         return $result;
     }
 
-    //海康获取回放rtsp流
-    public static function getPlaybackUrl($camera_id,$start_time,$end_time)
+    //海康ffmpeg获取回放rtmp流
+    public static function getPlaybackRtmp($camera_id,$start_time,$end_time)
     {
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+
         $query = CameraList::where('id', $camera_id)->first();
 
         $degree = MineList::where('id', $query->mine_id)->value('degree');
         $degree = explode('|', $degree)[0];
 
+        $path = '';
+        foreach ($degree as $key => $val) {
+            $path .= MineList::where('id', $val)->value('title') . '/';
+        }
+        $path .= $query->camera_name . '/回放/' . date('Ymd');
+
+        //如果m3u8文件已拉取,直接返回播放链接
+        if ($query->revert_id == CameraEnum::CAMERA_FILE_EXIST) {
+            $result['data'] = [
+                'camera_id' => $camera_id,
+                'url' => env('VIDEO_SYSTEM_URL') . CameraEnum::M3U8_FILE_PATH . '/' . $path . '/' . CameraEnum::M3U8_FILE_NAME . '?' . time(),
+            ];
+            return $result;
+        }
+
         $mine_ext = DB::table('mine_list_ext')->where('mine_id',$degree)->get();
 
         Input::replace(
@@ -993,10 +1011,71 @@ class CameraServices
         );
 
         $haikang = new HaiKangController();
-        $result = $haikang->getPlaybackUrl();
+        $result_hk = $haikang->getPlaybackRtmp();
+
+        if ($result_hk['content']['data']['url']) {
+            $res = self::getVideoStream($result_hk['data']['url'], $path, $camera_id);
+            $result['data'] = $res['data'];
+        } else {
+            $result['status'] = false;
+            $result['msg'] = ApiEnum::HK_REQUEST_FAIL;
+        }
+
         return $result;
     }
 
+    //海康(宁煤集团)获取回放rtsp流
+    public static function getPlaybackRtsp($camera_id,$start_time,$end_time)
+    {
+        $query = CameraList::where('id', $camera_id)->first();
+
+        $degree = MineList::where('id', $query->mine_id)->value('degree');
+        $degree = explode('|', $degree)[0];
+
+        $mine_ext = DB::table('mine_list_ext')->where('mine_id',$degree)->get();
+
+        Input::replace(
+            [
+                'url'      => trim($mine_ext[0]->ip, '/') . ':' . $mine_ext[0]->port,
+                'key' => $mine_ext[0]->key,
+                'secret' => $mine_ext[0]->secret,
+                'camera_id' => $camera_id,
+                'start_time' => $start_time,
+                'end_time' => $end_time,
+            ]
+        );
+
+        $haikang = new HaiKangController();
+        $result = $haikang->getPlaybackRtsp();
+        return $result;
+    }
+
+    //海康ffmpeg获取回放rtmp流
+//    public static function getPlaybackRtmp($camera_id,$start_time,$end_time)
+//    {
+//        $query = CameraList::where('id', $camera_id)->first();
+//
+//        $degree = MineList::where('id', $query->mine_id)->value('degree');
+//        $degree = explode('|', $degree)[0];
+//
+//        $mine_ext = DB::table('mine_list_ext')->where('mine_id',$degree)->get();
+//
+//        Input::replace(
+//            [
+//                'url'      => trim($mine_ext[0]->ip, '/') . ':' . $mine_ext[0]->port,
+//                'key' => $mine_ext[0]->key,
+//                'secret' => $mine_ext[0]->secret,
+//                'camera_id' => $camera_id,
+//                'start_time' => $start_time,
+//                'end_time' => $end_time,
+//            ]
+//        );
+//
+//        $haikang = new HaiKangController();
+//        $result = $haikang->getPlaybackRtmp();
+//        return $result;
+//    }
+
     //根据摄像头id获取摄像头播放链接
     public static function getRtspHaiKang($camera_id,$parent_id)
     {

+ 4 - 0
config/playback.php

@@ -0,0 +1,4 @@
+<?php
+return [
+    '宁煤集团'
+];