Selaa lähdekoodia

海康摄像头easy_drawin获取rtsp

任敬轩 3 vuotta sitten
vanhempi
commit
04e03861d9

+ 43 - 0
Modules/Camera/Http/Controllers/Api/CameraApiController.php

@@ -95,6 +95,49 @@ class CameraApiController extends BaseController
         return self::successResponse($result);
     }
 
+    //海康摄像头easy_drawin方式获取url
+    public function getCamerasRtsp()
+    {
+        $parent_id = Input::get('parent_id', '');
+        $camera_id = Input::get('camera_id', '');
+
+        if (!$parent_id || !$camera_id) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        //判断摄像头来源是否为内网服务器
+        $camera_source = CameraList::where('id', $camera_id)->value('camera_source');
+
+        if ($camera_source == CameraEnum::CAMERA_SOURCE_3) {
+            $result = CameraServices::getIntranetCameraUrl($camera_id);
+            return self::successResponse($result);
+        }
+
+        //判断是否使用海康视频服务器
+        $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
+
+        //判断是否生成摄像头请求链接
+        $camera_url = CameraList::where('id', $camera_id)->value('camera_url');
+
+        if ($is_hak && !$camera_url) {
+            //判断是否是mine配置文件的矿区
+            $mine_res = DB::table('mine_list')->where('id',$parent_id)->get();
+            if(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine'))){
+                //天地伟业使用easy_drawin获取rtsp
+                $result = CameraServices::getRtspByCameraId($camera_id,$parent_id);
+            }else{
+                //海康使用easy_drawin获取rtsp
+                $result = CameraServices::getRtspHaiKang($camera_id, $parent_id);
+            }
+        } else {
+            $result = CameraServices::getCameraUrlByCameraId($camera_id);
+        }
+
+        return self::successResponse($result);
+    }
+
+
+
     /**
      * 作者: qiuzijian
      * 注释: 停止摄像头推流

+ 91 - 0
Modules/Camera/Http/Controllers/Api/HaiKangController.php

@@ -8,10 +8,12 @@
 
 namespace Modules\Camera\Http\Controllers\Api;
 
+use App\Enum\ApiEnum;
 use App\Http\Controllers\Api\BaseController;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Input;
 use Illuminate\Support\Facades\Log;
+use Modules\Camera\Entities\CameraList;
 use Modules\Camera\Enum\CameraEnum;
 use Modules\Mine\Entities\MineList;
 use Modules\Mine\Services\MineServices;
@@ -308,6 +310,95 @@ class HaiKangController extends BaseController
         return $result;
     }
 
+    //海康easy_drawin获取rtsp并推流
+    public function getRtspByCameraId(){
+        $result['status'] = true;
+        $result['msg']    = ApiEnum::RETURN_SUCCESS;
+
+        $query = CameraList::where('id',Input::get('camera_id'))->first();
+
+        if (!$query) {
+            $result['status'] = false;
+            $result['msg'] = ApiEnum::NO_CAMERA_URL;
+            return $result;
+        }
+
+        $degree = MineList::where('id', $query->mine_id)->value('degree');
+
+        $mine_list = MineList::whereIn('id', explode('|', $degree))->select(['title'])->get()->toArray();
+
+        $path = '';
+        foreach ($mine_list as $key => $val) {
+            $path .= '/' . $val['title'];
+        }
+        $new_camera_name = str_replace('-','',$query->camera_name);
+        $new_camera_name = str_replace('#','号',$new_camera_name);
+        $path .= '/' . $new_camera_name;
+
+        //标记摄像头为在线状态
+        CameraList::where('id', Input::get('camera_id'))->update(['camera_status' => CameraEnum::CAMERA_STATUS_ONLINE]);
+
+        //已有拉流id,直接返回拉流链接
+        if($query->revert_id != 'NullId'){
+            $result['data'] = [
+                'camera_id' => Input::get('camera_id'),
+                'url' => env('EASY_DARWIN_JF_RTSP') .  $path
+            ];
+            return  $result;
+        }
+
+        $url        = $this->artemis.'/api/video/v1/cameras/previewURLs';
+        $params['cameraIndexCode'] = $query->index_code;
+        $params['streamType']      = 1;  //0主码流 1子码流 2第三码流
+        $params['protocol']        = 'rtsp';
+        $params['transmode']       = 1;  //0:UDP 1:TCP
+        $params['expand'] = 'streamform=rtp';
+
+        $this->sign = $this->get_sign($url);
+
+        $rtsp = $this->curlPost($this->pre_url . $url, json_encode($params));
+
+        $rtsp = json_decode($rtsp, true);
+
+        $data = [
+            'url'        => $rtsp['data']['url'],
+            'customPath' => $path,
+        ];
+        // dd($data);
+        Log::info('请求流媒体服务器参数------------');
+        Log::info($data);
+
+        $curl = env('EASY_DARWIN_JF_URL') . CameraEnum::API_STREAM_START . '?' . http_build_query($data);
+
+        //请求流媒体服务器拉流
+        $curl_res = curl_request($curl);
+
+
+        // DB::table('camera_list')->where('id',$camera_id)->update($res);
+        // dd($res);
+        Log::info('请求流媒体服务器result------------');
+        Log::info($curl_res);
+
+        if(strlen($curl_res) < 20){
+            CameraList::where('id', Input::get('camera_id'))->update(['revert_id' => $curl_res]);
+        }
+        if (strpos($curl_res,' ')) {
+            //标记摄像头为异常状态
+            CameraList::where('id', Input::get('camera_id'))->update(['camera_status' => CameraEnum::CAMERA_STATUS_ERROR]);
+
+            $result['status'] = false;
+            $result['msg']    = ApiEnum::EASY_DAWIN_REQUEST_FAIL;
+            return $result;
+        }
+
+        $result['data'] = [
+            'camera_id' => Input::get('camera_id'),
+            'url' => env('EASY_DARWIN_JF_RTSP') . $path
+        ];
+
+        return $result;
+    }
+
     /**
      * 以appSecret为密钥,使用HmacSHA256算法对签名字符串生成消息摘要,对消息摘要使用BASE64算法生成签名(签名过程中的编码方式全为UTF-8)
      */

