where('slug','like','%'.$mine_code.'%')->where('parent_id',0)->where('deleted_at',null)->first(); if (!$mine) { $result['status'] = false; $result['msg'] = '矿区名称不存在'; return $result; } $mine_list = DB::table('mine_list')->where('degree', 'like', $mine->id . '|' . '%')->where('deleted_at',null)->get(); $mine_array = []; foreach($mine_list as $k=>$v){ $mine_array[] = $v->id; } $query = CameraList::where('is_show', CameraEnum::IS_SHOW_YES)->where('deleted_at',null)->whereIn('mine_id',$mine_array)->where('camera_type',$camera_type)->orderBy('sort', 'desc')->get(); if (!$query) { $result['status'] = false; $result['msg'] = '矿区下没有摄像头'; return $result; } $result = []; foreach($query as $k=>$v){ $result[$k]['id'] = $v->id; $result[$k]['mine_id'] = $v->mine_id; $result[$k]['camera_name'] = $v->camera_name; $result[$k]['cover_picture'] = $v->cover_picture; $result[$k]['camera_status'] = $v->camera_status; $result[$k]['playback'] = $v->playback; } return self::successResponse($result); } //高风险区域摄像头 public function getCameraByMinecode(){ $mine_code = Input::get('mine_code', ''); if (!$mine_code) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; $mine = DB::table('mine_list')->where('slug','like','%'.$mine_code.'%')->where('parent_id',0)->where('deleted_at',null)->first(); if (!$mine) { $result['status'] = false; $result['msg'] = '矿区名称不存在'; return $result; } $mine_list = DB::table('mine_list')->where('degree', 'like', $mine->id . '|' . '%')->where('title','like','%高风险%')->where('deleted_at',null)->get(); $mine_array = []; foreach($mine_list as $k=>$v){ $mine_child = DB::table('mine_list')->where('degree', 'like','%' . $v->id . '%')->where('deleted_at',null)->get(); if(count($mine_child)>0){ for($i=0;$iid; } } } $query = DB::table('camera_list') ->select('camera_list.*','mine_list.title') ->leftJoin('mine_list','camera_list.mine_id','=','mine_list.id') ->where('camera_list.deleted_at',null) ->whereIn('camera_list.mine_id',$mine_array) ->orderBy('sort', 'desc')->get(); if (!$query) { $result['status'] = false; $result['msg'] = '矿区下没有摄像头'; return $result; } $result = []; foreach($query as $k=>$v){ $result[$k]['parent_id'] = $mine->id; $result[$k]['camera_id'] = $v->id; $result[$k]['mine_name'] = $v->title; $result[$k]['camera_name'] = $v->camera_name; $result[$k]['cover_picture'] = $v->cover_picture; $result[$k]['camera_status'] = $v->camera_status; } return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 获取摄像头列表 * @return \App\Http\Controllers\Api\JsonResponse */ public function getCamerasList() { $parent_id = Input::get('parent_id', ''); $mine_id = Input::get('mine_id', ''); $camera_type = Input::get('camera_type', CameraEnum::CAMERA_TYPE_ALL); $surface_id = Input::get('surface_id', ''); if (!$parent_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } if (!in_array($camera_type, [CameraEnum::CAMERA_TYPE_NORMAL, CameraEnum::CAMERA_TYPE_ALL]) && !$surface_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } //判断是否使用海康视频服务器 // $is_hak = MineListExt::where('mine_id', $parent_id)->value('is_hak'); // if ($is_hak) { // $result = CameraServices::getHaiKangCamera($parent_id, $mine_id, $camera_type); // } else { $result = CameraServices::getCameraListByMineId($mine_id, $camera_type, $parent_id, $surface_id); // } return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 获取摄像头播放地址 * @return \App\Http\Controllers\Api\JsonResponse */ public function getCamerasUrl() { $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'))){ $result = CameraServices::getRtspTianDi($camera_id,$parent_id); //宁煤集团 }elseif(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine_hls'))){ $result = CameraServices::getHkHls($camera_id,$parent_id); }else{ $result = CameraServices::downloadCameraFiles($parent_id, $camera_id); } } else { //判断硬盘录像机的有没有封面图,有的走easydrawin,没有的走ffmpeg $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture'); // if(!$cover_picture){ //ffmpeg拉流获取首帧图片 // $result = CameraServices::getCameraUrlByFfmpeg($camera_id); // }else{ $result = CameraServices::getCameraUrlByCameraId($camera_id); // } } return self::successResponse($result); } public function getCamerasLanUrl() { $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'))){ $result = CameraServices::getRtspTianDi($camera_id,$parent_id); //宁煤集团 }elseif(isset($mine_res[0]->title) && in_array($mine_res[0]->title,config('mine_hls'))){ $result = CameraServices::getHkHls($camera_id,$parent_id); }else{ $result = CameraServices::getLanCameraUrl($parent_id, $camera_id); } } else { //判断硬盘录像机的有没有封面图,有的走easydrawin,没有的走ffmpeg $cover_picture = CameraList::where('id', $camera_id)->value('cover_picture'); // if(!$cover_picture){ //ffmpeg拉流获取首帧图片 // $result = CameraServices::getCameraUrlByFfmpeg($camera_id); // }else{ $result = CameraServices::getCameraUrlByCameraId($camera_id); // } } return self::successResponse($result); } //获取海康rtsp流 public function getHikRtsp(){ $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::getHkRtsp($camera_id,$parent_id); return self::successResponse($result); }else{ return self::errorResponse(ApiEnum::HK_REQUEST_FAIL); } } //获取海康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() { $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::getRtspTianDi($camera_id,$parent_id); }else{ //海康使用easy_drawin获取rtsp $result = CameraServices::getRtspHaiKang($camera_id, $parent_id); } } else { //硬盘录像机使用easy_drawin获取rtsp $result = CameraServices::getRtspYingPan($camera_id); } return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 停止摄像头推流 * @return \App\Http\Controllers\Api\JsonResponse */ public function stopCamerasStream() { $camera_id = Input::get('camera_id', ''); $result = CameraServices::stopCameraStream(); return self::successResponse($result); } //回放列表 public function getPlaybackList(){ $camera_id = Input::get('camera_id', ''); $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; if (!$camera_id) { $result['status'] = false; $result['msg'] = ApiEnum::STATUS_CODE_EMPTY; return $result; } $query = CameraList::where('id', $camera_id)->first(); if (!$query) { $result['status'] = false; $result['msg'] = ApiEnum::NO_CAMERA_URL; return $result; } if($query->playback == 0){ $result['status'] = false; $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK; return $result; } $playback = DB::table('playback')->where('camera_id',$query->id)->where('deleted_at',null)->get(); if(count($playback)>0){ for($i=0;$ititle; $result['data'][$i]['start_time'] = $playback[$i]->start_time; $result['data'][$i]['end_time'] = $playback[$i]->end_time; $result['data'][$i]['camera_id'] = $playback[$i]->camera_id; } }else{ $result['data'] = null; } return $result; } //回放URL public function getPlaybackUrl(){ $time['start_time'] = explode(' ',Input::get('start_time', ''))[1]; $time['end_time'] = explode(' ',Input::get('end_time', ''))[1]; $camera_id = Input::get('camera_id', ''); $start_time = Input::get('start_time', ''); $end_time = Input::get('end_time', ''); $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; if (!$camera_id || !$start_time || !$end_time) { $result['status'] = false; $result['msg'] = ApiEnum::STATUS_CODE_EMPTY; return $result; } $query = CameraList::where('id', $camera_id)->first(); if (!$query) { $result['status'] = false; $result['msg'] = ApiEnum::NO_CAMERA_URL; return $result; } if($query->playback == 0){ $result['status'] = false; $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK; return $result; } $degree = MineList::where('id', $query->mine_id)->value('degree'); $degree = explode('|', $degree)[0]; $mine_res = DB::table('mine_list')->where('id',$degree)->get(); //判断摄像头是否是洗选中心的时间+34分钟 if($mine_res[0]->slug == 'XiXuanZhongXin'){ $start_time = date('Y-m-d H:i:s',strtotime($start_time.'+34 minutes')); $end_time = date('Y-m-d H:i:s',strtotime($end_time.'+34 minutes')); } $str = '.000+'; $start_time = date('c', strtotime($start_time));//2022-07-14T08:00:00.000+08:00 $start_time = explode('+',$start_time); $start_time = $start_time[0].$str.$start_time[1]; $end_time = date('c', strtotime($end_time)); $end_time = explode('+',$end_time); $end_time = $end_time[0].$str.$end_time[1]; //判断是否在配置文件里,在的不用走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,$time); return self::successResponse($result); } } //easydrawin回放URL public function getPlaybackUrlByEasy(){ $time['start_time'] = explode(' ',Input::get('start_time', ''))[1]; $time['end_time'] = explode(' ',Input::get('end_time', ''))[1]; $camera_id = Input::get('camera_id', ''); $start_time = Input::get('start_time', ''); $end_time = Input::get('end_time', ''); $result['status'] = true; $result['msg'] = ApiEnum::RETURN_SUCCESS; if (!$camera_id || !$start_time || !$end_time) { $result['status'] = false; $result['msg'] = ApiEnum::STATUS_CODE_EMPTY; return $result; } $query = CameraList::where('id', $camera_id)->first(); if (!$query) { $result['status'] = false; $result['msg'] = ApiEnum::NO_CAMERA_URL; return $result; } if($query->playback == 0){ $result['status'] = false; $result['msg'] = ApiEnum::NO_SUPORT_PLAYBACK; return $result; } $degree = MineList::where('id', $query->mine_id)->value('degree'); $degree = explode('|', $degree)[0]; $mine_res = DB::table('mine_list')->where('id',$degree)->get(); //判断摄像头是否是洗选中心的时间+34分钟 if($mine_res[0]->slug == 'XiXuanZhongXin'){ $start_time = date('Y-m-d H:i:s',strtotime($start_time.'+34 minutes')); $end_time = date('Y-m-d H:i:s',strtotime($end_time.'+34 minutes')); } $str = '.000+'; $start_time = date('c', strtotime($start_time));//2022-07-14T08:00:00.000+08:00 $start_time = explode('+',$start_time); $start_time = $start_time[0].$str.$start_time[1]; $end_time = date('c', strtotime($end_time)); $end_time = explode('+',$end_time); $end_time = $end_time[0].$str.$end_time[1]; //判断是否在配置文件里,在的不用走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::getPlaybackByEasy($camera_id,$start_time,$end_time,$time); return self::successResponse($result); } } /** * 作者: qiuzijian * 注释: 获取编码设备信息 * @return \App\Http\Controllers\Api\JsonResponse */ public function getTranscodeInfo() { $parent_id = Input::get('parent_id', ''); if (!$parent_id) { return self::errorResponse(ApiEnum::STATUS_CODE_EMPTY); } $result = CameraServices::getHaiKangTransCode($parent_id); return self::successResponse($result); } /** * 作者: qiuzijian * 注释: 获取大南湖摄像头列表 * @return \App\Http\Controllers\Api\JsonResponse */ public function getSouthLakeCamera() { $result = CameraServices::getLeChangeCamera(); return self::successResponse($result); } public function test(){ header("Access-Control-Allow-Origin: *"); $data = DB::table('goods')->get(); return $data; } }