| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418 | 
							- <?php 
 
- if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
- include_once(FCPATH . 'application/controllers/Base_Controller.php');
 
- class Video extends Base_Controller {
 
- 	public function __construct() {
 
-         parent::__construct();
 
-         $this->load->model('Videomonitor_model');
 
-         $this->load->model('Project_model');
 
-         $this->load->model('Network_model');
 
-         $this->load->model('System_config_model');
 
-     }
 
-     // 视屏监控列表
 
-     public function getlist()
 
-     {
 
-     	$userid = $this->get_user_info('id');
 
-     	$role = $this->get_user_info('role');
 
-     	$companyid = $this->get_user_info('companyid');
 
-     	$page = $this->input->post('page',true);
 
-     	$count = $this->input->post('count',true);
 
-         $page = empty($page) ? 1 : $page;
 
-         $count = empty($count) ? 16 : $count;
 
-         $project_id = intval($this->input->post('project_id',true));
 
-         // $network_id = $this->input->post('network_id',true);
 
-         // $lamp_id = $this->input->post('lamp_id',true);
 
-         // $action = $this->input->post('action',true);
 
-         $keyword = $this->input->post('keyword',true);
 
-         $filter = [];
 
-         if ($project_id > 0) $filter['projectid'] = $project_id;
 
-     	$field = "V.name as video_name,
 
-                     V.address,
 
-                     V.id,
 
-                     V.channel,
 
-                     V.devid,
 
-                     V.password,
 
-                     V.type,
 
-                     V.image";
 
-         if (!empty($keyword)) {
 
-             $filter['keyword'] = $keyword;
 
-         }
 
-         $accessToken = $this->get_accessToken();
 
-         $total = $this->Videomonitor_model->getTotal($filter,$role,$userid,$companyid,$project_id);
 
-         $data = $this->Videomonitor_model->get_list_by_role($role,$userid,$companyid,$field,$page,$count,$project_id,$filter);
 
-         foreach ($data as &$v) {
 
-             if (!empty($v['image'])) {
 
-                 $v['image'] = base_url($v['image']);
 
-             }
 
-         }
 
-         json_result('0000',$this->response['0000'],array('list'=>$data,'total'=>ceil($total/$count),'accessToken'=>$accessToken));
 
-         // if (empty($action)) {  // (视屏监控页)带分页的列表
 
-            
 
-         // }else{  // (项目管理页)不带分页的列表
 
-             
 
-         //     if ($network_id > 0) $filter['networkid'] = $network_id;
 
-         //     if ($lamp_id > 0) $filter['lampid'] = $lamp_id;
 
-         //     $data = $this->Videomonitor_model->get_list_by_filter($filter,$field);
 
-         //     json_result('0000',$this->response['0000'],array('video_list'=>$data));
 
-         // }
 
-     }
 
-     // 获取萤石云accessToken
 
-     private function get_accessToken(){
 
-         $accessToken = $this->System_config_model->get_system_config('YSYAccessToken');
 
-         $expireTime = $this->System_config_model->get_system_config('YSYAccessTokenExpireTime');
 
-         if (empty($accessToken) || empty($expireTime) || strtotime($expireTime) < time()) {
 
-             // token不存在或者token过期,重新获取token
 
-             $url = 'https://open.ys7.com/api/lapp/token/get';
 
-             $appKey = $this->config->config['YSYAppkey'];
 
-             $appSecret = $this->config->config['YXYSecret'];
 
-             $resData = request_post($url,array('appKey'=>$appKey,'appSecret'=>$appSecret));
 
-             $resData = json_decode($resData);
 
-             if ($resData->code != 200) {
 
-                 exit(json_result('0814',$this->response['0814'],array()));
 
-             }
 
-             // 获取token成功,记录token值与过期时间
 
-             $accessToken = $resData->data->accessToken;
 
-             $this->System_config_model->set_system_config('YSYAccessToken',$resData->data->accessToken);
 
-             $expireTime = floor($resData->data->expireTime/1000) - 24*3600;
 
-             $expireDate = date('Y-m-d H:i:s',$expireTime);
 
-             $this->System_config_model->set_system_config('YSYAccessTokenExpireTime',$expireDate);
 
-         }
 
-         return $accessToken;
 
-     }
 
-     // 翻译提示信息
 
-     private function translation_info($code){
 
-         if (!isset($code) || empty($code)) {
 
-             return 'Unknown error';
 
-         }
 
-         $data = array(
 
-             '20002' => 'Equipment does not exist',
 
-             '20007' => 'Equipment is not online',
 
-             '20010' => 'Device verification code error',
 
-             '20011' => 'Device add failure',
 
-             '20013' => 'The equipment has been added to others',
 
-             '20014' => 'DeviceSerial illegality',
 
-             '20017' => 'The device has been added to its own',
 
-             '10004' => 'User does not exist',
 
-             '20018' => 'The user does not have the device',
 
-             '20032' => 'The user\'s lower channel does not exist',
 
-             '60020' => 'The command is not supported',
 
-             '60061' => 'Account flow exceeded or not purchased, limit opening',
 
-             '60060' => 'Unbound address',
 
-             '49999' => 'Data anomaly',
 
-         ); 
 
-         return empty($data['code']) ? 'Unknown error' : $data['code'];
 
-     }
 
-     // 添加/编辑视频监控
 
-     public function update(){
 
-         $where['id'] = $this->input->post('id',true);
 
-         $role = $this->get_user_info('role');
 
-         $data['name'] = $this->input->post('name',true);
 
-         $data['projectid'] = $this->input->post('projectid',true);
 
-         $data['devid'] = $this->input->post('devid',true);
 
-         $data['password'] = $this->input->post('password',true);
 
-         $data['type'] = intval($this->input->post('type',true));
 
-         $address = $this->input->post('address',true);
 
-         $channel = $this->input->post('channel',true);
 
-         $longitude = $this->input->post('longitude',true);
 
-         $latitude = $this->input->post('latitude',true);
 
-         if ($data['type'] == 0) {
 
-             $data['channel'] = 1;
 
-         }else{
 
-             $data['channel'] = $channel;
 
-         }
 
-         
 
-         if(isset($address)) $data['address'] = $address;
 
-         if(isset($longitude)) $data['longitude'] = $longitude;
 
-         if(isset($latitude)) $data['latitude'] = $latitude;
 
-         
 
-         if(empty($data['name'])) exit(json_result('0803',$this->response['0803'],array()));
 
-         if(empty($data['projectid'])) exit(json_result('0308',$this->response['0308'],array()));
 
-         if(empty($data['devid'])) exit(json_result('0808',$this->response['0808'],array()));
 
-         if(empty($data['password'])) exit(json_result('0809',$this->response['0809'],array()));
 
-         if($data['type'] < 0) exit(json_result('0810',$this->response['0810'],array()));
 
-         if($data['type'] == 1 && empty($channel)) exit(json_result('0811',$this->response['0811'],array()));
 
-         // 获取accessToken
 
-         $data['devid'] = strtoupper($data['devid']);
 
-         $accessToken = $this->get_accessToken();
 
-         $version = $this->session->userdata('version');
 
-         
 
-         if (empty($where['id'])) {  // 添加数据
 
-             if ($this->Videomonitor_model->getDataCount(array('name'=>$data['name'],'projectid'=>$data['projectid']))) {
 
-                 exit(json_result('0801',$this->response['0801'],array()));
 
-             }
 
-             if ($data['type'] == 1 && $this->Videomonitor_model->getDataCount(array('devid'=>$data['devid'],'channel'=>$data['channel']))) {
 
-                 exit(json_result('0812',$this->response['0812'],array()));
 
-             }
 
-             //1. 添加设备
 
-             $url = 'https://open.ys7.com/api/lapp/device/add';
 
-             $res1 = request_post($url,array('accessToken'=>$accessToken,'deviceSerial'=>$data['devid'],'validateCode'=>$data['password']));
 
-             $res1 = json_decode($res1);
 
-             if ($res1->code != 200) {
 
-                 if (empty($version)) {
 
-                     exit(json_result('other',$res1->msg,array()));
 
-                 }else{
 
-                     exit(json_result('other',$this->translation_info($res1->code),array()));
 
-                 }
 
-                 
 
-             }
 
-             // 关闭视频加密
 
-             $url = 'https://open.ys7.com/api/lapp/device/encrypt/off';
 
-             request_post($url,array('accessToken'=>$accessToken,'deviceSerial'=>$data['devid'],'validateCode'=>$data['password']));
 
-             // 修改设备名称
 
-             $url = 'https://open.ys7.com/api/lapp/device/name/update';
 
-             request_post($url,array('accessToken'=>$accessToken,'deviceSerial'=>$data['devid'],'deviceName'=>$data['name']));
 
-             // 2.开通直播
 
-             $url = 'https://open.ys7.com/api/lapp/live/video/open';
 
-             $res2 = request_post($url,array('accessToken'=>$accessToken,'source'=>$data['devid'].':'.$data['channel']));
 
-             $res2 = json_decode($res2);
 
-             if ($res2->code != 200) {
 
-                 if (empty($version)) {
 
-                     exit(json_result('other',$res1->msg,array()));
 
-                 }else{
 
-                     exit(json_result('other',$this->translation_info($res1->code),array()));
 
-                 }
 
-             }else{
 
-                 if ($res2->data[0]->ret != 200 && $res2->data[0]->ret != 60062) {
 
-                     if (empty($version)) {
 
-                         exit(json_result('other',$res2->data[0]->desc,array()));
 
-                     }else{
 
-                         exit(json_result('other',$this->translation_info($res2->data[0]->ret),array()));
 
-                     }
 
-                 }
 
-             }
 
-             // 3.获取播放地址
 
-             $url = 'https://open.ys7.com/api/lapp/live/address/get';
 
-             $res3 = request_post($url,array('accessToken'=>$accessToken,'source'=>$data['devid'].':'.$data['channel']));
 
-             $res3 = json_decode($res3);
 
-             if ($res3->code != 200) {
 
-                 if (empty($version)) {
 
-                     exit(json_result('other',$res3->msg,array()));
 
-                 }else{
 
-                     exit(json_result('other',$this->translation_info($res3->code),array()));
 
-                 }
 
-             }
 
-             $res = $res3->data[0];
 
-             $data['hls'] = $res->hls;
 
-             $data['hlsHd'] = $res->hlsHd;
 
-             $data['rtmp'] = $res->rtmp;
 
-             $data['rtmpHd'] = $res->rtmpHd;
 
-             
 
-             // 4.获取图片
 
-             $url = 'https://open.ys7.com/api/lapp/device/capture';
 
-             $res4 = request_post($url,array('accessToken'=>$accessToken,'deviceSerial'=>$data['devid'],'channelNo'=>$data['channel']));
 
-             $res4 = json_decode($res4);
 
-             if ($res4->code == 200) {
 
-                 $image = file_get_contents($res4->data->picUrl);
 
-                 $filename = FCPATH.'file/image/C24816636_'.date('YmdHis').'.jpg';
 
-                 $file = fopen($filename, 'w');
 
-                 fwrite($file, $image);
 
-                 fclose($file);
 
-                 $data['image'] = 'api/file/image/C24816636_'.date('YmdHis').'.jpg';
 
-             }
 
-             $data['createtime'] = date('Y-m-d H-i-s',time());
 
-             $id = $this->Videomonitor_model->insert($data);
 
-             $data['count'] = 1;
 
-             // 设置项目跟网络的监控数
 
-             $this->Project_model->add_monitor_count($data);
 
-             $projectData = $this->Project_model->getData(array('id'=>$data['projectid']),'projectname');
 
-             $this->add_operation_log('insert',"在\"{$projectData['projectname']}\"项目下添加视屏监控,监控名称\"{$data['name']}\"",0);
 
-             $this->add_operation_log('insert',"Add video monitor.Monitor name:\"{$data['name']}\".Project name:\"{$projectData['projectname']}\"",0,1);
 
-         }else{   // 编辑数据
 
-             if ($this->Videomonitor_model->getDataCount(array('name'=>$data['name'],'projectid'=>$data['projectid']),$where['id'])) {
 
-                 exit(json_result('0801',$this->response['0801'],array()));
 
-             }
 
-             if ($data['type'] == 1 && $this->Videomonitor_model->getDataCount(array('devid'=>$data['devid'],'channel'=>$data['channel']),$where['id'])) {
 
-                 exit(json_result('0812',$this->response['0812'],array()));
 
-             }
 
-             $oldData = $this->Videomonitor_model->getOne($where['id']);
 
-             $this->Videomonitor_model->update(array('id'=>$where['id']),$data);
 
-             $data['count'] = 1;
 
-             $oldData['count'] = 1;
 
-             if ($oldData['projectid'] != $data['projectid']) {
 
-                 $this->Project_model->add_monitor_count($data);
 
-                 $this->Project_model->minus_monitor_count($oldData);
 
-             }
 
-             if ($oldData['name'] != $data['name']) {
 
-                 $url = 'https://open.ys7.com/api/lapp/device/name/update';
 
-                 request_post($url,array('accessToken'=>$accessToken,'deviceSerial'=>$data['devid'],'deviceName'=>$data['name']));
 
-             }
 
-             $projectData = $this->Project_model->getData(array('id'=>$data['projectid']),'projectname');
 
-             $this->add_operation_log('update',"修改\"{$projectData['projectname']}\"项目下的视屏监控,监控名称\"{$data['name']}\"",0);
 
-             $this->add_operation_log('update',"Update video monitor.Monitor name:\"{$data['name']}\".Project name:\"{$projectData['projectname']}\"",0,1);
 
-             $id = $where['id'];
 
-         }
 
-         exit(json_result('0000',$this->response['0000'],array('id'=>$id)));
 
-     }
 
-     // 删除视频监控(支持批量操作)
 
-     public function del(){
 
-         $videoIds = $this->input->post('id',true);
 
-         $role = $this->get_user_info('role');
 
-         if (empty($videoIds)) {
 
-             exit(json_result('0007',$this->response['0007'],array()));
 
-         }
 
-         $ids = explode(',', $videoIds);
 
-         $data = $this->Videomonitor_model->get_list_by_filter(array('id'=>$ids),'V.id,V.projectid,V.devid,V.name,V.image');
 
-         $url = 'https://open.ys7.com/api/lapp/device/delete';
 
-         $accessToken = $this->get_accessToken();
 
-         foreach ($data as $v) {
 
-             @unlink($v['image']);
 
-             // 删除萤石云上监控
 
-             request_post($url,array('accessToken'=>$accessToken,'deviceSerial'=>$v['devid']));
 
-             
 
-             $v['count'] = 1;
 
-             $this->Project_model->minus_monitor_count($v);
 
-             $projectData = $this->Project_model->getData(array('id'=>$v['projectid']),'projectname');
 
-             $this->add_operation_log('delete',"删除\"{$projectData['projectname']}\"项目下的视屏监控,监控名称\"{$v['name']}\"",0);
 
-             $this->add_operation_log('delete',"Delete video monitor.Monitor name:\"{$v['name']}\".Project name:\"{$projectData['projectname']}\"",0,1);
 
-         }
 
-         $this->Videomonitor_model->delData(array('id'=>$ids));
 
-         // 删除视频日志信息
 
-         $this->Videomonitor_model->del_video_info_log(array('videoid'=>$ids));
 
-         
 
-         exit(json_result('0000',$this->response['0000'],array()));
 
-     }
 
-     // 视屏监控详情
 
-     public function video_info(){
 
-         $id = $this->input->post('id',true);
 
-         if (empty($id)) {
 
-             exit(json_result('0007',$this->response['0007'],array()));
 
-         }
 
-         $field = "id,name,address,type,projectid,devid,password,channel,status,longitude,latitude,hls,hlsHD,rtmp,rtmpHD,image";
 
-         $data = $this->Videomonitor_model->getOne($id,$field);
 
-         $data['accessToken'] = $this->get_accessToken();
 
-         exit(json_result('0000',$this->response['0000'],$data));
 
-     }
 
-     // 播放视频监控
 
-     public function video_play(){
 
-         $id = $this->input->post('id',true);
 
-         if (empty($id)) {
 
-             exit(json_result('0007',$this->response['0007'],array()));
 
-         }
 
-         $field = "id,name,address,type,projectid,devid,password,channel,status,longitude,latitude,hls,hlsHD,rtmp,rtmpHD,image";
 
-         $data = $this->Videomonitor_model->getOne($id,$field);
 
-         // 4.获取图片
 
-         $accessToken = $this->get_accessToken();
 
-         $url = 'https://open.ys7.com/api/lapp/device/capture';
 
-         $res4 = request_post($url,array('accessToken'=>$accessToken,'deviceSerial'=>$data['devid'],'channelNo'=>$data['channel']));
 
-         $res4 = json_decode($res4);
 
-         if ($res4->code == 200) {
 
-             $image = file_get_contents($res4->data->picUrl);
 
-             $filename = FCPATH.'file/image/C24816636_'.date('YmdHis').'.jpg';
 
-             $file = fopen($filename, 'w');
 
-             fwrite($file, $image);
 
-             fclose($file);
 
-             $image = 'api/file/image/C24816636_'.date('YmdHis').'.jpg';
 
-             $this->Videomonitor_model->update(array('id'=>$id),array('image'=>$image));
 
-             @unlink($data['image']);
 
-             $data['image'] = $image;
 
-         }
 
-         $data['accessToken'] = $this->get_accessToken();
 
-         exit(json_result('0000',$this->response['0000'],$data));
 
-     }
 
-     // 云台控制
 
-     public function yun_start(){
 
-         $deviceSerial = $this->input->post('deviceSerial',true);
 
-         $channelNo = $this->input->post('channelNo',true);
 
-         $direction = intval($this->input->post('direction',true));
 
-         $speed = intval($this->input->post('speed',true));
 
-         if (empty($channelNo) || empty($deviceSerial)) {
 
-             exit(json_result('0007',$this->response['0007'],array()));
 
-         }
 
-         $accessToken = $this->get_accessToken();
 
-         $version = $this->session->userdata('version');
 
-         // 开始云台控制
 
-         $url1 = 'https://open.ys7.com/api/lapp/device/ptz/start';
 
-         $request_data = array('accessToken'=>$accessToken,'deviceSerial'=>$deviceSerial,'channelNo'=>$channelNo,'direction'=>$direction,'speed'=>$speed);
 
-         // var_dump($request_data);
 
-         $data = request_post($url1,$request_data);
 
-         $data = json_decode($data);
 
-         if ($data->code != '200') {
 
-             if (empty($version)) {
 
-                 exit(json_result('other',$data->msg,array()));
 
-             }else{
 
-                 exit(json_result('other',$this->translation_info($data->msg),array()));
 
-             }
 
-         }
 
-         // sleep(1);
 
-         // var_dump($data);
 
-         // 停止云台控制
 
-         // $url2 = 'https://open.ys7.com/api/lapp/device/ptz/stop';
 
-         // $data2 = request_post($url2,array('accessToken'=>$accessToken,'deviceSerial'=>$deviceSerial,'channelNo'=>$channelNo,'direction'=>$direction));
 
-         // $data2 = json_decode($data2);
 
-         
 
-         exit(json_result('0000',$this->response['0000'],array()));
 
-     }
 
-     public function yun_end(){
 
-         $deviceSerial = $this->input->post('deviceSerial',true);
 
-         $channelNo = $this->input->post('channelNo',true);
 
-         $direction = intval($this->input->post('direction',true));
 
-         $accessToken = $this->get_accessToken();
 
-         $version = $this->session->userdata('version');
 
-         if (empty($channelNo) || empty($deviceSerial)) {
 
-             exit(json_result('0007',$this->response['0007'],array()));
 
-         }
 
-         $url2 = 'https://open.ys7.com/api/lapp/device/ptz/stop';
 
-         $data2 = request_post($url2,array('accessToken'=>$accessToken,'deviceSerial'=>$deviceSerial,'channelNo'=>$channelNo,'direction'=>$direction));
 
-         $data2 = json_decode($data2);
 
-         if ($data2->code != 200) {
 
-             if (empty($version)) {
 
-                 exit(json_result('other',$data2->msg,array()));
 
-             }else{
 
-                 exit(json_result('other',$this->translation_info($data2->msg),array()));
 
-             }
 
-         }
 
-         exit(json_result('0000',$this->response['0000'],array()));
 
-     }
 
- }
 
-  ?>
 
 
  |