php怎么调用海康摄像头
时间 : 2023-03-27 23:08:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

要想调用海康摄像头,需要安装并配置SDK及相关插件。下面是具体的步骤:

1. 下载海康SDK

找到海康官网,下载SDK并解压。

2. 安装SDK

运行SDK安装程序,按照提示完成安装。

3. 配置SDK环境变量

右键“我的电脑”->“属性”->“高级系统设置”->“环境变量”,在系统变量中新建变量HKNET_HOME,值为SDK的安装路径。接下来在Path变量中添加%HKNET_HOME%\HCNetSDKCom路径。

4. 安装插件

在浏览器中打开海康摄像头的管理页,根据浏览器提示安装插件。

5. 设置IE兼容模式

在浏览器中打开海康摄像头的管理页,点击IE浏览器的兼容模式按钮使其兼容。

6. 编写PHP代码

使用PHP程序连接海康摄像头需要使用PHP SDK,它提供了封装好的接口,只需要引入php_sdk.php文件即可。

下面是一个简单的使用海康SDK连接摄像头的PHP代码:

```php

<?php

include_once 'php_sdk.php'; // 引入SDK

$Ip = '192.168.1.64'; // 设备的IP地址

$Port = '8000'; // 设备的服务端口号

$UserName = 'admin'; // 登录账号

$Password = '123456'; // 登录密码

$Channel = 1; // DVR通道号

$pSDK = new HCNetSDK(); // 创建SDK对象

$ret = $pSDK->NET_DVR_Init(); // 初始化

if (!$ret) {

echo "海康SDK初始化失败<br>";

exit;

}

$DeviceInfo = new NET_DVR_DEVICEINFO_V30(); // 设备信息

$pUserID = $pSDK->NET_DVR_Login_V30($Ip, $Port, $UserName, $Password, $DeviceInfo); // 登录

if ($pUserID == false) {

echo "海康SDK登录失败<br>";

exit;

}

$lpDeviceInfo = new NET_DVR_IPPARACFG_V40(); // IP设备参数

$bGetParam = $pSDK->NET_DVR_GetDVRConfig($pUserID, NET_DVR_GET_IPPARACFG_V40, '0', $lpDeviceInfo); // 获取IP设备参数

if (!$bGetParam) {

echo "获取IP设备参数失败!<br>";

$error = $pSDK->NET_DVR_GetLastError();

echo $error;

$pSDK->NET_DVR_Logout($pUserID);

exit;

}

$lpDeviceInfo->struIPParaCfgV40->dwEnable = 1; // 启用IP设备

$lpDeviceInfo->struIPParaCfgV40->dwIPIndex = 0; // IP设备索引号

$lpDeviceInfo->struIPParaCfgV40->byAnalogChanEnable = 1; // 启用模拟通道

$lpDeviceInfo->struIPParaCfgV40->struIPDevInfo[0].byEnable = 1; // 启用主码流

$lpDeviceInfo->struIPParaCfgV40->struStreamMode[0].byGetStreamType = 1; // 获取主码流

$lpDeviceInfo->struIPParaCfgV40->struStreamMode[0].uGetStream = new NET_DVR_IPCHANINFO(); // 主码流信息

$lpDeviceInfo->struIPParaCfgV40->struStreamMode[0].uGetStream->byAnalogChanEnable = 0; // 不启动模拟通道

$lpDeviceInfo->struIPParaCfgV40->struStreamMode[0].uGetStream->byChannNum = $Channel; // 获取第$Channel通道的码流

$pRealPlayHandle = $pSDK->NET_DVR_RealPlay_V40($pUserID, $lpDeviceInfo, null, null); // 开始实时预览

if ($pRealPlayHandle == false) {

echo "海康SDK预览失败!<br>";

$error = $pSDK->NET_DVR_GetLastError();

echo $error;

$pSDK->NET_DVR_Logout($pUserID);

exit;

}

$pSDK->NET_DVR_Logout($pUserID); // 登出

// 显示预览

echo "<object classid='clsid:9ECD8B7D-4A6E-4aeb-ADDC-390D5D15A200'

codebase='./NVSWebPlugin.cab' id='webViewer' width='100%' height='100%' style='margin:0px;' align='center' name='webViewer' >

<param name='OperatorUserID' value='0' />

<param name='playWnd' value='124' />

<param name='PreviewType' value='0' />

<param name='ToolBar' value='1' />

<param name='StatusBar' value='1' />

<param name='PreviewResolution' value='CIF' />

<param name='IPAddress' value='{$Ip}' />

<param name='ProtocalType' value='1' />

<param name='NVSIP' value='{$Ip}'/>

<param name='Port' value='{$Port}' />

<param name='Channel' value='{$Channel}' />

<param name='UserID' value='$pUserID' />

<param name='Password' value='$Password' />

<param name='RealPlayWnd' value='{$pRealPlayHandle}' />

<param name='supportSsl' value='0'/>

<param name='ShowMsgTip' value='1' />

</object>";

?>

以上是使用海康SDK连接海康摄像头的方法,希望对你有帮助。

调用海康摄像头主要需要使用海康的SDK,下面我将介绍一下使用PHP调用海康摄像头的方法。

首先,我们需要下载海康的SDK并在服务器上安装,之后可以通过调用接口实现连接海康摄像头并获取图像流。

1. 连接SDK

使用SDK之前需要进行初始化设置。可以通过以下代码实现SDK的初始化:

```php

