Parcourir la source

海康获取rtmp接口

任敬轩 il y a 2 ans
Parent
commit
2e332900bc

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

@@ -232,6 +232,29 @@ class CameraApiController extends BaseController
         }
     }
 
+    //获取海康rtmp流
+    public function getHikRtmp(){
+        $parent_id = Input::get('parent_id', '');
+        $camera_id = Input::get('camera_id', '');
+
+        if (!$parent_id || !$camera_id) {
+            return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY);
+        }
+
+        //判断是否使用海康视频服务器
+        $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak');
+
+        //判断是否生成摄像头请求链接
+        $camera_url = CameraList::where('id', $camera_id)->value('camera_url');
+
+        if ($is_hak == 1 && !$camera_url) {
+            $result = CameraServices::getHkRtmp($camera_id,$parent_id);
+            return self::successResponse($result);
+        }else{
+            return self::errorResponse(ApiEnum::HK_REQUEST_FAIL);
+        }
+    }
+
     //海康摄像头easy_drawin方式获取url
     public function getCamerasRtsp()
     {

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

@@ -546,6 +546,7 @@ class HaiKangController extends BaseController
         return $data;
     }
 
+    //海康获取rtsp
     public function getHikRtsp(){
         $result['status'] = true;
         $result['msg']    = ApiEnum::RETURN_SUCCESS;
@@ -629,6 +630,90 @@ class HaiKangController extends BaseController
         return $result;
     }
 
+    //海康获取rtmp
+    public function getHikRtmp(){
+        $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;
+
+        if($query->code_stream == 2){
+            $code_stream = 0;
+        }else{
+            $code_stream = 1;
+        }
+
+        $url        = $this->artemis.'/api/video/v1/cameras/previewURLs';
+        $params['cameraIndexCode'] = $query->index_code;
+        $params['streamType']      = $code_stream;  //0主码流 1子码流 2第三码流
+        $params['protocol']        = 'rtmp';//rtmp
+        $params['transmode']       = 1;  //0:UDP 1:TCP
+        $params['expand'] = 'streamform=rtp';
+
+        $this->sign = $this->get_sign($url);
+
+        $rtmp = $this->curlPost($this->pre_url . $url, json_encode($params));
+
+        $rtmp = json_decode($rtmp, true);
+
+        if($rtmp['data']['url']){
+            //访问记录
+            $log['mine_id'] = $query->mine_id;
+            $log['camera_id'] = Input::get('camera_id');
+            $log['log'] = '海康接口返回rtsp成功';
+            $log['status'] = 0;//正常
+            $log['created_at'] = date('Y-m-d H:i:s');
+            $log['updated_at'] = date('Y-m-d H:i:s');
+            DB::table('log')->insert($log);
+        }else{
+            //访问记录
+            $log['mine_id'] = $query->mine_id;
+            $log['camera_id'] = Input::get('camera_id');
+            $log['log'] = '海康接口返回rtsp失败';
+            $log['status'] = 1;//异常
+            $log['created_at'] = date('Y-m-d H:i:s');
+            $log['updated_at'] = date('Y-m-d H:i:s');
+            DB::table('log')->insert($log);
+        }
+
+        $ffmpeg_rtmp = $rtmp['data']['url'];
+
+        $rtmp['data']['url'] = substr_replace($rtmp['data']['url'],env('HK_RTMP'),7,12);
+
+        $result['data'] = [
+            'camera_id' => Input::get('camera_id'),
+            'url' => $rtmp['data']['url']
+        ];
+
+        //查询是否存在封面图
+        $cover_picture = CameraList::where('id', Input::get('camera_id'))->value('cover_picture');
+
+        if (!$cover_picture) {
+            register_shutdown_function(array($this, "getFirstPicture"),$path,$ffmpeg_rtmp);
+        }
+
+        return $result;
+    }
+
     //宁煤集团获取rtsp流后获取首帧图片
     public function getFirstPicture($path,$ffmpeg_rtsp){
         if (!is_dir('/www/wwwroot/video.nxjiewei.com/public/' . CameraEnum::M3U8_FILE_PATH . '/' . $path)) {

+ 1 - 0
Modules/Camera/Routes/api.php

@@ -21,6 +21,7 @@ Route::middleware('auth:api')->namespace('Api')->group(function () {
     Route::post('camera/lake/getlist', 'CameraApiController@getSouthLakeCamera');
     Route::post('camera/surface/getlist', 'CameraApiController@getWorkSurfaceCamera');
     Route::post('camera/get_hik_rtsp', 'CameraApiController@getHikRtsp');//海康获取rtsp流
+    Route::post('camera/get_hik_rtmp', 'CameraApiController@getHikRtmp');//海康获取rtmp流
     Route::post('camera/playback/getlist', 'CameraApiController@getPlaybackList');//回放时间段列表
     Route::post('camera/playback/geturl', 'CameraApiController@getPlaybackUrl');//回放url
     Route::post('camera/playback/geturleasy', 'CameraApiController@getPlaybackUrlByEasy');//easydrawin回放url

+ 20 - 0
Modules/Camera/Services/CameraServices.php

@@ -971,6 +971,26 @@ class CameraServices
         return $result;
     }
 
+    //海康获取rtmp流
+    public static function getHkRtmp($camera_id,$parent_id)
+    {
+        $mine_ext = DB::table('mine_list_ext')->where('mine_id',$parent_id)->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,
+                'parent_id' => $parent_id,
+            ]
+        );
+
+        $haikang = new HaiKangController();
+        $result = $haikang->getHikRtmp();
+        return $result;
+    }
+
     //海康easydrawin获取回放rtsp流
     public static function getPlaybackByEasy($camera_id,$start_time,$end_time,$time)
     {