kuroneko-san/php-onvif

PHP Onvif 库,用于连接 Onvif 设备

dev-master 2020-03-25 09:15 UTC

This package is not auto-updated.

Last update: 2024-09-23 15:46:09 UTC


README

基于https://github.com/ltoscano/ponvif的分支,增加了 WS-Discovery 实现和一些代码修正。

ONVIF PHP 实现

此软件模块可以使用 ONVIF 协议(HTTP SOAP 请求)控制网络视频设备,并通过 UDP 多播扫描支持的网络设备。

使用方法

发现

<?php

require 'class.ponvif.php';

$onvif = new Ponvif();
$result = $onvif->discover();

var_dump($result);

示例结果(海康威视和 Dahua IP 网络摄像头)

array (size=2)
  0 => 
    array (size=6)
      'EndpointReference' => 
        array (size=1)
          'Address' => string 'urn:uuid:2925be82-4d50-11b4-82c8-c42f905c18f8' (length=45)
      'Types' => string 'dn:NetworkVideoTransmitter tds:Device' (length=37)
      'Scopes' => string 'onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/hardware/RVi-IPC11S onvif://www.onvif.org/name/RVi-IPC11S onvif://www.onvif.org/location/' (length=233)
      'XAddrs' => string 'http://192.168.1.205/onvif/device_service http://[fe80::c62f:90ff:fe5c:18f8]/onvif/device_service' (length=97)
      'MetadataVersion' => string '10' (length=2)
      'IPAddr' => string '192.168.1.205' (length=13)
  1 => 
    array (size=6)
      'EndpointReference' => 
        array (size=1)
          'Address' => string 'uuid:2e15cbab-9b44-4074-836d-0bccd8632b3f' (length=41)
      'Types' => string 'dn:NetworkVideoTransmitter' (length=26)
      'Scopes' => string 'onvif://www.onvif.org/location/country/Russia onvif://www.onvif.org/name/RVi onvif://www.onvif.org/hardware/RVi-IPC33M onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/type/Network_Video_Transmitter onvif://www.onvif.org/extension/unique_identifier' (length=261)
      'XAddrs' => string 'http://192.168.1.201/onvif/device_service' (length=41)
      'MetadataVersion' => string '1' (length=1)
      'IPAddr' => string '192.168.1.201' (length=13)

发现选项

setDiscoveryTimeout(5) - 设备响应超时;默认 "2"

setDiscoveryBindIp('192.168.1.5') - 选择用于发现请求的以太网卡;默认 "0.0.0.0"

setDiscoveryHideDuplicates(false) - 禁用重复过滤(某些设备可能发送多个响应);默认 "true"

获取媒体流

<?php

require 'class.ponvif.php';

$onvif = new Ponvif();
$onvif->setUsername('admin');
$onvif->setPassword('password');
$onvif->setIPAddress('192.168.1.108');

// In some cases you need to set MediaUrl manually. You can find it in "XAddrs" key (see above).
// $onvif->setMediaUri('http://192.168.1.108:3388/onvif/device_service');

try
{
	$onvif->initialize();
	
	$sources = $onvif->getSources();
	$profileToken = $sources[0][0]['profiletoken'];
	$mediaUri = $onvif->media_GetStreamUri($profileToken);
	
	var_dump($mediaUri);
}
catch(Exception $e)
{
	
}

等等...

  • 获取系统日期
  • 获取系统功能
  • 获取视频源
  • 获取现有配置文件
  • 获取可用的服务
  • 获取设备信息
  • 获取流 URI
  • 获取从摄像头抓取快照的 URI
  • 获取可用的预设
  • 获取给定节点的信息
  • 转到指定的预设
  • 删除指定的预设
  • 设置指定的预设
  • 执行相对移动
  • 执行相对移动和缩放
  • 执行绝对移动
  • 开始连续移动
  • 开始连续移动和缩放
  • 停止移动