萤石云、海康 摄像头对接+云台控制控制
萤石云、海康 摄像头对接+云台控制控制
技术分享
2020-04-29 09:54:06
1049次阅读

注:云台控制只支持带有该功能设备,例如萤石云c6系列

支持平台:通用

不建议多人同时观看的项目,适合单人观看,多人建议升级套餐

套餐价格:


1.登录萤石云开发平台 获取AppKey、Secret

官网地址:open.ys7.com/

2.添加购买的设备到萤石云账号

















3.对接接口

注:本文章已对接功能 关闭设备视频加密、获取设备直播地址、云台控制设备开始转动、云台控制设备停止转动、设备开通直播、设备关闭直播、设备设置预置点、设备调用预置点、设备清除预置点,其他功能还支持例如设备抓拍图片、设配在线添加、配置等功能,其他详细功能可参考下方接口文档

接口地址:open.ys7.com/doc/zh/book…

代码:

<?php namespace app\common\logic; use think\Cache; class Broadcast extends Base {     //萤石云 appKey     protected $appKey = "f777f08665f8438db7871f90899bad10";     //萤石云 appSecret     protected $appSecret = "50b5736bd6900001f0bf2db305b26b20";     //请求头部     protected $header=['Content-Type: application/x-www-form-urlencoded'];     //云台控制 转动速度 0-慢,1-适中,2-快,海康设备参数不可为0     protected $speed = 1;     /**      * 获取授权的accessToken      */     public function getAccessToken()     {         $url = 'https://open.ys7.com/api/lapp/token/get';         $content = "appKey=$this->appKey&appSecret=$this->appSecret";         $accessToken = Cache::get('accessToken');         if(!$accessToken){// 缓存 不存在             if($accessToken['expireTime'] < time()){//缓存 accessToken 已过期                 $accessToken = $this->httpPost($url,$this->header,$content);                 Cache::set('accessToken',$accessToken['data']);                 return $accessToken['data']['accessToken'];             }         }         return $accessToken['accessToken'];     }     /**      * 关闭设备视频加密      */     public function deviceDecrypt($device_number,$verification_code){         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/device/encrypt/off';         $content = "accessToken=$accessToken&deviceSerial=$device_number&validateCode=$verification_code";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 获取设备直播地址      * hlsHd 直播地址      * @param $device_number 设备号 数组形式      * @return mixed      */     public function getAddress($device_number=[],$channel_number=1)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/live/address/get';         $source = '';         foreach ($device_number as $key=>$value){             $source .= $value.':'.$channel_number.',';         }         $content = "accessToken=$accessToken&source=$source";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 云台控制设备开始转动      * @param $device_number 设备序列号      * @param $direction 操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-近焦距,11-远焦距      * @return mixed      */     public function startTurn($device_number,$direction)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/device/ptz/start';         $content = "accessToken=$accessToken&deviceSerial=$device_number&channelNo=1&direction=$direction&speed=$this->speed";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 云台控制设备停止转动      * @param $device_number 设备序列号      * @param $direction 操作命令:0-上,1-下,2-左,3-右,4-左上,5-左下,6-右上,7-右下,8-放大,9-缩小,10-近焦距,11-远焦距      * @return mixed      */     public function stopTurn($device_number,$direction=1)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/device/ptz/stop';         $content = "accessToken=$accessToken&deviceSerial=$device_number&channelNo=1&direction=$direction&speed=$this->speed";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 设备开通直播      * @param $device_number 设备号 数组      * @param int $channel_number      * @return mixed      */     public function openDevice($device_number,$channel_number=1)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/live/video/open';         $source = '';         foreach ($device_number as $key=>$value){             $source .= $value.':'.$channel_number.',';         }         $content = "accessToken=$accessToken&source=$source";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 设备关闭直播      * @param $device_number      * @param int $channel_number      * @return mixed      */     public function closeDevice($device_number,$channel_number=1)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/live/video/close';         $source = '';         foreach ($device_number as $key=>$value){             $source .= $value.':'.$channel_number.',';         }         $content = "accessToken=$accessToken&source=$source";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 设备设置预置点      * @param $device_number      * @param int $channel_number      * @return mixed      */     public function setPreset($device_number,$channel_number=1)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/device/preset/add';         $content = "accessToken=$accessToken&deviceSerial=$device_number&channelNo=$channel_number";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 设备调用预置点      * @param $device_number      * @param int $channel_number      * @return mixed      */     public function callPreset($device_number,$index,$channel_number=1)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/device/preset/move';         $content = "accessToken=$accessToken&deviceSerial=$device_number&channelNo=$channel_number&index=$index";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * 设备清除预置点      * @param $device_number      * @param int $channel_number      * @return mixed      */     public function clearPreset($device_number,$index,$channel_number=1)     {         $accessToken = $this->getAccessToken();         $url='https://open.ys7.com/api/lapp/device/preset/clear';         $content = "accessToken=$accessToken&deviceSerial=$device_number&channelNo=$channel_number&index=$index";         $res=$this->httpPost($url,$this->header,$content);         return $res;     }     /**      * post 请求      * @param $url      * @param $header      * @param array $data      * @return mixed      */     public function httpPost($url,$header ,$data=array())     {         $ch = curl_init();         curl_setopt($ch, CURLOPT_HTTPHEADER, $header);         curl_setopt($ch, CURLOPT_URL, $url);         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);         curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');         curl_setopt($ch, CURLOPT_AUTOREFERER, 1);         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         $status = curl_exec($ch);         curl_close($ch);         $res = json_decode($status, true);         return $res;     } }



相关推荐