IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php 接入海康平台 -> 正文阅读

[PHP知识库]php 接入海康平台

php获取海康平台的监控流地址
先获取所有监控点(/artemis/api/resource/v1/cameras)在根据监控点的cameraIndexCode请求/artemis/api/video/v1/cameras/previewURLs接口获取监控的视频流,
备注:h5播放的话获取视频流时取流协议protocol 要选择 hls,播放时要引入video.js

<?php
namespace app\controller;

use app\BaseController;
class Haikang extends BaseController
{
    public $pre_url = "https://**.***.***";
    protected $app_key = "***"; 
    protected $app_secret = "****";

    public $time; //时间戳
    public $content_type = "application/json"; //json类型
    public $accept = "*/*";
    public $method = array(
        "POST" => "POST"
    );

    public $list_url = array(
        'resource/v1/cameras' => "/artemis/api/resource/v1/cameras",
        'online/camera/get' => "/artemis/api/nms/v1/online/camera/get",
        'vqd/list' => "/artemis/api/nms/v1/vqd/list",
        'record/list' => "/artemis/api/nms/v1/record/list",
        'region/nodesByParams' => "/artemis/api/irds/v2/region/nodesByParams",
        'regions/regionIndexCode/cameras' => "/artemis/api/resource/v1/regions/regionIndexCode/cameras",
        'cameras/previewURLs' => "/artemis/api/video/v1/cameras/previewURLs",
        'regions/camera/search' =>'/artemis//api/resource/v2/camera/search'
    );

    public $date = null;
    public function __construct($app_key = '', $app_secret = '')
    {
        session_start();
        if ($app_key != '') $this->app_key = $app_key;
        if ($app_secret != '') $this->app_secret = $app_secret;
        $this->charset = 'utf-8';
        list($msec, $sec) = explode(' ', microtime());
        $this->time = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    }
    // 分页获取监控点资源
    public function get_camera()
    {
        //请求参数
        $postData = [
            "pageNo" => "1",
            "pageSize" => "500",
        ];

        $sign = $this->get_sign($postData, $this->list_url['resource/v1/cameras']);
        $options = array(
            CURLOPT_HTTPHEADER => array(
                "HTTP METHOD:" . $this->method['POST'],
                "Accept:" . $this->accept,
                "Content-Type:" . $this->content_type,
                "Date:" . $this->get_date(),
                "x-Ca-Key:" . $this->app_key,
                "X-Ca-Signature:" . $sign,
                "X-Ca-Signature-Headers: x-ca-key",
            )
        );
        $result1 = $this->curlPost($this->pre_url . $this->list_url['resource/v1/cameras'], json_encode($postData), $options);
        // dump($result1);die;
        // return $result1;
        return json_decode($result1, true);
    }
    // 获取监控点在线状态
    public function get_online_camera($includeSubNode = null)
    {
        //请求参数
        if ($includeSubNode) {
            $postData = [
                "pageNo" => 1,
                "pageSize" => 300,
                "includeSubNode" => $includeSubNode,
            ];
        } else {
            $postData = [
                "pageNo" => 1,
                "pageSize" => 500,
            ];
        }

        $sign = $this->get_sign($postData, $this->list_url['online/camera/get']);
        $options = array(
            CURLOPT_HTTPHEADER => array(
                "HTTP METHOD:" . $this->method['POST'],
                "Accept:" . $this->accept,
                "Content-Type:" . $this->content_type,
                "Date:" . $this->get_date(),
                "x-Ca-Key:" . $this->app_key,
                "X-Ca-Signature:" . $sign,
                "X-Ca-Signature-Headers: x-ca-key",
            )
        );
        $result1 = $this->curlPost($this->pre_url . $this->list_url['online/camera/get'], json_encode($postData), $options);

        return json_decode($result1, true);
    }
    // 获取监控点预览取流URLv2
    public function get_previewURLs()
    {
        $cameraIndexCode = input('cameraIndexCode');
        if(!$cameraIndexCode)
        {
            return "cameraIndexCode不能为空";
        }
        //请求参数  eef72184562f42cd9df5d9030adca01d cf5ddb99469844bf8e43c0a62ecb8708 6f037f787a2e47c188cbb6e6d42d2b83
        $postData = [
            "cameraIndexCode" => $cameraIndexCode,
            "streamType"=> 1,
            "protocol"=> "hls",
            "transmode"=> 1
        ];

        $sign = $this->get_sign($postData, $this->list_url['cameras/previewURLs']);
        $options = array(
            CURLOPT_HTTPHEADER => array(
                "HTTP METHOD:" . $this->method['POST'],
                "Accept:" . $this->accept,
                "Content-Type:" . $this->content_type,
                "Date:" . $this->get_date(),
                "x-Ca-Key:" . $this->app_key,
                "X-Ca-Signature:" . $sign,
                "X-Ca-Signature-Headers: x-ca-key",
            )
        );
        $result1 = $this->curlPost($this->pre_url . $this->list_url['cameras/previewURLs'], json_encode($postData), $options);
        // var_dump($result1);exit;
        return $result1;
    }

    function curlPost($url = '', $postData = '', $options = array())
    {
        if (is_array($postData)) {
            $postData = http_build_query($postData);
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30); //设置cURL允许执行的最长秒数
        if (!empty($options)) {
            curl_setopt_array($ch, $options);
        }
        //https请求 不验证证书和host
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($ch);

        curl_close($ch);
        return $data;
    }
    /**
     * 转换字符集编码
     * @param $data
     * @param $targetCharset
     * @return string
     */
    function characet($data, $targetCharset)
    {
        if (!empty($data)) {
            $fileType = $this->charset;
            if (strcasecmp($fileType, $targetCharset) != 0) {
                $data = mb_convert_encoding($data, $targetCharset, $fileType);
            }
        }
        return $data;
    }
    /**
     * 以appSecret为密钥,使用HmacSHA256算法对签名字符串生成消息摘要,对消息摘要使用BASE64算法生成签名(签名过程中的编码方式全为UTF-8)
     */
    function get_sign($postData, $url)
    {
        $sign_str = $this->get_sign_str($postData, $url); //签名字符串
        $app_secret = $this->app_secret;
        $sign = hash_hmac('sha256', $sign_str, $app_secret, true); //生成消息摘要
        $result = base64_encode($sign);
        return $result;
    }

    function get_sign_str($postData, $url)
    {
        $next = "\n";
        $str = "POST" . $next . $this->accept . $next . $this->content_type . $next . $this->get_date() . $next; //httpHeaders 
        $str .= "x-ca-key:" . $this->app_key . $next; //customHeaders 
        $str .= $url;
        return $str;
    }
    function get_date()
    {
        if (!$this->date)
            $this->date = date("Y-m-d H:i:s");
        return $this->date;
    }
}
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 00:56:09  更:2022-02-19 00:56:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:50:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码