简单实现php对接海康开放平台接口

 

可以先用海康平台的接口测试工具测试下自己的IP

 

 

 下面是一个获取视频url的流程,分三步

<?php

namespace app\admin\controller;

use app\common\base\Base;
use think\Exception;
use think\Request;

header('Content-type:text/html; Charset=utf-8');
date_default_timezone_set('PRC');
class AdminC extends Base
{
    public $pre_url = "https://教育综合安防管理平台IP地址";
    protected $app_key = "你的ak";
    protected $app_secret = "你的sk";

    public $content_type = "application/json";  //类型
    public $token_url = '/artemis/oauth/token'; // 获取token
    public $node_list_url = "/artemis/api/resource/v1/cameras"; //获取节点
    public $video_url = "/artemis/api/video/v2/cameras/previewURLs"; //获取一个视频url

    public function test(Request $req)
    {
        try{
            // 1. 获取token
            $token = $this->getToken();

            // 2. 获取视频节点
            $res = $this->getNodes($token, $req);

            // 3. 获取url数组
            foreach($res as $k => $v){
                $obj = $this->getUrl($token,$v['cameraIndexCode']);
                $arr[$k]['url'] = $obj['url'] ?? '';
                $arr[$k]['name'] = $v['cameraName'];
                unset($obj);
            }
            dump($arr);

        }catch(Exception $e){
            return $e->getMessage();
        }

    }
    // 请求获取token
    public function getToken()
    {
        $params = [
            'client_id' => $this->app_key,
            'client_secret' => $this->app_secret
        ];

        $res = $this->curlPost($params,[],$this->token_url);    // post请求

        if (isset($res['error'])) {
            failApi($res['error_description'])->send();
            die;
        }

        return $res['access_token'];
    }

    // 请求获取视频节点
    public function getNodes($token, Request $req)
    {
        $param = [
            'pageNo' => $req->pageNo ?? "1",
            'pageSize' => $req->pageSize ?? "1000",
        ];
        $headers = [
            'Access_token:' . $token,
            'Content-Type: application/json',
        ];
        // body参数是json字符串格式
        $res = $this->curlPost(json_encode($param),$headers,$this->node_list_url);
        return $res['data']['list'];
    }

    // 请求获取视频url
    public function getUrl($token,$node)
    {
        $param = [
            'cameraIndexCode' => $node,
            "streamType"=> 0,
            "protocol"=> "rtsp",
            "transmode"=> 1,
            "streamform"=> "rtp",           // 转码
            "expand" =>"streamform=rtp"
        ];
        $headers = [
            'Access_token:' . $token,
            'Content-Type: application/json',
        ];
        // body参数是json字符串格式
        $res = $this->curlPost(json_encode($param),$headers,$this->video_url);
        return $res['data'];
    }

    /**
     * @param $param   // body参数
     * @param $headers // header参数
     * @param $url     // 请求api
     */
    public function curlPost($param, $headers,$url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->pre_url . $url);  // 拼接url
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $param);

        if(count($headers))     // heade参数
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);    // 跳过ssl验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        $result = curl_exec($ch);
        if (curl_errno($ch)) {
            curl_close($ch);
            return failApi(curl_error($ch))->send();
        }

        curl_close($ch);
        return json_decode($result,true);
    }
}

 

成功:

 

 

然后用vlc播放器播放:

 

 

输入返回的url播放即可:

 

posted @ 2021-08-20 11:19  jaychou、  阅读(1593)  评论(0)    收藏  举报