+ 23 - 5
Modules/Camera/Services/CameraServices.php

@@ -510,16 +510,14 @@ class CameraServices
         foreach ($mine_list as $key => $val) {
             $path .= '/' . $val['title'];
         }
-        $new_camea_name = str_replace('-','',$query->camera_name);
-        $new_camea_name = str_replace('#','号',$new_camea_name);
-        $path .= '/' . $new_camea_name;
+        $new_camera_name = str_replace('-','',$query->camera_name);
+        $new_camera_name = str_replace('#','号',$new_camera_name);
+        $path .= '/' . $new_camera_name;
         // dd($path);
         //标记摄像头为在线状态
         CameraList::where('id', $camera_id)->update(['camera_status' => CameraEnum::CAMERA_STATUS_ONLINE]);
 
         //已有拉流id,直接返回拉流链接
-
-
         if($query->revert_id != 'NullId'){
             $result['data'] = [
                 'camera_id' => $camera_id,
@@ -587,6 +585,26 @@ class CameraServices
         return $result;
     }
 
+    //根据摄像头id获取摄像头播放链接
+    public static function getRtspHaiKang($camera_id,$parent_id)
+    {
+        $mine_ext = DB::table('mine_list_ext')->where('mine_id',$parent_id)->get();
+
+        Input::replace(
+            [
+                'pre_url'      => trim($mine_ext[0]->ip, '/') . ':' . $mine_ext[0]->port,
+                'app_key' => $mine_ext[0]->key,
+                'app_secret' => $mine_ext[0]->secret,
+                'camera_id' => $camera_id,
+                'parent_id' => $parent_id,
+            ]
+        );
+
+        $haikang = new HaiKangController();
+        $result = $haikang->getRtspByCameraId();
+        return $result;
+    }
+
     //停止流媒体推流
     public static function stopCameraStream()
     {