// 加载动态链接库

if (!extension_loaded('HCNetSDK')) {

dl('HCNetSDK.so');

}

// 初始化 SDK

$hsdk = new \COM('hcnetsdk.dll', NULL, CP_UTF8);

$hsdk_init = $hsdk->NET_DVR_Init();

if(!$hsdk_init)

{

die('Failed to initialize the SDK!' . PHP_EOL);

}

// 设置 SDK 日志输出路径

$hsdk->NET_DVR_SetLogToFile(3, '/path/to/logs/');

启动SDK之后,我们需要登录海康摄像头进行授权,获取相关权限。登录授权可以通过以下代码实现:

```php

$login_info = [

'sDeviceAddress' => $device_ip, // 设备IP地址

'wDevicePort' => $device_port, // 设备端口号

'sUserName' => $username, // 登录设备的用户名

'sPassword' => $password // 登录设备的密码

];

$login_result = $hsdk->NET_DVR_Login_V40($login_info, $device_info);

if (!$login_result) {

die('Failed to login the device' . PHP_EOL);

}

在授权成功之后,我们需要打开摄像头进行预览。预览操作可以通过以下代码实现:

```php

$preview_info = [

'lChannel' => 1, // 通道号,一般设为1

'dwStreamType' => 0, // 码流类型,0表示主码流,1表示子码流,2表示第三码流,3表示转封装码流

'dwLinkMode' =>0x80000000, // 连接模式,一般为0x80000000

'hPlayWnd' => 0 // 播放窗口句柄,一般为0

];

$preview = $hsdk->NET_DVR_RealPlay_V40((int)$login_result, $preview_info);

if ($preview === false) {

die('Failed to preview the stream' . PHP_EOL);

}

2. 获取图像流

获取图像流有多种方式,可以通过SDK提供的接口方法实现,下面介绍几种常见的获取图像流的方式。

方法一:通过HTTP请求获取实时视频流

首先,我们需要设置海康摄像头的IP地址、用户名和密码:

```php

define('IP', 'xx.xx.xx.xx'); // 摄像头IP地址

define('USER', 'admin'); // 登录名

define('PASSWORD', 'password'); // 登录密码

接下来,我们需要获取会话ID:

```php

$url = sprintf('http://%s/ISAPI/Streaming/channels/101', IP);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_USERPWD, USER . ':' . PASSWORD);

$response = curl_exec($ch);

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($http_code !== 200) {

die('Failed to get the video stream' . PHP_EOL);

}

preg_match('/SessionID=(\d+)/i', $response, $matches);

if (!isset($matches[1])) {

die('Failed to get the session ID' . PHP_EOL);

}

$sid = $matches[1];

接下来,我们需要不断地请求获取视频流数据:

```php

$stream_server = "192.168.1.1"; // 海康摄像头所在的服务器地址

$url = sprintf('http://%s:%d/ISAPI/Streaming/channels/%d',

$stream_server, 80, 101);

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_USERPWD, USER . ':' . PASSWORD);

curl_setopt($ch, CURLOPT_HTTPHEADER, [

'Connection: keep-alive',

'SessionID: ' . $sid

]);

while (true) {

echo curl_exec($ch);

}

方法二:通过RTSP协议获取实时视频流

另一种方法是通过RTSP协议获取视频流。具体实现可以参考以下代码:

```php

$rtsp_url = sprintf("rtsp://%s:%d/h264/ch%d/main/av_stream",

$device_ip, $device_port, $channel_number);

$fp = @fopen($rtsp_url, 'rb', false, $context);

if (!$fp) {

die('Failed to connect the RTSP server' . PHP_EOL);

}

while(!feof($fp)) {

echo fread($fp, 100000);

}

3. 断开连接

最后,我们需要在使用完毕后断开与设备的连接。这可以通过以下代码实现:

```php

$hsdk->NET_DVR_StopRealPlay($preview);

$hsdk->NET_DVR_Logout_V30($login_result);

$hsdk->NET_DVR_Cleanup();

以上就是通过PHP调用海康摄像头的基本过程,你可以根据实际需求进行适当修改。