diff --git a/.travis.yml b/.travis.yml index b085414b5..7a51c271c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -41,6 +41,7 @@ env: - SMPFLAGS=-j4 OS=ubuntu DIST=bionic DOCKER_REPO=iconzm/packpack - SMPFLAGS=-j4 OS=ubuntu DIST=disco DOCKER_REPO=iconzm/packpack - SMPFLAGS=-j4 OS=ubuntu DIST=eoan DOCKER_REPO=iconzm/packpack + - SMPFLAGS=-j4 OS=ubuntu DIST=focal DOCKER_REPO=iconzm/packpack - SMPFLAGS=-j4 OS=debian DIST=jessie DOCKER_REPO=iconzm/packpack - SMPFLAGS=-j4 OS=debian DIST=stretch DOCKER_REPO=iconzm/packpack - SMPFLAGS=-j4 OS=debian DIST=buster DOCKER_REPO=iconzm/packpack diff --git a/CMakeLists.txt b/CMakeLists.txt index c34ac350c..022c5710e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -914,11 +914,7 @@ add_subdirectory(scripts) add_subdirectory(db) add_subdirectory(web) add_subdirectory(misc) - -# Enable ONVIF support -if(ZM_ONVIF) - add_subdirectory(onvif) -endif(ZM_ONVIF) +add_subdirectory(onvif) # Process distro subdirectories if((ZM_TARGET_DISTRO MATCHES "^el") OR (ZM_TARGET_DISTRO MATCHES "^fc")) diff --git a/README.md b/README.md index e1ed37087..ab946c04c 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ properly and are documented. * Report issues/questions/feature requests on [GitHub Issues](https://github.com/ZoneMinder/ZoneMinder/issues) Pull requests are very welcome! If you would like to contribute, please follow -the following steps. +the following steps. While step 3 is optional, it is preferred. 1. Fork the repo 2. Open an issue at our [GitHub Issues Tracker](https://github.com/ZoneMinder/ZoneMinder/issues). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..c3b4c7211 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,18 @@ +# Security Policy + +## Supported Versions + +Time and computers move on. We do not have the resources to support every ancient version of everything +(unless you'd like to pay us to do so.) We ONLY support the latest stable release and development releases. + +| Version | Supported | +| ------- | ------------------ | +| 1.34.x | :white_check_mark: | +| 1.35.x | :white_check_mark: | +| < 1.34.x | :x: | + +## Reporting a Vulnerability + +Since sometimes security vulnerabilities can be sensitive, you can just email me at isaac@zoneminder.com. +If it's not such a big deal, by all means, create an issue here on github + diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index 6d3963fc5..ec9bb10a7 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -446,6 +446,10 @@ CREATE TABLE `Monitors` ( `Enabled` tinyint(3) unsigned NOT NULL default '1', `LinkedMonitors` varchar(255), `Triggers` set('X10') NOT NULL default '', + `ONVIF_URL` VARCHAR(255) NOT NULL DEFAULT '', + `ONVIF_Username` VARCHAR(64) NOT NULL DEFAULT '', + `ONVIF_Password` VARCHAR(64) NOT NULL DEFAULT '', + `ONVIF_Options` VARCHAR(64) NOT NULL DEFAULT '', `Device` tinytext NOT NULL default '', `Channel` tinyint(3) unsigned NOT NULL default '0', `Format` int(10) unsigned NOT NULL default '0', diff --git a/db/zm_update-1.27.99.0.sql b/db/zm_update-1.27.99.0.sql deleted file mode 100644 index 5b5e495b6..000000000 --- a/db/zm_update-1.27.99.0.sql +++ /dev/null @@ -1,206 +0,0 @@ --- --- This updates a 1.27.0 database to 1.27.1 --- - --- --- Add Controls definition for Wanscam --- -INSERT INTO Controls -SELECT * FROM (SELECT NULL as Id, - 'WanscamPT' as Name, - 'Remote' as Type, - 'Wanscam' as Protocol, - 1 as CanWake, - 1 as CanSleep, - 1 as CanReset, - 0 as CanZoom, - 0 as CanAutoZoom, - 0 as CanZoomAbs, - 0 as CanZoomRel, - 0 as CanZoomCon, - 0 as MinZoomRange, - 0 as MaxZoomRange, - 0 as MinZoomStep, - 0 as MaxZoomStep, - 0 as HasZoomSpeed, - 0 as MinZoomSpeed, - 0 as MaxZoomSpeed, - 0 as CanFocus, - 0 as CanAutoFocus, - 0 as CanFocusAbs, - 0 as CanFocusRel, - 0 as CanFocusCon, - 0 as MinFocusRange, - 0 as MaxFocusRange, - 0 as MinFocusStep, - 0 as MaxFocusStep, - 0 as HasFocusSpeed, - 0 as MinFocusSpeed, - 0 as MaxFocusSpeed, - 1 as CanIris, - 0 as CanAutoIris, - 1 as CanIrisAbs, - 0 as CanIrisRel, - 0 as CanIrisCon, - 0 as MinIrisRange, - 16 as MaxIrisRange, - 0 as MinIrisStep, - 0 as MaxIrisStep, - 0 as HasIrisSpeed, - 0 as MinIrisSpeed, - 0 as MaxIrisSpeed, - 0 as CanGain, - 0 as CanAutoGain, - 0 as CanGainAbs, - 0 as CanGainRel, - 0 as CanGainCon, - 0 as MinGainRange, - 0 as MaxGainRange, - 0 as MinGainStep, - 0 as MaxGainStep, - 0 as HasGainSpeed, - 0 as MinGainSpeed, - 0 as MaxGainSpeed, - 1 as CanWhite, - 0 as CanAutoWhite, - 1 as CanWhiteAbs, - 0 as CanWhiteRel, - 0 as CanWhiteCon, - 0 as MinWhiteRange, - 16 as MaxWhiteRange, - 0 as MinWhiteStep, - 0 as MaxWhiteStep, - 0 as HasWhiteSpeed, - 0 as MinWhiteSpeed, - 0 as MaxWhiteSpeed, - 1 as HasPresets, - 16 as NumPresets, - 1 as HasHomePreset, - 1 as CanSetPresets, - 1 as CanMove, - 1 as CanMoveDiag, - 0 as CanMoveMap, - 0 as CanMoveAbs, - 0 as CanMoveRel, - 1 as CanMoveCon, - 1 as CanPan, - 0 as MinPanRange, - 0 as MaxPanRange, - 0 as MinPanStep, - 0 as MaxPanStep, - 0 as HasPanSpeed, - 0 as MinPanSpeed, - 0 as MaxPanSpeed, - 0 as HasTurboPan, - 0 as TurboPanSpeed, - 1 as CanTilt, - 0 as MinTiltRange, - 0 as MaxTiltRange, - 0 as MinTiltStep, - 0 as MaxTiltStep, - 0 as HasTiltSpeed, - 0 as MinTiltSpeed, - 0 as MaxTiltSpeed, - 0 as HasTurboTilt, - 0 as TurboTiltSpeed, - 0 as CanAutoScan, - 0 as NumScanPaths) AS tmp -WHERE NOT EXISTS ( - SELECT Name FROM Controls WHERE name = 'WanscamPT' -) LIMIT 1; - --- Add extend alarm frame count to zone definition and Presets -SET @s = (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Zones' - AND table_schema = DATABASE() - AND column_name = 'ExtendAlarmFrames' - ) > 0, -"SELECT 'Column ExtendAlarmFrames exists in Zones'", -"ALTER TABLE `Zones` ADD `ExtendAlarmFrames` smallint(5) unsigned not null default 0 AFTER `OverloadFrames`" -)); - -PREPARE stmt FROM @s; -EXECUTE stmt; - -SET @s = (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'ZonePresets' - AND table_schema = DATABASE() - AND column_name = 'ExtendAlarmFrames' - ) > 0, -"SELECT 'Column ExtendAlarmFrames exists in ZonePresets'", -"ALTER TABLE `ZonePresets` ADD `ExtendAlarmFrames` smallint(5) unsigned not null default 0 AFTER `OverloadFrames`" -)); - -PREPARE stmt FROM @s; -EXECUTE stmt; - --- --- Add MotionSkipFrame field for controlling how many frames motion detection should skip. --- - -SET @s = (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Monitors' - AND table_schema = DATABASE() - AND column_name = 'MotionFrameSkip' - ) > 0, -"SELECT 1", -"ALTER TABLE `Monitors` ADD `MotionFrameSkip` smallint(5) unsigned NOT NULL default '0' AFTER `FrameSkip`" -)); - -PREPARE stmt FROM @s; -EXECUTE stmt; - --- --- Add Monitor Options field; used for specifying Ffmpeg AVoptions like rtsp_transport http or libVLC options --- -SET @s = (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Monitors' - AND table_schema = DATABASE() - AND column_name = 'Options' - ) > 0, -"SELECT 'Column Options already exists in Monitors'", -"ALTER TABLE `Monitors` ADD `Options` varchar(255) not null default '' AFTER `Path`" -)); - -PREPARE stmt FROM @s; -EXECUTE stmt; - --- --- Add V4LMultiBuffer and V4LCapturesPerFrame to Monitor --- - -SET @s = (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Monitors' - AND table_schema = DATABASE() - AND column_name = 'V4LMultiBuffer' - ) > 0, -"SELECT 'Column V4LMultiBuffer exists in Monitors'", -"ALTER TABLE `Monitors` ADD `V4LMultiBuffer` tinyint(1) unsigned AFTER `Format`" -)); - -PREPARE stmt FROM @s; -EXECUTE stmt; - -SET @s = (SELECT IF( - (SELECT COUNT(*) - FROM INFORMATION_SCHEMA.COLUMNS - WHERE table_name = 'Monitors' - AND table_schema = DATABASE() - AND column_name = 'V4LCapturesPerFrame' - ) > 0, -"SELECT 'Column V4LCapturesPerFrame exists in Monitors'", -"ALTER TABLE `Monitors` ADD `V4LCapturesPerFrame` tinyint(3) unsigned AFTER `V4LMultiBuffer`" -)); - -PREPARE stmt FROM @s; -EXECUTE stmt; diff --git a/db/zm_update-1.35.3.sql b/db/zm_update-1.35.3.sql index 940f334d5..23f24dd3d 100644 --- a/db/zm_update-1.35.3.sql +++ b/db/zm_update-1.35.3.sql @@ -1,12 +1,2 @@ - -SET @s = (SELECT IF( - (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE() - AND table_name = 'Filters' - AND column_name = 'UserId' - ) > 0, -"SELECT 'Column UserId already exists in Filters'", -"ALTER TABLE `Filters` ADD `UserId` int(10) unsigned AFTER `Name`" -)); - -PREPARE stmt FROM @s; -EXECUTE stmt; +SELECT 'ALTERING Frames.Id to a BIGINT. This could take a long time.'; +ALTER TABLE Frames MODIFY Id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT; diff --git a/db/zm_update-1.35.4.sql b/db/zm_update-1.35.4.sql new file mode 100644 index 000000000..44d195224 --- /dev/null +++ b/db/zm_update-1.35.4.sql @@ -0,0 +1,60 @@ +-- +-- This update adds ONVIF features +-- + +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'ONVIF_URL' + ) > 0, +"SELECT 'Column ONVIF_URL already exists in Monitors'", +"ALTER TABLE `Monitors` ADD COLUMN `ONVIF_URL` VARCHAR(255) NOT NULL DEFAULT '' AFTER `Triggers`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'ONVIF_Username' + ) > 0, +"SELECT 'Column ONVIF_Username already exists in Monitors'", +"ALTER TABLE `Monitors` ADD COLUMN `ONVIF_Username` VARCHAR(64) NOT NULL DEFAULT '' AFTER `ONVIF_URL`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'ONVIF_Password' + ) > 0, +"SELECT 'Column ONVIF_Password already exists in Monitors'", +"ALTER TABLE `Monitors` ADD COLUMN `ONVIF_Password` VARCHAR(64) NOT NULL DEFAULT '' AFTER `ONVIF_Username`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'Monitors' + AND table_schema = DATABASE() + AND column_name = 'ONVIF_Options' + ) > 0, +"SELECT 'Column ONVIF_Options already exists in Monitors'", +"ALTER TABLE `Monitors` ADD COLUMN `ONVIF_Options` VARCHAR(64) NOT NULL DEFAULT '' AFTER `ONVIF_Password`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + diff --git a/db/zm_update-1.35.5.sql b/db/zm_update-1.35.5.sql new file mode 100644 index 000000000..5507fcbfa --- /dev/null +++ b/db/zm_update-1.35.5.sql @@ -0,0 +1,11 @@ +SET @s = (SELECT IF( + (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE() + AND table_name = 'Filters' + AND column_name = 'UserId' + ) > 0, +"SELECT 'Column UserId already exists in Filters'", +"ALTER TABLE `Filters` ADD `UserId` int(10) unsigned AFTER `Name`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; diff --git a/distros/debian/changelog b/distros/debian/changelog index 46f1e2bd9..72841f158 100644 --- a/distros/debian/changelog +++ b/distros/debian/changelog @@ -40,7 +40,7 @@ zoneminder (1.27.99+1-testing-SNAPSHOT2014072901) testing; urgency=medium -- Isaac Connor Tue, 29 Jul 2014 14:50:20 -0400 -zoneminder (1.27.0+1-testing-v4ltomonitor-1) testing; urgency=high +zoneminder (1.27.0+1-trusty-v4ltomonitor-1) trusty; urgency=high * Snapshot release - diff --git a/distros/redhat/zoneminder.spec b/distros/redhat/zoneminder.spec index 923e0c068..5776f3adc 100644 --- a/distros/redhat/zoneminder.spec +++ b/distros/redhat/zoneminder.spec @@ -28,7 +28,7 @@ %global _hardened_build 1 Name: zoneminder -Version: 1.35.2 +Version: 1.35.4 Release: 1%{?dist} Summary: A camera monitoring and analysis tool Group: System Environment/Daemons diff --git a/distros/ubuntu1604/zoneminder.postinst b/distros/ubuntu1604/zoneminder.postinst index d3983950b..7b7af708b 100644 --- a/distros/ubuntu1604/zoneminder.postinst +++ b/distros/ubuntu1604/zoneminder.postinst @@ -19,6 +19,10 @@ if [ "$1" = "configure" ]; then echo "The cgi module is not enabled in apache2. I am enabling it using a2enmod cgi." a2enmod cgi fi + if [ ! -e "/etc/apache2/mods-enabled/rewrite.load" ] && [ "$(command -v a2enmod)" != "" ]; then + echo "The rewrite module is not enabled in apache2. I am enabling it using a2enmod rewrite." + a2enmod rewrite + fi if [ "$ZM_DB_HOST" = "localhost" ]; then @@ -61,11 +65,10 @@ if [ "$1" = "configure" ]; then exit 1; fi # This creates the user. - echo "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on ${ZM_DB_NAME}.* to '${ZM_DB_USER}'@localhost identified by \"${ZM_DB_PASS}\";" | mysql --defaults-file=/etc/mysql/debian.cnf mysql - else - echo "Updating permissions" - echo "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on ${ZM_DB_NAME}.* to '${ZM_DB_USER}'@localhost;" | mysql --defaults-file=/etc/mysql/debian.cnf mysql + echo "CREATE USER '${ZM_DB_USER}'@localhost IDENTIFIED BY '${ZM_DB_PASS}';" | mysql --defaults-file=/etc/mysql/debian.cnf mysql fi + echo "Updating permissions" + echo "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on ${ZM_DB_NAME}.* to '${ZM_DB_USER}'@localhost;" | mysql --defaults-file=/etc/mysql/debian.cnf mysql zmupdate.pl --nointeractive zmupdate.pl --nointeractive -f diff --git a/distros/ubuntu2004/control b/distros/ubuntu2004/control index 4e7c53503..7304d34fb 100644 --- a/distros/ubuntu2004/control +++ b/distros/ubuntu2004/control @@ -46,7 +46,7 @@ Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends} ,javascript-common ,libmp4v2-2, libx264-155 ,libswscale5 - ,libswresample4 + ,libswresample3 ,ffmpeg ,libdate-manip-perl, libmime-lite-perl, libmime-tools-perl ,libdbd-mysql-perl diff --git a/distros/ubuntu2004/zoneminder.postinst b/distros/ubuntu2004/zoneminder.postinst index d3983950b..a7f8f3131 100644 --- a/distros/ubuntu2004/zoneminder.postinst +++ b/distros/ubuntu2004/zoneminder.postinst @@ -61,11 +61,10 @@ if [ "$1" = "configure" ]; then exit 1; fi # This creates the user. - echo "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on ${ZM_DB_NAME}.* to '${ZM_DB_USER}'@localhost identified by \"${ZM_DB_PASS}\";" | mysql --defaults-file=/etc/mysql/debian.cnf mysql - else - echo "Updating permissions" - echo "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on ${ZM_DB_NAME}.* to '${ZM_DB_USER}'@localhost;" | mysql --defaults-file=/etc/mysql/debian.cnf mysql + echo "CREATE USER '${ZM_DB_USER}'@localhost IDENTIFIED BY '${ZM_DB_PASS}';" | mysql --defaults-file=/etc/mysql/debian.cnf mysql fi + echo "Updating permissions" + echo "grant lock tables,alter,drop,select,insert,update,delete,create,index,alter routine,create routine, trigger,execute on ${ZM_DB_NAME}.* to '${ZM_DB_USER}'@localhost;" | mysql --defaults-file=/etc/mysql/debian.cnf mysql zmupdate.pl --nointeractive zmupdate.pl --nointeractive -f diff --git a/onvif/modules/MYMETA.json b/onvif/modules/MYMETA.json new file mode 100644 index 000000000..cab2ae939 --- /dev/null +++ b/onvif/modules/MYMETA.json @@ -0,0 +1,40 @@ +{ + "abstract" : "unknown", + "author" : [ + "Jan Hochstein" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : 2 + }, + "name" : "ONVIF", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "", + "x_serialization_backend" : "JSON::PP version 4.02" +} diff --git a/onvif/modules/MYMETA.yml b/onvif/modules/MYMETA.yml new file mode 100644 index 000000000..ea47256fc --- /dev/null +++ b/onvif/modules/MYMETA.yml @@ -0,0 +1,22 @@ +--- +abstract: unknown +author: + - 'Jan Hochstein' +build_requires: + ExtUtils::MakeMaker: '0' +configure_requires: + ExtUtils::MakeMaker: '0' +dynamic_config: 0 +generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010' +license: unknown +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: '1.4' +name: ONVIF +no_index: + directory: + - t + - inc +requires: {} +version: '' +x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/onvif/modules/lib/ONVIF/Client.pm b/onvif/modules/lib/ONVIF/Client.pm index 9676dff85..c7ce21092 100644 --- a/onvif/modules/lib/ONVIF/Client.pm +++ b/onvif/modules/lib/ONVIF/Client.pm @@ -44,6 +44,10 @@ require ONVIF::Deserializer::XSD; require ONVIF::Device::Interfaces::Device::DevicePort; require ONVIF::Media::Interfaces::Media::MediaPort; require ONVIF::PTZ::Interfaces::PTZ::PTZPort; +require ONVIF::Analytics::Interfaces::Analytics::AnalyticsEnginePort; +require ONVIF::Analytics::Interfaces::Analytics::RuleEnginePort; + +require WSNotification::Interfaces::WSBaseNotificationSender::NotificationProducerPort; use Data::Dump qw(dump); @@ -70,6 +74,7 @@ my %services_of :ATTR(:default<{}>); my %serializer_of :ATTR(); my %soap_version_of :ATTR(:default<('1.1')>); +my $verbose; # ========================================================================= # private methods @@ -117,25 +122,27 @@ sub get_service_urls { } ); if ( $result ) { + print "Have results from GetServices\n" if $verbose; foreach my $svc ( @{ $result->get_Service() } ) { my $short_name = $namespace_map{$svc->get_Namespace()}; my $url_svc = $svc->get_XAddr()->get_value(); if ( defined $short_name && defined $url_svc ) { - #print "Got $short_name service\n"; + print "Got $short_name service $url_svc\n" if $verbose; $self->set_service($short_name, 'url', $url_svc); } } - #} else { - #print "No results from GetServices: $result\n"; + } else { + print "No results from GetServices\n" if $verbose; } # Some devices do not support getServices, so we have to try getCapabilities $result = $self->service('device', 'ep')->GetCapabilities( {}, , ); if ( !$result ) { - print "No results from GetCapabilities: $result\n"; + print "No results from GetCapabilities: $result\n" if $verbose; return; } + print "Have results from GetCapabilities: $result\n" if $verbose; # Result is a GetCapabilitiesResponse foreach my $capabilities ( @{ $result->get_Capabilities() } ) { foreach my $capability ( 'PTZ', 'Media', 'Imaging', 'Events', 'Device' ) { @@ -156,7 +163,6 @@ sub get_service_urls { } } else { print "No $capability function\n"; - } # end if has a get_ function } # end foreach capability } # end foreach capabilities @@ -185,9 +191,10 @@ sub http_digest { sub BUILD { my ($self, $ident, $args_ref) = @_; - my $url_svc_device = $args_ref->{'url_svc_device'}; - my $soap_version = $args_ref->{'soap_version'}; - if(! $soap_version) { + $verbose = $args_ref->{verbose}; + my $url_svc_device = $args_ref->{url_svc_device}; + my $soap_version = $args_ref->{soap_version}; + if ( !$soap_version ) { $soap_version = '1.1'; } $self->set_soap_version($soap_version); @@ -240,7 +247,7 @@ sub set_credentials { # TODO: snyc device and client time - if ($create_if_not_exists) { + if ( $create_if_not_exists ) { # If GetUsers() is ok but empty then CreateUsers() # if(not get_users()) { # create_user($username, $password); @@ -276,7 +283,26 @@ sub create_services { # transport => $transport })); } -} + if ( defined $self->service('events', 'url') ) { + $self->set_service('events', 'ep', WSNotification::Interfaces::WSBaseNotificationSender::NotificationProducerPort->new({ + proxy => $self->service('events', 'url'), + serializer => $self->serializer(), +# transport => $transport + })); + } + if ( defined $self->service('analytics', 'url') ) { + $self->set_service('analytics', 'ep', ONVIF::Analytics::Interfaces::Analytics::AnalyticsEnginePort->new({ + proxy => $self->service('analytics', 'url'), + serializer => $self->serializer(), +# transport => $transport + })); + $self->set_service('rules', 'ep', ONVIF::Analytics::Interfaces::Analytics::RuleEnginePort->new({ + proxy => $self->service('analytics', 'url'), + serializer => $self->serializer(), +# transport => $transport + })); + } +} # end sub create_services sub get_endpoint { my ($self, $serviceType) = @_; diff --git a/onvif/modules/lib/ONVIF/Deserializer/XSD.pm b/onvif/modules/lib/ONVIF/Deserializer/XSD.pm index 215a3cb4d..e74129425 100644 --- a/onvif/modules/lib/ONVIF/Deserializer/XSD.pm +++ b/onvif/modules/lib/ONVIF/Deserializer/XSD.pm @@ -33,16 +33,15 @@ use ONVIF::Deserializer::MessageParser; use SOAP::WSDL::Factory::Deserializer; -SOAP::WSDL::Factory::Deserializer->register('1.1', __PACKAGE__ ); -SOAP::WSDL::Factory::Deserializer->register('1.2', __PACKAGE__ ); +SOAP::WSDL::Factory::Deserializer->register('1.1', __PACKAGE__); +SOAP::WSDL::Factory::Deserializer->register('1.2', __PACKAGE__); ## we get the soap version from the message parser my %soap_version_of :ATTR( :default<()>); - sub soap_version { my ($self) = @_; - if($SOAP::WSDL::Deserializer::XSD::parser_of{ident $self}) { + if ( $SOAP::WSDL::Deserializer::XSD::parser_of{ident $self} ) { return $SOAP::WSDL::Deserializer::XSD::parser_of{ident $self}->soap_version(); } return ''; @@ -52,7 +51,7 @@ sub deserialize { my ($self, $content) = @_; my $parser = $SOAP::WSDL::Deserializer::XSD::parser_of{ ${ $self } }; - if(not $parser) { + if ( not $parser ) { $parser = ONVIF::Deserializer::MessageParser->new({ strict => $SOAP::WSDL::Deserializer::XSD::strict_of{ ${ $self } } }); @@ -61,8 +60,8 @@ sub deserialize { $parser->class_resolver( $self->SOAP::WSDL::Deserializer::XSD::get_class_resolver() ); - eval { $parser->parse_string( $content ) }; - if ($@) { + eval { $parser->parse_string($content) }; + if ( $@ ) { return $self->generate_fault({ code => 'SOAP-ENV:Server', role => 'urn:localhost', @@ -79,12 +78,9 @@ sub generate_fault { return SOAP::WSDL::SOAP::Typelib::Fault11->new({ faultcode => $args_from_ref->{ code } || 'SOAP-ENV:Client', faultactor => $args_from_ref->{ role } || 'urn:localhost', - faultstring => $args_from_ref->{ message } || "Unknown error" + faultstring => $args_from_ref->{ message } || 'Unknown error' }); } 1; - __END__ - - diff --git a/onvif/modules/pm_to_blib b/onvif/modules/pm_to_blib new file mode 100644 index 000000000..e69de29bb diff --git a/onvif/proxy/MYMETA.json b/onvif/proxy/MYMETA.json new file mode 100644 index 000000000..cab2ae939 --- /dev/null +++ b/onvif/proxy/MYMETA.json @@ -0,0 +1,40 @@ +{ + "abstract" : "unknown", + "author" : [ + "Jan Hochstein" + ], + "dynamic_config" : 0, + "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010", + "license" : [ + "unknown" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : 2 + }, + "name" : "ONVIF", + "no_index" : { + "directory" : [ + "t", + "inc" + ] + }, + "prereqs" : { + "build" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "0" + } + }, + "runtime" : { + "requires" : {} + } + }, + "release_status" : "stable", + "version" : "", + "x_serialization_backend" : "JSON::PP version 4.02" +} diff --git a/onvif/proxy/MYMETA.yml b/onvif/proxy/MYMETA.yml new file mode 100644 index 000000000..ea47256fc --- /dev/null +++ b/onvif/proxy/MYMETA.yml @@ -0,0 +1,22 @@ +--- +abstract: unknown +author: + - 'Jan Hochstein' +build_requires: + ExtUtils::MakeMaker: '0' +configure_requires: + ExtUtils::MakeMaker: '0' +dynamic_config: 0 +generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010' +license: unknown +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: '1.4' +name: ONVIF +no_index: + directory: + - t + - inc +requires: {} +version: '' +x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm b/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm index ecb985b30..2591a6010 100644 --- a/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm +++ b/onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm @@ -7,1997 +7,1965 @@ use base qw(SOAP::WSDL::Client::Base); # only load if it hasn't been loaded before require ONVIF::Media::Typemaps::Media - if not ONVIF::Media::Typemaps::Media->can('get_class'); +if not ONVIF::Media::Typemaps::Media->can('get_class'); sub START { - $_[0]->set_proxy('http://www.examples.com/Media/') if not $_[2]->{proxy}; - $_[0]->set_class_resolver('ONVIF::Media::Typemaps::Media') - if not $_[2]->{class_resolver}; + $_[0]->set_proxy('http://www.examples.com/Media/') if not $_[2]->{proxy}; + $_[0]->set_class_resolver('ONVIF::Media::Typemaps::Media') + if not $_[2]->{class_resolver}; - $_[0]->set_prefix($_[2]->{use_prefix}) if exists $_[2]->{use_prefix}; + $_[0]->set_prefix($_[2]->{use_prefix}) if exists $_[2]->{use_prefix}; } sub GetServiceCapabilities { - my ($self, $body, $header) = @_; - die "GetServiceCapabilities must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetServiceCapabilities', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetServiceCapabilities', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetServiceCapabilities must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetServiceCapabilities', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetServiceCapabilities', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetServiceCapabilities )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetServiceCapabilities )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoSources { - my ($self, $body, $header) = @_; - die "GetVideoSources must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoSources', - soap_action => 'http://www.onvif.org/ver10/media/wsdlGetVideoSources/', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoSources must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoSources', + soap_action => 'http://www.onvif.org/ver10/media/wsdlGetVideoSources/', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoSources )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoSources )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioSources { - my ($self, $body, $header) = @_; - die "GetAudioSources must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioSources', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioSources', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioSources must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioSources', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioSources', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioSources )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioSources )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } - sub GetAudioOutputs { - my ($self, $body, $header) = @_; - die "GetAudioOutputs must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioOutputs', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputs', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioOutputs must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioOutputs', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputs', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioOutputs )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioOutputs )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } - sub CreateProfile { - my ($self, $body, $header) = @_; - die "CreateProfile must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'CreateProfile', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/CreateProfile', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "CreateProfile must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'CreateProfile', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/CreateProfile', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::CreateProfile )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::CreateProfile )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetProfile { - my ($self, $body, $header) = @_; - die "GetProfile must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetProfile', - soap_action => 'http://www.onvif.org/ver10/media/wsdlGetProfile/', - style => 'document', - body => { - - - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetProfile )], - }, - header => { - - }, - headerfault => { - - } + my ($self, $body, $header) = @_; + die "GetProfile must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetProfile', + soap_action => 'http://www.onvif.org/ver10/media/wsdlGetProfile/', + style => 'document', + body => { + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetProfile )], + }, + header => { + }, + headerfault => { + } }, $body, $header); } - sub GetProfiles { - my ($self, $body, $header) = @_; - die "GetProfiles must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetProfiles', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetProfiles', - style => 'document', - body => { - - - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetProfiles )], - }, - header => { - - }, - headerfault => { - - } + my ($self, $body, $header) = @_; + die "GetProfiles must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetProfiles', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetProfiles', + style => 'document', + body => { + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetProfiles )], + }, + header => { + }, + headerfault => { + } }, $body, $header); } sub AddVideoEncoderConfiguration { - my ($self, $body, $header) = @_; - die "AddVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddVideoEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddVideoEncoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "AddVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddVideoEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddVideoEncoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddVideoEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddVideoEncoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub AddVideoSourceConfiguration { - my ($self, $body, $header) = @_; - die "AddVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddVideoSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddVideoSourceConfiguration', - style => 'document', - body => { - - - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddVideoSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + my ($self, $body, $header) = @_; + die "AddVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddVideoSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddVideoSourceConfiguration', + style => 'document', + body => { + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddVideoSourceConfiguration )], + }, + header => { + }, + headerfault => { + } }, $body, $header); } - sub AddAudioEncoderConfiguration { - my ($self, $body, $header) = @_; - die "AddAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddAudioEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioEncoderConfiguration', - style => 'document', - body => { - - - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddAudioEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + my ($self, $body, $header) = @_; + die "AddAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddAudioEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioEncoderConfiguration', + style => 'document', + body => { + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddAudioEncoderConfiguration )], + }, + header => { + }, + headerfault => { + } }, $body, $header); } sub AddAudioSourceConfiguration { - my ($self, $body, $header) = @_; - die "AddAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddAudioSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioSourceConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "AddAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddAudioSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioSourceConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddAudioSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddAudioSourceConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub AddPTZConfiguration { - my ($self, $body, $header) = @_; - die "AddPTZConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddPTZConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddPTZConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "AddPTZConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddPTZConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddPTZConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddPTZConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddPTZConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub AddVideoAnalyticsConfiguration { - my ($self, $body, $header) = @_; - die "AddVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddVideoAnalyticsConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddVideoAnalyticsConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "AddVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddVideoAnalyticsConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddVideoAnalyticsConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddVideoAnalyticsConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddVideoAnalyticsConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub AddMetadataConfiguration { - my ($self, $body, $header) = @_; - die "AddMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddMetadataConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddMetadataConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "AddMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddMetadataConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddMetadataConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddMetadataConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddMetadataConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub AddAudioOutputConfiguration { - my ($self, $body, $header) = @_; - die "AddAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddAudioOutputConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioOutputConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "AddAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddAudioOutputConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioOutputConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddAudioOutputConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddAudioOutputConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub AddAudioDecoderConfiguration { - my ($self, $body, $header) = @_; - die "AddAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'AddAudioDecoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioDecoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "AddAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'AddAudioDecoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/AddAudioDecoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::AddAudioDecoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::AddAudioDecoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveVideoEncoderConfiguration { - my ($self, $body, $header) = @_; - die "RemoveVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveVideoEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveVideoEncoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveVideoEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveVideoEncoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveVideoEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveVideoEncoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveVideoSourceConfiguration { - my ($self, $body, $header) = @_; - die "RemoveVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveVideoSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveVideoSourceConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveVideoSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveVideoSourceConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveVideoSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveVideoSourceConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveAudioEncoderConfiguration { - my ($self, $body, $header) = @_; - die "RemoveAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveAudioEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioEncoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveAudioEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioEncoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveAudioEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveAudioEncoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveAudioSourceConfiguration { - my ($self, $body, $header) = @_; - die "RemoveAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveAudioSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioSourceConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveAudioSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioSourceConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveAudioSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveAudioSourceConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemovePTZConfiguration { - my ($self, $body, $header) = @_; - die "RemovePTZConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemovePTZConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemovePTZConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemovePTZConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemovePTZConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemovePTZConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemovePTZConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemovePTZConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveVideoAnalyticsConfiguration { - my ($self, $body, $header) = @_; - die "RemoveVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveVideoAnalyticsConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveVideoAnalyticsConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveVideoAnalyticsConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveVideoAnalyticsConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveVideoAnalyticsConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveVideoAnalyticsConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveMetadataConfiguration { - my ($self, $body, $header) = @_; - die "RemoveMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveMetadataConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveMetadataConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveMetadataConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveMetadataConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveMetadataConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveMetadataConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveAudioOutputConfiguration { - my ($self, $body, $header) = @_; - die "RemoveAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveAudioOutputConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioOutputConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveAudioOutputConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioOutputConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveAudioOutputConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveAudioOutputConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub RemoveAudioDecoderConfiguration { - my ($self, $body, $header) = @_; - die "RemoveAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'RemoveAudioDecoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioDecoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "RemoveAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'RemoveAudioDecoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/RemoveAudioDecoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::RemoveAudioDecoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::RemoveAudioDecoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub DeleteProfile { - my ($self, $body, $header) = @_; - die "DeleteProfile must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'DeleteProfile', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/DeleteProfile', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "DeleteProfile must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'DeleteProfile', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/DeleteProfile', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::DeleteProfile )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::DeleteProfile )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoSourceConfigurations { - my ($self, $body, $header) = @_; - die "GetVideoSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoSourceConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoSourceConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoSourceConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoSourceConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoSourceConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoSourceConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoEncoderConfigurations { - my ($self, $body, $header) = @_; - die "GetVideoEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoEncoderConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoEncoderConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoEncoderConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoEncoderConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoEncoderConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoEncoderConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioSourceConfigurations { - my ($self, $body, $header) = @_; - die "GetAudioSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioSourceConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdlGetAudioSourceConfigurations/', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioSourceConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdlGetAudioSourceConfigurations/', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioSourceConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioSourceConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioEncoderConfigurations { - my ($self, $body, $header) = @_; - die "GetAudioEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioEncoderConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioEncoderConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioEncoderConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioEncoderConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioEncoderConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioEncoderConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoAnalyticsConfigurations { - my ($self, $body, $header) = @_; - die "GetVideoAnalyticsConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoAnalyticsConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoAnalyticsConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoAnalyticsConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoAnalyticsConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoAnalyticsConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoAnalyticsConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoAnalyticsConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetMetadataConfigurations { - my ($self, $body, $header) = @_; - die "GetMetadataConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetMetadataConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetMetadataConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetMetadataConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetMetadataConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetMetadataConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetMetadataConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetMetadataConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioOutputConfigurations { - my ($self, $body, $header) = @_; - die "GetAudioOutputConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioOutputConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioOutputConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioOutputConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioOutputConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioOutputConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioDecoderConfigurations { - my ($self, $body, $header) = @_; - die "GetAudioDecoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioDecoderConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioDecoderConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioDecoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioDecoderConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioDecoderConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioDecoderConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioDecoderConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoSourceConfiguration { - my ($self, $body, $header) = @_; - die "GetVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoSourceConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoSourceConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoSourceConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoEncoderConfiguration { - my ($self, $body, $header) = @_; - die "GetVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoEncoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoEncoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoEncoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioSourceConfiguration { - my ($self, $body, $header) = @_; - die "GetAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioSourceConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioSourceConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioSourceConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioEncoderConfiguration { - my ($self, $body, $header) = @_; - die "GetAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioEncoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioEncoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioEncoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoAnalyticsConfiguration { - my ($self, $body, $header) = @_; - die "GetVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoAnalyticsConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoAnalyticsConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoAnalyticsConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoAnalyticsConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoAnalyticsConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoAnalyticsConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetMetadataConfiguration { - my ($self, $body, $header) = @_; - die "GetMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetMetadataConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetMetadataConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetMetadataConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetMetadataConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetMetadataConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetMetadataConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioOutputConfiguration { - my ($self, $body, $header) = @_; - die "GetAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioOutputConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioOutputConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioOutputConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioOutputConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioDecoderConfiguration { - my ($self, $body, $header) = @_; - die "GetAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioDecoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioDecoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioDecoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioDecoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioDecoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioDecoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleVideoEncoderConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleVideoEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleVideoEncoderConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleVideoEncoderConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleVideoEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleVideoEncoderConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleVideoEncoderConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleVideoEncoderConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleVideoEncoderConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleVideoSourceConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleVideoSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleVideoSourceConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleVideoSourceConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleVideoSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleVideoSourceConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleVideoSourceConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleVideoSourceConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleVideoSourceConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleAudioEncoderConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleAudioEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleAudioEncoderConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioEncoderConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleAudioEncoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleAudioEncoderConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioEncoderConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioEncoderConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioEncoderConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleAudioSourceConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleAudioSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleAudioSourceConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioSourceConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleAudioSourceConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleAudioSourceConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioSourceConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioSourceConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioSourceConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleVideoAnalyticsConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleVideoAnalyticsConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleVideoAnalyticsConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleVideoAnalyticsConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleVideoAnalyticsConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleVideoAnalyticsConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleVideoAnalyticsConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleVideoAnalyticsConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleVideoAnalyticsConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleMetadataConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleMetadataConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleMetadataConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleMetadataConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleMetadataConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleMetadataConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleMetadataConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleMetadataConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleMetadataConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleAudioOutputConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleAudioOutputConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleAudioOutputConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioOutputConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleAudioOutputConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleAudioOutputConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioOutputConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioOutputConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioOutputConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetCompatibleAudioDecoderConfigurations { - my ($self, $body, $header) = @_; - die "GetCompatibleAudioDecoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetCompatibleAudioDecoderConfigurations', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioDecoderConfigurations', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetCompatibleAudioDecoderConfigurations must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetCompatibleAudioDecoderConfigurations', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetCompatibleAudioDecoderConfigurations', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioDecoderConfigurations )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetCompatibleAudioDecoderConfigurations )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetVideoSourceConfiguration { - my ($self, $body, $header) = @_; - die "SetVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetVideoSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoSourceConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetVideoSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetVideoSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoSourceConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetVideoSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetVideoSourceConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetVideoEncoderConfiguration { - my ($self, $body, $header) = @_; - die "SetVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetVideoEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoEncoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetVideoEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetVideoEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoEncoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetVideoEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetVideoEncoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetAudioSourceConfiguration { - my ($self, $body, $header) = @_; - die "SetAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetAudioSourceConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioSourceConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetAudioSourceConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetAudioSourceConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioSourceConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetAudioSourceConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetAudioSourceConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetAudioEncoderConfiguration { - my ($self, $body, $header) = @_; - die "SetAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetAudioEncoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioEncoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetAudioEncoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetAudioEncoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioEncoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetAudioEncoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetAudioEncoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetVideoAnalyticsConfiguration { - my ($self, $body, $header) = @_; - die "SetVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetVideoAnalyticsConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoAnalyticsConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetVideoAnalyticsConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetVideoAnalyticsConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoAnalyticsConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetVideoAnalyticsConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetVideoAnalyticsConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetMetadataConfiguration { - my ($self, $body, $header) = @_; - die "SetMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetMetadataConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetMetadataConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetMetadataConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetMetadataConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetMetadataConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetMetadataConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetMetadataConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetAudioOutputConfiguration { - my ($self, $body, $header) = @_; - die "SetAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetAudioOutputConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioOutputConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetAudioOutputConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetAudioOutputConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioOutputConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetAudioOutputConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetAudioOutputConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetAudioDecoderConfiguration { - my ($self, $body, $header) = @_; - die "SetAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetAudioDecoderConfiguration', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioDecoderConfiguration', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetAudioDecoderConfiguration must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetAudioDecoderConfiguration', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetAudioDecoderConfiguration', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetAudioDecoderConfiguration )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetAudioDecoderConfiguration )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoSourceConfigurationOptions { - my ($self, $body, $header) = @_; - die "GetVideoSourceConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoSourceConfigurationOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdlGetVideoSourceConfigurationOptions/', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoSourceConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoSourceConfigurationOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdlGetVideoSourceConfigurationOptions/', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoSourceConfigurationOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoSourceConfigurationOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoEncoderConfigurationOptions { - my ($self, $body, $header) = @_; - die "GetVideoEncoderConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoEncoderConfigurationOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoEncoderConfigurationOptions', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoEncoderConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoEncoderConfigurationOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoEncoderConfigurationOptions', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoEncoderConfigurationOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoEncoderConfigurationOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioSourceConfigurationOptions { - my ($self, $body, $header) = @_; - die "GetAudioSourceConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioSourceConfigurationOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioSourceConfigurationOptions', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioSourceConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioSourceConfigurationOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioSourceConfigurationOptions', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioSourceConfigurationOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioSourceConfigurationOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioEncoderConfigurationOptions { - my ($self, $body, $header) = @_; - die "GetAudioEncoderConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioEncoderConfigurationOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioEncoderConfigurationOptions', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioEncoderConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioEncoderConfigurationOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioEncoderConfigurationOptions', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioEncoderConfigurationOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioEncoderConfigurationOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetMetadataConfigurationOptions { - my ($self, $body, $header) = @_; - die "GetMetadataConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetMetadataConfigurationOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetMetadataConfigurationOptions', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetMetadataConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetMetadataConfigurationOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetMetadataConfigurationOptions', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetMetadataConfigurationOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetMetadataConfigurationOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioOutputConfigurationOptions { - my ($self, $body, $header) = @_; - die "GetAudioOutputConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioOutputConfigurationOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputConfigurationOptions', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioOutputConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioOutputConfigurationOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioOutputConfigurationOptions', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioOutputConfigurationOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioOutputConfigurationOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetAudioDecoderConfigurationOptions { - my ($self, $body, $header) = @_; - die "GetAudioDecoderConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetAudioDecoderConfigurationOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioDecoderConfigurationOptions', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetAudioDecoderConfigurationOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetAudioDecoderConfigurationOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetAudioDecoderConfigurationOptions', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetAudioDecoderConfigurationOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetAudioDecoderConfigurationOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetGuaranteedNumberOfVideoEncoderInstances { - my ($self, $body, $header) = @_; - die "GetGuaranteedNumberOfVideoEncoderInstances must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetGuaranteedNumberOfVideoEncoderInstances', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetGuaranteedNumberOfVideoEncoderInstances', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetGuaranteedNumberOfVideoEncoderInstances must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetGuaranteedNumberOfVideoEncoderInstances', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetGuaranteedNumberOfVideoEncoderInstances', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetGuaranteedNumberOfVideoEncoderInstances )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetGuaranteedNumberOfVideoEncoderInstances )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetStreamUri { - my ($self, $body, $header) = @_; - die "GetStreamUri must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetStreamUri', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetStreamUri', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetStreamUri must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetStreamUri', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetStreamUri', + style => 'document', + body => { + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetStreamUri )], + }, + header => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetStreamUri )], - }, - header => { - - }, - headerfault => { - - } + }, + headerfault => { + + } }, $body, $header); } sub StartMulticastStreaming { - my ($self, $body, $header) = @_; - die "StartMulticastStreaming must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'StartMulticastStreaming', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/StartMulticastStreaming', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "StartMulticastStreaming must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'StartMulticastStreaming', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/StartMulticastStreaming', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::StartMulticastStreaming )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::StartMulticastStreaming )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub StopMulticastStreaming { - my ($self, $body, $header) = @_; - die "StopMulticastStreaming must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'StopMulticastStreaming', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/StopMulticastStreaming', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "StopMulticastStreaming must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'StopMulticastStreaming', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/StopMulticastStreaming', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::StopMulticastStreaming )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::StopMulticastStreaming )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetSynchronizationPoint { - my ($self, $body, $header) = @_; - die "SetSynchronizationPoint must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetSynchronizationPoint', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetSynchronizationPoint', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetSynchronizationPoint must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetSynchronizationPoint', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetSynchronizationPoint', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetSynchronizationPoint )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetSynchronizationPoint )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetSnapshotUri { - my ($self, $body, $header) = @_; - die "GetSnapshotUri must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetSnapshotUri', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetSnapshotUri', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetSnapshotUri must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetSnapshotUri', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetSnapshotUri', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetSnapshotUri )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetSnapshotUri )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetVideoSourceModes { - my ($self, $body, $header) = @_; - die "GetVideoSourceModes must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetVideoSourceModes', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoSourceModes', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetVideoSourceModes must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetVideoSourceModes', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetVideoSourceModes', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetVideoSourceModes )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetVideoSourceModes )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetVideoSourceMode { - my ($self, $body, $header) = @_; - die "SetVideoSourceMode must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetVideoSourceMode', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoSourceMode', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetVideoSourceMode must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetVideoSourceMode', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetVideoSourceMode', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetVideoSourceMode )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetVideoSourceMode )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetOSDs { - my ($self, $body, $header) = @_; - die "GetOSDs must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetOSDs', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetOSDs', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetOSDs must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetOSDs', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetOSDs', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetOSDs )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetOSDs )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetOSD { - my ($self, $body, $header) = @_; - die "GetOSD must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetOSD', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetOSD', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetOSD must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetOSD', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetOSD', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetOSD )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetOSD )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub GetOSDOptions { - my ($self, $body, $header) = @_; - die "GetOSDOptions must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'GetOSDOptions', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetOSDOptions', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "GetOSDOptions must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'GetOSDOptions', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/GetOSDOptions', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::GetOSDOptions )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::GetOSDOptions )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub SetOSD { - my ($self, $body, $header) = @_; - die "SetOSD must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'SetOSD', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetOSD', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "SetOSD must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'SetOSD', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/SetOSD', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::SetOSD )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::SetOSD )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub CreateOSD { - my ($self, $body, $header) = @_; - die "CreateOSD must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'CreateOSD', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/CreateOSD', - style => 'document', - body => { - + my ($self, $body, $header) = @_; + die "CreateOSD must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'CreateOSD', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/CreateOSD', + style => 'document', + body => { - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::CreateOSD )], - }, - header => { - - }, - headerfault => { - - } + + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::CreateOSD )], + }, + header => { + + }, + headerfault => { + + } }, $body, $header); } sub DeleteOSD { - my ($self, $body, $header) = @_; - die "DeleteOSD must be called as object method (\$self is <$self>)" if not blessed($self); - return $self->SUPER::call({ - operation => 'DeleteOSD', - soap_action => 'http://www.onvif.org/ver10/media/wsdl/DeleteOSD', - style => 'document', - body => { - - - 'use' => 'literal', - namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', - encodingStyle => '', - parts => [qw( ONVIF::Media::Elements::DeleteOSD )], - }, - header => { - - }, - headerfault => { - - } + my ($self, $body, $header) = @_; + die "DeleteOSD must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'DeleteOSD', + soap_action => 'http://www.onvif.org/ver10/media/wsdl/DeleteOSD', + style => 'document', + body => { + use => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( ONVIF::Media::Elements::DeleteOSD )], + }, + header => { + }, + headerfault => { + } }, $body, $header); } - - - 1; - - - __END__ =pod diff --git a/onvif/proxy/lib/WSDiscovery11/Attributes/Id.pm b/onvif/proxy/lib/WSDiscovery11/Attributes/Id.pm new file mode 100644 index 000000000..56d5115e4 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Attributes/Id.pm @@ -0,0 +1,54 @@ + +package WSDiscovery::Attributes::Id; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Id'); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Attribute + SOAP::WSDL::XSD::Typelib::Builtin::ID +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Attributes::Id + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined attribute +Id from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Attributes::Id->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $value } + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Attributes/IsReferenceParameter.pm b/onvif/proxy/lib/WSDiscovery11/Attributes/IsReferenceParameter.pm new file mode 100644 index 000000000..c04039b1f --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Attributes/IsReferenceParameter.pm @@ -0,0 +1,54 @@ + +package WSDiscovery::Attributes::IsReferenceParameter; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('IsReferenceParameter'); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Attribute + SOAP::WSDL::XSD::Typelib::Builtin::boolean +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Attributes::IsReferenceParameter + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined attribute +IsReferenceParameter from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Attributes::IsReferenceParameter->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $value } + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Action.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Action.pm new file mode 100644 index 000000000..a24d6fdd9 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Action.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::Action; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('Action'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::AttributedURIType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Action + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Action from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Action->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/AppSequence.pm b/onvif/proxy/lib/WSDiscovery11/Elements/AppSequence.pm new file mode 100644 index 000000000..63be6d678 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/AppSequence.pm @@ -0,0 +1,58 @@ + +package WSDiscovery::Elements::AppSequence; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('AppSequence'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::AppSequenceType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::AppSequence + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +AppSequence from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::AppSequence->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::AppSequenceType + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Bye.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Bye.pm new file mode 100644 index 000000000..a89c3b48c --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Bye.pm @@ -0,0 +1,69 @@ + +package WSDiscovery::Elements::Bye; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Bye'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ByeType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Bye + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Bye from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Bye->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ByeType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/EndpointReference.pm b/onvif/proxy/lib/WSDiscovery11/Elements/EndpointReference.pm new file mode 100644 index 000000000..96c690bb4 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/EndpointReference.pm @@ -0,0 +1,63 @@ + +package WSDiscovery::Elements::EndpointReference; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('EndpointReference'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::EndpointReferenceType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::EndpointReference + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +EndpointReference from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::EndpointReference->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/FaultTo.pm b/onvif/proxy/lib/WSDiscovery11/Elements/FaultTo.pm new file mode 100644 index 000000000..530f9a4a4 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/FaultTo.pm @@ -0,0 +1,63 @@ + +package WSDiscovery::Elements::FaultTo; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('FaultTo'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::EndpointReferenceType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::FaultTo + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +FaultTo from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::FaultTo->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/From.pm b/onvif/proxy/lib/WSDiscovery11/Elements/From.pm new file mode 100644 index 000000000..727c6a7ef --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/From.pm @@ -0,0 +1,63 @@ + +package WSDiscovery::Elements::From; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('From'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::EndpointReferenceType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::From + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +From from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::From->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Hello.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Hello.pm new file mode 100644 index 000000000..894f8482d --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Hello.pm @@ -0,0 +1,69 @@ + +package WSDiscovery::Elements::Hello; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Hello'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::HelloType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Hello + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Hello from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Hello->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::HelloType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/MessageID.pm b/onvif/proxy/lib/WSDiscovery11/Elements/MessageID.pm new file mode 100644 index 000000000..54dfa6a50 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/MessageID.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::MessageID; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('MessageID'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::AttributedURIType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::MessageID + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +MessageID from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::MessageID->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Metadata.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Metadata.pm new file mode 100644 index 000000000..1567ef36a --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Metadata.pm @@ -0,0 +1,58 @@ + +package WSDiscovery::Elements::Metadata; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('Metadata'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::MetadataType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Metadata + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Metadata from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Metadata->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::MetadataType + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/MetadataVersion.pm b/onvif/proxy/lib/WSDiscovery11/Elements/MetadataVersion.pm new file mode 100644 index 000000000..acb6c5246 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/MetadataVersion.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::MetadataVersion; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('MetadataVersion'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + SOAP::WSDL::XSD::Typelib::Builtin::unsignedInt +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::MetadataVersion + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +MetadataVersion from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::MetadataVersion->new($data); + +Constructor. The following data structure may be passed to new(): + + $some_value, # unsignedInt + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Probe.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Probe.pm new file mode 100644 index 000000000..b5b780a24 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Probe.pm @@ -0,0 +1,60 @@ + +package WSDiscovery::Elements::Probe; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Probe'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ProbeType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Probe + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Probe from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Probe->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ProbeType + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/ProbeMatches.pm b/onvif/proxy/lib/WSDiscovery11/Elements/ProbeMatches.pm new file mode 100644 index 000000000..5cf9f8fac --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/ProbeMatches.pm @@ -0,0 +1,71 @@ + +package WSDiscovery::Elements::ProbeMatches; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('ProbeMatches'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ProbeMatchesType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::ProbeMatches + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +ProbeMatches from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::ProbeMatches->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ProbeMatchesType + ProbeMatch => { # WSDiscovery::Types::ProbeMatchType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/ProblemAction.pm b/onvif/proxy/lib/WSDiscovery11/Elements/ProblemAction.pm new file mode 100644 index 000000000..2512b7e91 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/ProblemAction.pm @@ -0,0 +1,60 @@ + +package WSDiscovery::Elements::ProblemAction; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('ProblemAction'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ProblemActionType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::ProblemAction + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +ProblemAction from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::ProblemAction->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ProblemActionType + Action => { value => $some_value }, + SoapAction => $some_value, # anyURI + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/ProblemHeaderQName.pm b/onvif/proxy/lib/WSDiscovery11/Elements/ProblemHeaderQName.pm new file mode 100644 index 000000000..bd6f34982 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/ProblemHeaderQName.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::ProblemHeaderQName; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('ProblemHeaderQName'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::AttributedQNameType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::ProblemHeaderQName + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +ProblemHeaderQName from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::ProblemHeaderQName->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/ProblemIRI.pm b/onvif/proxy/lib/WSDiscovery11/Elements/ProblemIRI.pm new file mode 100644 index 000000000..70fe19410 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/ProblemIRI.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::ProblemIRI; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('ProblemIRI'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::AttributedURIType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::ProblemIRI + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +ProblemIRI from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::ProblemIRI->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/ReferenceParameters.pm b/onvif/proxy/lib/WSDiscovery11/Elements/ReferenceParameters.pm new file mode 100644 index 000000000..1f8cd7cbc --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/ReferenceParameters.pm @@ -0,0 +1,58 @@ + +package WSDiscovery::Elements::ReferenceParameters; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('ReferenceParameters'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ReferenceParametersType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::ReferenceParameters + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +ReferenceParameters from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::ReferenceParameters->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ReferenceParametersType + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/RelatesTo.pm b/onvif/proxy/lib/WSDiscovery11/Elements/RelatesTo.pm new file mode 100644 index 000000000..ffdf501aa --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/RelatesTo.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::RelatesTo; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('RelatesTo'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::RelatesToType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::RelatesTo + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +RelatesTo from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::RelatesTo->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/ReplyTo.pm b/onvif/proxy/lib/WSDiscovery11/Elements/ReplyTo.pm new file mode 100644 index 000000000..428378c5e --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/ReplyTo.pm @@ -0,0 +1,63 @@ + +package WSDiscovery::Elements::ReplyTo; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('ReplyTo'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::EndpointReferenceType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::ReplyTo + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +ReplyTo from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::ReplyTo->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Resolve.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Resolve.pm new file mode 100644 index 000000000..57849ce57 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Resolve.pm @@ -0,0 +1,65 @@ + +package WSDiscovery::Elements::Resolve; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Resolve'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ResolveType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Resolve + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Resolve from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Resolve->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ResolveType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/ResolveMatches.pm b/onvif/proxy/lib/WSDiscovery11/Elements/ResolveMatches.pm new file mode 100644 index 000000000..cfaabc989 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/ResolveMatches.pm @@ -0,0 +1,71 @@ + +package WSDiscovery::Elements::ResolveMatches; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('ResolveMatches'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ResolveMatchesType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::ResolveMatches + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +ResolveMatches from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::ResolveMatches->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ResolveMatchesType + ResolveMatch => { # WSDiscovery::Types::ResolveMatchType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/RetryAfter.pm b/onvif/proxy/lib/WSDiscovery11/Elements/RetryAfter.pm new file mode 100644 index 000000000..980eeab2d --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/RetryAfter.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::RetryAfter; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('RetryAfter'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::AttributedUnsignedLongType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::RetryAfter + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +RetryAfter from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::RetryAfter->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Scopes.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Scopes.pm new file mode 100644 index 000000000..1dde55ce1 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Scopes.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::Scopes; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Scopes'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::ScopesType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Scopes + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Scopes from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Scopes->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Security.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Security.pm new file mode 100644 index 000000000..f9d4aff4d --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Security.pm @@ -0,0 +1,60 @@ + +package WSDiscovery::Elements::Security; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Security'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::SecurityType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Security + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Security from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Security->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::SecurityType + Sig => { # WSDiscovery::Types::SigType + }, + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Sig.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Sig.pm new file mode 100644 index 000000000..6ddab0bed --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Sig.pm @@ -0,0 +1,58 @@ + +package WSDiscovery::Elements::Sig; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Sig'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::SigType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Sig + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Sig from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Sig->new($data); + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::SigType + }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/SupportedMatchingRules.pm b/onvif/proxy/lib/WSDiscovery11/Elements/SupportedMatchingRules.pm new file mode 100644 index 000000000..908566429 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/SupportedMatchingRules.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::SupportedMatchingRules; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('SupportedMatchingRules'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::UriListType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::SupportedMatchingRules + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +SupportedMatchingRules from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::SupportedMatchingRules->new($data); + +Constructor. The following data structure may be passed to new(): + +$some_value, # UriListType + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/To.pm b/onvif/proxy/lib/WSDiscovery11/Elements/To.pm new file mode 100644 index 000000000..d435b934d --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/To.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::To; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' } + +__PACKAGE__->__set_name('To'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::AttributedURIType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::To + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +To from the namespace http://www.w3.org/2005/08/addressing. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::To->new($data); + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/Types.pm b/onvif/proxy/lib/WSDiscovery11/Elements/Types.pm new file mode 100644 index 000000000..15667a3a0 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/Types.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::Types; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('Types'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::QNameListType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::Types + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +Types from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::Types->new($data); + +Constructor. The following data structure may be passed to new(): + +$some_value, # QNameListType + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Elements/XAddrs.pm b/onvif/proxy/lib/WSDiscovery11/Elements/XAddrs.pm new file mode 100644 index 000000000..bc0c8d998 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Elements/XAddrs.pm @@ -0,0 +1,57 @@ + +package WSDiscovery::Elements::XAddrs; +use strict; +use warnings; + +{ # BLOCK to scope variables + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' } + +__PACKAGE__->__set_name('XAddrs'); +__PACKAGE__->__set_nillable(); +__PACKAGE__->__set_minOccurs(); +__PACKAGE__->__set_maxOccurs(); +__PACKAGE__->__set_ref(); +use base qw( + SOAP::WSDL::XSD::Typelib::Element + WSDiscovery::Types::UriListType +); + +} + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Elements::XAddrs + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined element +XAddrs from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + + +=head1 METHODS + +=head2 new + + my $element = WSDiscovery::Elements::XAddrs->new($data); + +Constructor. The following data structure may be passed to new(): + +$some_value, # UriListType + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Interfaces/WSDiscovery/WSDiscoveryPort.pm b/onvif/proxy/lib/WSDiscovery11/Interfaces/WSDiscovery/WSDiscoveryPort.pm new file mode 100644 index 000000000..a7dcd3532 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Interfaces/WSDiscovery/WSDiscoveryPort.pm @@ -0,0 +1,131 @@ +package WSDiscovery::Interfaces::WSDiscovery::WSDiscoveryPort; +use strict; +use warnings; +use Class::Std::Fast::Storable; +use Scalar::Util qw(blessed); +use base qw(SOAP::WSDL::Client::Base); + +# only load if it hasn't been loaded before +require WSDiscovery::Typemaps::WSDiscovery + if not WSDiscovery::Typemaps::WSDiscovery->can('get_class'); + +sub START { + $_[0]->set_proxy('soap.udp://239.255.255.250:3702/') if not $_[2]->{proxy}; + $_[0]->set_class_resolver('WSDiscovery::Typemaps::WSDiscovery') + if not $_[2]->{class_resolver}; + + $_[0]->set_prefix($_[2]->{use_prefix}) if exists $_[2]->{use_prefix}; +} + +sub ProbeOp { + my ($self, $body, $header) = @_; + die "ProbeOp must be called as object method (\$self is <$self>)" if not blessed($self); + return $self->SUPER::call({ + operation => 'ProbeOp', + soap_action => 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Probe', + style => 'document', + body => { + + + 'use' => 'literal', + namespace => 'http://schemas.xmlsoap.org/wsdl/soap/', + encodingStyle => '', + parts => [qw( WSDiscovery::Elements::Probe )], + + }, + header => { + + }, + headerfault => { + + } + }, $body, $header); +} + + + + +1; + + + +__END__ + +=pod + +=head1 NAME + +WSDiscovery::Interfaces::WSDiscovery::WSDiscoveryPort - SOAP Interface for the WSDiscovery Web Service + +=head1 SYNOPSIS + + use WSDiscovery::Interfaces::WSDiscovery::WSDiscoveryPort; + my $interface = WSDiscovery::Interfaces::WSDiscovery::WSDiscoveryPort->new(); + + my $response; + $response = $interface->ProbeOp(); + + + +=head1 DESCRIPTION + +SOAP Interface for the WSDiscovery web service +located at soap.udp://239.255.255.250:3702/. + +=head1 SERVICE WSDiscovery + + + +=head2 Port WSDiscoveryPort + + + +=head1 METHODS + +=head2 General methods + +=head3 new + +Constructor. + +All arguments are forwarded to L. + +=head2 SOAP Service methods + +Method synopsis is displayed with hash refs as parameters. + +The commented class names in the method's parameters denote that objects +of the corresponding class can be passed instead of the marked hash ref. + +You may pass any combination of objects, hash and list refs to these +methods, as long as you meet the structure. + +List items (i.e. multiple occurences) are not displayed in the synopsis. +You may generally pass a list ref of hash refs (or objects) instead of a hash +ref - this may result in invalid XML if used improperly, though. Note that +SOAP::WSDL always expects list references at maximum depth position. + +XML attributes are not displayed in this synopsis and cannot be set using +hash refs. See the respective class' documentation for additional information. + + + +=head3 ProbeOp + + + +Returns a L object. + + $response = $interface->ProbeOp( { # WSDiscovery::Types::ProbeType + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + },, + ); + + + +=head1 AUTHOR + +Generated by SOAP::WSDL on Wed Jul 2 11:45:24 2014 + +=cut diff --git a/onvif/proxy/lib/WSDiscovery11/Typemaps/WSDiscovery.pm b/onvif/proxy/lib/WSDiscovery11/Typemaps/WSDiscovery.pm new file mode 100644 index 000000000..136550e96 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Typemaps/WSDiscovery.pm @@ -0,0 +1,59 @@ + +package WSDiscovery::Typemaps::WSDiscovery; +use strict; +use warnings; + +our $typemap_1 = { + 'ProbeMatches/ProbeMatch/XAddrs' => 'WSDiscovery::Types::UriListType', + 'ProbeMatches/ProbeMatch' => 'WSDiscovery::Types::ProbeMatchType', + 'Fault/detail' => 'SOAP::WSDL::XSD::Typelib::Builtin::string', + 'ProbeMatches/ProbeMatch/EndpointReference/Metadata' => 'WSDiscovery::Types::MetadataType', + 'ProbeMatches/ProbeMatch/Scopes' => 'WSDiscovery::Types::ScopesType', + 'ProbeMatches/ProbeMatch/EndpointReference/Address' => 'WSDiscovery::Types::AttributedURIType', + 'Probe/Types' => 'WSDiscovery::Types::QNameListType', + 'Probe' => 'WSDiscovery::Elements::Probe', + 'Fault/faultstring' => 'SOAP::WSDL::XSD::Typelib::Builtin::string', + 'ProbeMatches/ProbeMatch/MetadataVersion' => 'SOAP::WSDL::XSD::Typelib::Builtin::unsignedInt', + 'Probe/Scopes' => 'WSDiscovery::Types::ScopesType', + 'Fault/faultactor' => 'SOAP::WSDL::XSD::Typelib::Builtin::token', + 'Fault/faultcode' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI', + 'ProbeMatches/ProbeMatch/Types' => 'WSDiscovery::Types::QNameListType', + 'ProbeMatches/ProbeMatch/EndpointReference/ReferenceParameters' => 'WSDiscovery::Types::ReferenceParametersType', + 'ProbeMatches/ProbeMatch/EndpointReference' => 'WSDiscovery::Types::EndpointReferenceType', + 'Fault' => 'SOAP::WSDL::SOAP::Typelib::Fault11', + 'ProbeMatches' => 'WSDiscovery::Elements::ProbeMatches', + 'MessageID' => 'WSDiscovery::Elements::MessageID', + 'RelatesTo' => '__SKIP__', + 'To' => '__SKIP__', + 'Action' => '__SKIP__', + 'AppSequence' => '__SKIP__', + }; +; + +sub get_class { + my $name = join '/', @{ $_[1] }; + return $typemap_1->{ $name }; +} + +sub get_typemap { + return $typemap_1; +} + +1; + +__END__ + +__END__ + +=pod + +=head1 NAME + +WSDiscovery::Typemaps::WSDiscovery - typemap for WSDiscovery + +=head1 DESCRIPTION + +Typemap created by SOAP::WSDL for map-based SOAP message parsers. + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/AppSequenceType.pm b/onvif/proxy/lib/WSDiscovery11/Types/AppSequenceType.pm new file mode 100644 index 000000000..18e8ea8c3 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/AppSequenceType.pm @@ -0,0 +1,138 @@ +package WSDiscovery::Types::AppSequenceType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS = 'WSDiscovery::Types::AppSequenceType::_AppSequenceType::XmlAttr'; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use base qw(); + +package WSDiscovery::Types::AppSequenceType::_AppSequenceType::XmlAttr; +use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet); + +{ # BLOCK to scope variables + +my %InstanceId_of :ATTR(:get); +my %SequenceId_of :ATTR(:get); +my %MessageNumber_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( + InstanceId + SequenceId + MessageNumber + ) ], + { + + InstanceId => \%InstanceId_of, + + SequenceId => \%SequenceId_of, + + MessageNumber => \%MessageNumber_of, + }, + { + InstanceId => 'SOAP::WSDL::XSD::Typelib::Builtin::unsignedInt', + SequenceId => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI', + MessageNumber => 'SOAP::WSDL::XSD::Typelib::Builtin::unsignedInt', + } +); + +} # end BLOCK + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::AppSequenceType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +AppSequenceType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::AppSequenceType + }, + + + +=head2 attr + +NOTE: Attribute documentation is experimental, and may be inaccurate. +See the correspondent WSDL/XML Schema if in question. + +This class has additional attributes, accessibly via the C method. + +attr() returns an object of the class WSDiscovery::Types::AppSequenceType::_AppSequenceType::XmlAttr. + +The following attributes can be accessed on this object via the corresponding +get_/set_ methods: + +=over + +=item * InstanceId + + + +This attribute is of type L. + +=item * SequenceId + + + +This attribute is of type L. + +=item * MessageNumber + + + +This attribute is of type L. + + +=back + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/AttributedQNameType.pm b/onvif/proxy/lib/WSDiscovery11/Types/AttributedQNameType.pm new file mode 100644 index 000000000..dd2d1522c --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/AttributedQNameType.pm @@ -0,0 +1,73 @@ +package WSDiscovery::Types::AttributedQNameType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use base qw( + SOAP::WSDL::XSD::Typelib::ComplexType + SOAP::WSDL::XSD::Typelib::Builtin::QName +); + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::AttributedQNameType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +AttributedQNameType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/AttributedURIType.pm b/onvif/proxy/lib/WSDiscovery11/Types/AttributedURIType.pm new file mode 100644 index 000000000..5cab1a8c9 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/AttributedURIType.pm @@ -0,0 +1,73 @@ +package WSDiscovery::Types::AttributedURIType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use base qw( + SOAP::WSDL::XSD::Typelib::ComplexType + SOAP::WSDL::XSD::Typelib::Builtin::anyURI +); + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::AttributedURIType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +AttributedURIType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/AttributedUnsignedLongType.pm b/onvif/proxy/lib/WSDiscovery11/Types/AttributedUnsignedLongType.pm new file mode 100644 index 000000000..c2a947795 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/AttributedUnsignedLongType.pm @@ -0,0 +1,73 @@ +package WSDiscovery::Types::AttributedUnsignedLongType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use base qw( + SOAP::WSDL::XSD::Typelib::ComplexType + SOAP::WSDL::XSD::Typelib::Builtin::unsignedLong +); + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::AttributedUnsignedLongType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +AttributedUnsignedLongType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ByeType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ByeType.pm new file mode 100644 index 000000000..9c384fb2a --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ByeType.pm @@ -0,0 +1,180 @@ +package WSDiscovery::Types::ByeType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %EndpointReference_of :ATTR(:get); +my %Types_of :ATTR(:get); +my %Scopes_of :ATTR(:get); +my %XAddrs_of :ATTR(:get); +my %MetadataVersion_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( EndpointReference + Types + Scopes + XAddrs + MetadataVersion + + ) ], + { + 'EndpointReference' => \%EndpointReference_of, + 'Types' => \%Types_of, + 'Scopes' => \%Scopes_of, + 'XAddrs' => \%XAddrs_of, + 'MetadataVersion' => \%MetadataVersion_of, + }, + { + 'EndpointReference' => 'WSDiscovery::Elements::EndpointReference', + + 'Types' => 'WSDiscovery::Elements::Types', + + 'Scopes' => 'WSDiscovery::Elements::Scopes', + + 'XAddrs' => 'WSDiscovery::Elements::XAddrs', + + 'MetadataVersion' => 'WSDiscovery::Elements::MetadataVersion', + + }, + { + + 'EndpointReference' => '', + 'Types' => '', + 'Scopes' => '', + 'XAddrs' => '', + 'MetadataVersion' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ByeType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ByeType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * EndpointReference + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Types + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Scopes + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * XAddrs + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * MetadataVersion + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ByeType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/EndpointReferenceType.pm b/onvif/proxy/lib/WSDiscovery11/Types/EndpointReferenceType.pm new file mode 100644 index 000000000..59411fa37 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/EndpointReferenceType.pm @@ -0,0 +1,137 @@ +package WSDiscovery::Types::EndpointReferenceType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %Address_of :ATTR(:get
); +my %ReferenceParameters_of :ATTR(:get); +my %Metadata_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( Address + ReferenceParameters + Metadata + + ) ], + { + 'Address' => \%Address_of, + 'ReferenceParameters' => \%ReferenceParameters_of, + 'Metadata' => \%Metadata_of, + }, + { + 'Address' => 'WSDiscovery::Types::AttributedURIType', + 'ReferenceParameters' => 'WSDiscovery::Elements::ReferenceParameters', + + 'Metadata' => 'WSDiscovery::Elements::Metadata', + + }, + { + + 'Address' => 'Address', + 'ReferenceParameters' => '', + 'Metadata' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::EndpointReferenceType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +EndpointReferenceType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * Address + + +=item * ReferenceParameters + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Metadata + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/FaultCodeOpenType.pm b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodeOpenType.pm new file mode 100644 index 000000000..52f5d2c8f --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodeOpenType.pm @@ -0,0 +1,76 @@ +package WSDiscovery::Types::FaultCodeOpenType; +use strict; +use warnings; + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01'}; + +# derivation by union +# union is not fully supported yet - value space constraints are not +# checked yet. +# This implementation of union resorts to the simplest possible base, which +# is: "If the or alternative is chosen, then the +# simple ur-type definition·." +# + +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType +); + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +FaultCodeOpenType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + +This type class is derived by union. + +Derivation by union is not fully supported yet - value space constraints are +not checked yet. + +The current implementation of union resorts to inheriting from the base type, +which means (quoted from the XML Schema specs): "If the or +alternative is chosen, then the simple ur-type definition·." + + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/FaultCodeType.pm b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodeType.pm new file mode 100644 index 000000000..4cc63eb8b --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodeType.pm @@ -0,0 +1,65 @@ +package WSDiscovery::Types::FaultCodeType; +use strict; +use warnings; + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01'}; + +# derivation by restriction +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::QName); + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +FaultCodeType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + +This clase is derived from + SOAP::WSDL::XSD::Typelib::Builtin::QName +. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly +like it's base type. + +# Description of restrictions not implemented yet. + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/FaultCodesOpenEnumType.pm b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodesOpenEnumType.pm new file mode 100644 index 000000000..89d8704e8 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodesOpenEnumType.pm @@ -0,0 +1,76 @@ +package WSDiscovery::Types::FaultCodesOpenEnumType; +use strict; +use warnings; + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing'}; + +# derivation by union +# union is not fully supported yet - value space constraints are not +# checked yet. +# This implementation of union resorts to the simplest possible base, which +# is: "If the or alternative is chosen, then the +# simple ur-type definition·." +# + +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType +); + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +FaultCodesOpenEnumType from the namespace http://www.w3.org/2005/08/addressing. + + + + + +This type class is derived by union. + +Derivation by union is not fully supported yet - value space constraints are +not checked yet. + +The current implementation of union resorts to inheriting from the base type, +which means (quoted from the XML Schema specs): "If the or +alternative is chosen, then the simple ur-type definition·." + + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/FaultCodesType.pm b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodesType.pm new file mode 100644 index 000000000..a042be3cf --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/FaultCodesType.pm @@ -0,0 +1,65 @@ +package WSDiscovery::Types::FaultCodesType; +use strict; +use warnings; + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing'}; + +# derivation by restriction +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::QName); + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +FaultCodesType from the namespace http://www.w3.org/2005/08/addressing. + + + + + +This clase is derived from + SOAP::WSDL::XSD::Typelib::Builtin::QName +. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly +like it's base type. + +# Description of restrictions not implemented yet. + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/HelloType.pm b/onvif/proxy/lib/WSDiscovery11/Types/HelloType.pm new file mode 100644 index 000000000..1842faf6a --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/HelloType.pm @@ -0,0 +1,180 @@ +package WSDiscovery::Types::HelloType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %EndpointReference_of :ATTR(:get); +my %Types_of :ATTR(:get); +my %Scopes_of :ATTR(:get); +my %XAddrs_of :ATTR(:get); +my %MetadataVersion_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( EndpointReference + Types + Scopes + XAddrs + MetadataVersion + + ) ], + { + 'EndpointReference' => \%EndpointReference_of, + 'Types' => \%Types_of, + 'Scopes' => \%Scopes_of, + 'XAddrs' => \%XAddrs_of, + 'MetadataVersion' => \%MetadataVersion_of, + }, + { + 'EndpointReference' => 'WSDiscovery::Elements::EndpointReference', + + 'Types' => 'WSDiscovery::Elements::Types', + + 'Scopes' => 'WSDiscovery::Elements::Scopes', + + 'XAddrs' => 'WSDiscovery::Elements::XAddrs', + + 'MetadataVersion' => 'WSDiscovery::Elements::MetadataVersion', + + }, + { + + 'EndpointReference' => '', + 'Types' => '', + 'Scopes' => '', + 'XAddrs' => '', + 'MetadataVersion' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::HelloType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +HelloType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * EndpointReference + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Types + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Scopes + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * XAddrs + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * MetadataVersion + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::HelloType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/MetadataType.pm b/onvif/proxy/lib/WSDiscovery11/Types/MetadataType.pm new file mode 100644 index 000000000..072161f78 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/MetadataType.pm @@ -0,0 +1,94 @@ +package WSDiscovery::Types::MetadataType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + + +__PACKAGE__->_factory( + [ qw( + ) ], + { + }, + { + }, + { + + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::MetadataType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +MetadataType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::MetadataType + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ProbeMatchType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ProbeMatchType.pm new file mode 100644 index 000000000..c85d98849 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ProbeMatchType.pm @@ -0,0 +1,180 @@ +package WSDiscovery::Types::ProbeMatchType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %EndpointReference_of :ATTR(:get); +my %Types_of :ATTR(:get); +my %Scopes_of :ATTR(:get); +my %XAddrs_of :ATTR(:get); +my %MetadataVersion_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( EndpointReference + Types + Scopes + XAddrs + MetadataVersion + + ) ], + { + 'EndpointReference' => \%EndpointReference_of, + 'Types' => \%Types_of, + 'Scopes' => \%Scopes_of, + 'XAddrs' => \%XAddrs_of, + 'MetadataVersion' => \%MetadataVersion_of, + }, + { + 'EndpointReference' => 'WSDiscovery::Elements::EndpointReference', + + 'Types' => 'WSDiscovery::Elements::Types', + + 'Scopes' => 'WSDiscovery::Elements::Scopes', + + 'XAddrs' => 'WSDiscovery::Elements::XAddrs', + + 'MetadataVersion' => 'WSDiscovery::Elements::MetadataVersion', + + }, + { + + 'EndpointReference' => '', + 'Types' => '', + 'Scopes' => '', + 'XAddrs' => '', + 'MetadataVersion' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ProbeMatchType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ProbeMatchType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * EndpointReference + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Types + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Scopes + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * XAddrs + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * MetadataVersion + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ProbeMatchType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ProbeMatchesType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ProbeMatchesType.pm new file mode 100644 index 000000000..200edc6a4 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ProbeMatchesType.pm @@ -0,0 +1,115 @@ +package WSDiscovery::Types::ProbeMatchesType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %ProbeMatch_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( ProbeMatch + + ) ], + { + 'ProbeMatch' => \%ProbeMatch_of, + }, + { + 'ProbeMatch' => 'WSDiscovery::Types::ProbeMatchType', + }, + { + + 'ProbeMatch' => 'ProbeMatch', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ProbeMatchesType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ProbeMatchesType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * ProbeMatch + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ProbeMatchesType + ProbeMatch => { # WSDiscovery::Types::ProbeMatchType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ProbeType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ProbeType.pm new file mode 100644 index 000000000..60dfa0bf3 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ProbeType.pm @@ -0,0 +1,126 @@ +package WSDiscovery::Types::ProbeType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %Types_of :ATTR(:get); +my %Scopes_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( Types + Scopes + + ) ], + { + 'Types' => \%Types_of, + 'Scopes' => \%Scopes_of, + }, + { + 'Types' => 'WSDiscovery::Elements::Types', + + 'Scopes' => 'WSDiscovery::Elements::Scopes', + + }, + { + + 'Types' => '', + 'Scopes' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ProbeType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ProbeType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * Types + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Scopes + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ProbeType + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ProblemActionType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ProblemActionType.pm new file mode 100644 index 000000000..1426017f4 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ProblemActionType.pm @@ -0,0 +1,119 @@ +package WSDiscovery::Types::ProblemActionType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %Action_of :ATTR(:get); +my %SoapAction_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( Action + SoapAction + + ) ], + { + 'Action' => \%Action_of, + 'SoapAction' => \%SoapAction_of, + }, + { + 'Action' => 'WSDiscovery::Elements::Action', + + 'SoapAction' => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI', + }, + { + + 'Action' => '', + 'SoapAction' => 'SoapAction', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ProblemActionType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ProblemActionType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * Action + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * SoapAction + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ProblemActionType + Action => { value => $some_value }, + SoapAction => $some_value, # anyURI + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/QNameListType.pm b/onvif/proxy/lib/WSDiscovery11/Types/QNameListType.pm new file mode 100644 index 000000000..fef443675 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/QNameListType.pm @@ -0,0 +1,75 @@ +package WSDiscovery::Types::QNameListType; +use strict; +use warnings; + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01'}; + + +# list derivation +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::list + SOAP::WSDL::XSD::Typelib::Builtin::QName +); + + + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +QNameListType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + +This clase is derived from + SOAP::WSDL::XSD::Typelib::Builtin::QName +. + +You may pass the following structure to new(): + + [ $value_1, .. $value_n ] + +All elements of the list must be of the class' base type (or valid arguments +to it's constructor). + + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ReferenceParametersType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ReferenceParametersType.pm new file mode 100644 index 000000000..d6569a66b --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ReferenceParametersType.pm @@ -0,0 +1,94 @@ +package WSDiscovery::Types::ReferenceParametersType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + + +__PACKAGE__->_factory( + [ qw( + ) ], + { + }, + { + }, + { + + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ReferenceParametersType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ReferenceParametersType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ReferenceParametersType + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/RelatesToType.pm b/onvif/proxy/lib/WSDiscovery11/Types/RelatesToType.pm new file mode 100644 index 000000000..068d00ce6 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/RelatesToType.pm @@ -0,0 +1,118 @@ +package WSDiscovery::Types::RelatesToType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing' }; + +our $XML_ATTRIBUTE_CLASS = 'WSDiscovery::Types::RelatesToType::_RelatesToType::XmlAttr'; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use base qw( + SOAP::WSDL::XSD::Typelib::ComplexType + SOAP::WSDL::XSD::Typelib::Builtin::anyURI +); + +package WSDiscovery::Types::RelatesToType::_RelatesToType::XmlAttr; +use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet); + +{ # BLOCK to scope variables + +my %RelationshipType_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( + RelationshipType + ) ], + { + + RelationshipType => \%RelationshipType_of, + }, + { + RelationshipType => 'WSDiscovery::Types::RelationshipTypeOpenEnum', + } +); + +} # end BLOCK + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::RelatesToType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +RelatesToType from the namespace http://www.w3.org/2005/08/addressing. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + + + +=head2 attr + +NOTE: Attribute documentation is experimental, and may be inaccurate. +See the correspondent WSDL/XML Schema if in question. + +This class has additional attributes, accessibly via the C method. + +attr() returns an object of the class WSDiscovery::Types::RelatesToType::_RelatesToType::XmlAttr. + +The following attributes can be accessed on this object via the corresponding +get_/set_ methods: + +=over + +=item * RelationshipType + + + +This attribute is of type L. + + +=back + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/RelationshipType.pm b/onvif/proxy/lib/WSDiscovery11/Types/RelationshipType.pm new file mode 100644 index 000000000..022f9b27e --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/RelationshipType.pm @@ -0,0 +1,65 @@ +package WSDiscovery::Types::RelationshipType; +use strict; +use warnings; + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing'}; + +# derivation by restriction +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::anyURI); + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +RelationshipType from the namespace http://www.w3.org/2005/08/addressing. + + + + + +This clase is derived from + SOAP::WSDL::XSD::Typelib::Builtin::anyURI +. SOAP::WSDL's schema implementation does not validate data, so you can use it exactly +like it's base type. + +# Description of restrictions not implemented yet. + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/RelationshipTypeOpenEnum.pm b/onvif/proxy/lib/WSDiscovery11/Types/RelationshipTypeOpenEnum.pm new file mode 100644 index 000000000..dc3e004c2 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/RelationshipTypeOpenEnum.pm @@ -0,0 +1,76 @@ +package WSDiscovery::Types::RelationshipTypeOpenEnum; +use strict; +use warnings; + +sub get_xmlns { 'http://www.w3.org/2005/08/addressing'}; + +# derivation by union +# union is not fully supported yet - value space constraints are not +# checked yet. +# This implementation of union resorts to the simplest possible base, which +# is: "If the or alternative is chosen, then the +# simple ur-type definition·." +# + +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::anySimpleType +); + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +RelationshipTypeOpenEnum from the namespace http://www.w3.org/2005/08/addressing. + + + + + +This type class is derived by union. + +Derivation by union is not fully supported yet - value space constraints are +not checked yet. + +The current implementation of union resorts to inheriting from the base type, +which means (quoted from the XML Schema specs): "If the or +alternative is chosen, then the simple ur-type definition·." + + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ResolveMatchType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ResolveMatchType.pm new file mode 100644 index 000000000..03216f066 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ResolveMatchType.pm @@ -0,0 +1,180 @@ +package WSDiscovery::Types::ResolveMatchType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %EndpointReference_of :ATTR(:get); +my %Types_of :ATTR(:get); +my %Scopes_of :ATTR(:get); +my %XAddrs_of :ATTR(:get); +my %MetadataVersion_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( EndpointReference + Types + Scopes + XAddrs + MetadataVersion + + ) ], + { + 'EndpointReference' => \%EndpointReference_of, + 'Types' => \%Types_of, + 'Scopes' => \%Scopes_of, + 'XAddrs' => \%XAddrs_of, + 'MetadataVersion' => \%MetadataVersion_of, + }, + { + 'EndpointReference' => 'WSDiscovery::Elements::EndpointReference', + + 'Types' => 'WSDiscovery::Elements::Types', + + 'Scopes' => 'WSDiscovery::Elements::Scopes', + + 'XAddrs' => 'WSDiscovery::Elements::XAddrs', + + 'MetadataVersion' => 'WSDiscovery::Elements::MetadataVersion', + + }, + { + + 'EndpointReference' => '', + 'Types' => '', + 'Scopes' => '', + 'XAddrs' => '', + 'MetadataVersion' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ResolveMatchType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ResolveMatchType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * EndpointReference + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Types + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * Scopes + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * XAddrs + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + +=item * MetadataVersion + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ResolveMatchType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ResolveMatchesType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ResolveMatchesType.pm new file mode 100644 index 000000000..3e0db0619 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ResolveMatchesType.pm @@ -0,0 +1,115 @@ +package WSDiscovery::Types::ResolveMatchesType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %ResolveMatch_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( ResolveMatch + + ) ], + { + 'ResolveMatch' => \%ResolveMatch_of, + }, + { + 'ResolveMatch' => 'WSDiscovery::Types::ResolveMatchType', + }, + { + + 'ResolveMatch' => 'ResolveMatch', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ResolveMatchesType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ResolveMatchesType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * ResolveMatch + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ResolveMatchesType + ResolveMatch => { # WSDiscovery::Types::ResolveMatchType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + Types => $some_value, # QNameListType + Scopes => { value => $some_value }, + XAddrs => $some_value, # UriListType + MetadataVersion => $some_value, # unsignedInt + }, + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ResolveType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ResolveType.pm new file mode 100644 index 000000000..f1ddd13f5 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ResolveType.pm @@ -0,0 +1,116 @@ +package WSDiscovery::Types::ResolveType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %EndpointReference_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( EndpointReference + + ) ], + { + 'EndpointReference' => \%EndpointReference_of, + }, + { + 'EndpointReference' => 'WSDiscovery::Elements::EndpointReference', + + }, + { + + 'EndpointReference' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ResolveType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ResolveType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * EndpointReference + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::ResolveType + EndpointReference => { # WSDiscovery::Types::EndpointReferenceType + Address => { value => $some_value }, + ReferenceParameters => { # WSDiscovery::Types::ReferenceParametersType + }, + Metadata => { # WSDiscovery::Types::MetadataType + }, + }, + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/ScopesType.pm b/onvif/proxy/lib/WSDiscovery11/Types/ScopesType.pm new file mode 100644 index 000000000..84cdfa057 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/ScopesType.pm @@ -0,0 +1,118 @@ +package WSDiscovery::Types::ScopesType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS = 'WSDiscovery::Types::ScopesType::_ScopesType::XmlAttr'; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use base qw( + SOAP::WSDL::XSD::Typelib::ComplexType + WSDiscovery::Types::UriListType +); + +package WSDiscovery::Types::ScopesType::_ScopesType::XmlAttr; +use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet); + +{ # BLOCK to scope variables + +my %MatchBy_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( + MatchBy + ) ], + { + + MatchBy => \%MatchBy_of, + }, + { + MatchBy => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI', + } +); + +} # end BLOCK + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::ScopesType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +ScopesType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { value => $some_value }, + + + +=head2 attr + +NOTE: Attribute documentation is experimental, and may be inaccurate. +See the correspondent WSDL/XML Schema if in question. + +This class has additional attributes, accessibly via the C method. + +attr() returns an object of the class WSDiscovery::Types::ScopesType::_ScopesType::XmlAttr. + +The following attributes can be accessed on this object via the corresponding +get_/set_ methods: + +=over + +=item * MatchBy + + + +This attribute is of type L. + + +=back + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/SecurityType.pm b/onvif/proxy/lib/WSDiscovery11/Types/SecurityType.pm new file mode 100644 index 000000000..968033307 --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/SecurityType.pm @@ -0,0 +1,111 @@ +package WSDiscovery::Types::SecurityType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS; +undef $XML_ATTRIBUTE_CLASS; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + +my %Sig_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( Sig + + ) ], + { + 'Sig' => \%Sig_of, + }, + { + 'Sig' => 'WSDiscovery::Elements::Sig', + + }, + { + + 'Sig' => '', + } +); + +} # end BLOCK + + + + + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::SecurityType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +SecurityType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + +=item * Sig + +Note: The name of this property has been altered, because it didn't match +perl's notion of variable/subroutine names. The altered name is used in +perl code only, XML output uses the original name: + + + + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::SecurityType + Sig => { # WSDiscovery::Types::SigType + }, + }, + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/SigType.pm b/onvif/proxy/lib/WSDiscovery11/Types/SigType.pm new file mode 100644 index 000000000..71eb613df --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/SigType.pm @@ -0,0 +1,172 @@ +package WSDiscovery::Types::SigType; +use strict; +use warnings; + + +__PACKAGE__->_set_element_form_qualified(0); + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01' }; + +our $XML_ATTRIBUTE_CLASS = 'WSDiscovery::Types::SigType::_SigType::XmlAttr'; + +sub __get_attr_class { + return $XML_ATTRIBUTE_CLASS; +} + +use Class::Std::Fast::Storable constructor => 'none'; +use base qw(SOAP::WSDL::XSD::Typelib::ComplexType); + +Class::Std::initialize(); + +{ # BLOCK to scope variables + + +__PACKAGE__->_factory( + [ qw( + ) ], + { + }, + { + }, + { + + } +); + +} # end BLOCK + + + + +package WSDiscovery::Types::SigType::_SigType::XmlAttr; +use base qw(SOAP::WSDL::XSD::Typelib::AttributeSet); + +{ # BLOCK to scope variables + +my %Scheme_of :ATTR(:get); +my %KeyId_of :ATTR(:get); +my %Refs_of :ATTR(:get); +my %Sig_of :ATTR(:get); + +__PACKAGE__->_factory( + [ qw( + Scheme + KeyId + Refs + Sig + ) ], + { + + Scheme => \%Scheme_of, + + KeyId => \%KeyId_of, + + Refs => \%Refs_of, + + Sig => \%Sig_of, + }, + { + Scheme => 'SOAP::WSDL::XSD::Typelib::Builtin::anyURI', + KeyId => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary', + Refs => 'SOAP::WSDL::XSD::Typelib::Builtin::IDREFS', + Sig => 'SOAP::WSDL::XSD::Typelib::Builtin::base64Binary', + } +); + +} # end BLOCK + + + + +1; + + +=pod + +=head1 NAME + +WSDiscovery::Types::SigType + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined complexType +SigType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + + +=head2 PROPERTIES + +The following properties may be accessed using get_PROPERTY / set_PROPERTY +methods: + +=over + + + +=back + + +=head1 METHODS + +=head2 new + +Constructor. The following data structure may be passed to new(): + + { # WSDiscovery::Types::SigType + }, + + + +=head2 attr + +NOTE: Attribute documentation is experimental, and may be inaccurate. +See the correspondent WSDL/XML Schema if in question. + +This class has additional attributes, accessibly via the C method. + +attr() returns an object of the class WSDiscovery::Types::SigType::_SigType::XmlAttr. + +The following attributes can be accessed on this object via the corresponding +get_/set_ methods: + +=over + +=item * Scheme + + + +This attribute is of type L. + +=item * KeyId + + + +This attribute is of type L. + +=item * Refs + + + +This attribute is of type L. + +=item * Sig + + + +This attribute is of type L. + + +=back + + + + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/lib/WSDiscovery11/Types/UriListType.pm b/onvif/proxy/lib/WSDiscovery11/Types/UriListType.pm new file mode 100644 index 000000000..1a04cfbee --- /dev/null +++ b/onvif/proxy/lib/WSDiscovery11/Types/UriListType.pm @@ -0,0 +1,75 @@ +package WSDiscovery::Types::UriListType; +use strict; +use warnings; + +sub get_xmlns { 'http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01'}; + + +# list derivation +use base qw( + SOAP::WSDL::XSD::Typelib::Builtin::list + SOAP::WSDL::XSD::Typelib::Builtin::anyURI +); + + + + + +1; + +__END__ + +=pod + +=head1 NAME + + + +=head1 DESCRIPTION + +Perl data type class for the XML Schema defined simpleType +UriListType from the namespace http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01. + + + + + +This clase is derived from + SOAP::WSDL::XSD::Typelib::Builtin::anyURI +. + +You may pass the following structure to new(): + + [ $value_1, .. $value_n ] + +All elements of the list must be of the class' base type (or valid arguments +to it's constructor). + + + +=head1 METHODS + +=head2 new + +Constructor. + +=head2 get_value / set_value + +Getter and setter for the simpleType's value. + +=head1 OVERLOADING + +Depending on the simple type's base type, the following operations are overloaded + + Stringification + Numerification + Boolification + +Check L for more information. + +=head1 AUTHOR + +Generated by SOAP::WSDL + +=cut + diff --git a/onvif/proxy/pm_to_blib b/onvif/proxy/pm_to_blib new file mode 100644 index 000000000..e69de29bb diff --git a/onvif/wsdl/analytics.wsdl b/onvif/wsdl/analytics.wsdl new file mode 100644 index 000000000..b2c0f6ae7 --- /dev/null +++ b/onvif/wsdl/analytics.wsdl @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + The capabilities for the analytics service is returned in the Capabilities element. + + + + + + + + + + + + + Indication that the device supports the rules interface and the rules syntax. + + + + + Indication that the device supports the scene analytics module interface. + + + + + Indication that the device produces the cell based scene description + + + + + + + + + + + + + References an existing Video Analytics configuration. The list of available tokens can be obtained + via the Media service GetVideoAnalyticsConfigurations method. + + + + + + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + References the specific rule to be deleted (e.g. "MyLineDetector"). + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + + + + + + + + + + + + Reference to an existing Video Analytics configuration. + + + + + Name of the AnalyticsModule to be deleted. + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + + + + + + + + + + + + Reference to an existing VideoAnalyticsConfiguration. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + List all rules that are supported by the given VideoAnalyticsConfiguration. + The result of this method may depend on the overall Video analytics configuration of the device, + which is available via the current set of profiles. + + + + + + + Add one or more rules to an existing VideoAnalyticsConfiguration. + The available supported types can be retrieved via GetSupportedRules, + where the Name of the supported rule correspond to the type of an rule instance.
+ Pass unique module names which can be later used as reference. + The Parameters of the rules must match those of the corresponding description. +
+ Although this method is mandatory a device implementation must not support adding rules. + Instead it can provide a fixed set of predefined configurations via the media service function + GetCompatibleVideoAnalyticsConfigurations. +
+ + +
+ + + Remove one or more rules from a VideoAnalyticsConfiguration. + + + + + + + List the currently assigned set of rules of a VideoAnalyticsConfiguration. + + + + + + + Modify one or more rules of a VideoAnalyticsConfiguration. The rules are referenced by their names. + + + + +
+ + + Returns the capabilities of the analytics service. The result is returned in a typed answer. + + + + + + List all analytics modules that are supported by the given VideoAnalyticsConfiguration. + The result of this method may depend on the overall Video analytics configuration of the device, + which is available via the current set of profiles. + + + + + + + Add one or more analytics modules to an existing VideoAnalyticsConfiguration. + The available supported types can be retrieved via GetSupportedAnalyticsModules, + where the Name of the supported AnalyticsModules correspond to the type of an AnalyticsModule instance.
+ Pass unique module names which can be later used as reference. The Parameters of the analytics module must match those of the corresponding AnalyticsModuleDescription. +
+ Although this method is mandatory a device implementation must not support adding modules. + Instead it can provide a fixed set of predefined configurations via the media service function + GetCompatibleVideoAnalyticsConfigurations. +
+ The device shall ensure that a corresponding analytics engine starts operation when a client + subscribes directly or indirectly for events produced by the analytics or rule engine or when a + client requests the corresponding scene description stream. + An analytics module must be attached to a Video source using the media profiles before it can be used. + In case differing analytics configurations are attached to the same profile it is undefined which + of the analytics module configuration becomes active if no stream is activated or multiple streams + with different profiles are activated at the same time. +
+ + +
+ + + Remove one or more analytics modules from a VideoAnalyticsConfiguration referenced by their names.
+
+ + +
+ + + List the currently assigned set of analytics modules of a VideoAnalyticsConfiguration. + + + + + + + Modify the settings of one or more analytics modules of a VideoAnalyticsConfiguration. The modules are referenced by their names. + It is allowed to pass only a subset to be modified. + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/onvif/wsdl/b-2.xsd b/onvif/wsdl/b-2.xsd new file mode 100644 index 000000000..6af08aee9 --- /dev/null +++ b/onvif/wsdl/b-2.xsd @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/bf-2.xsd b/onvif/wsdl/bf-2.xsd new file mode 100644 index 000000000..4efefea72 --- /dev/null +++ b/onvif/wsdl/bf-2.xsd @@ -0,0 +1,86 @@ + + + + + + + + + + Get access to the xml: attribute groups for xml:lang as declared on 'schema' + and 'documentation' below + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/br-2.xsd b/onvif/wsdl/br-2.xsd new file mode 100644 index 000000000..3ed96e022 --- /dev/null +++ b/onvif/wsdl/br-2.xsd @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/onvif/wsdl/brw-2.wsdl b/onvif/wsdl/brw-2.wsdl new file mode 100644 index 000000000..675bab2df --- /dev/null +++ b/onvif/wsdl/brw-2.wsdl @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/onvif/wsdl/bw-2.wsdl b/onvif/wsdl/bw-2.wsdl new file mode 100644 index 000000000..fad3f2957 --- /dev/null +++ b/onvif/wsdl/bw-2.wsdl @@ -0,0 +1,450 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/devicemgmt.wsdl b/onvif/wsdl/devicemgmt.wsdl new file mode 100644 index 000000000..d7f7379c1 --- /dev/null +++ b/onvif/wsdl/devicemgmt.wsdl @@ -0,0 +1,3786 @@ + + + + + + + + + + + + + + Indicates if the service capabilities (untyped) should be included in the response. + + + + + + + + + + + Each Service element contains information about one service. + + + + + + + + + + + Namespace of the service being described. This parameter allows to match the service capabilities to the service. Note that only one set of capabilities is supported per namespace. + + + + + The transport addresses where the service can be reached. The scheme and IP part shall match the one used in the request (i.e. the GetServices request). + + + + + + + + The placeholder for the service capabilities. The service capability element shall be returned here. For example for the device service that would be the tds:DeviceServiceCapabilities element (not complextype). + + + + + + + + The version of the service (not the ONVIF core spec version). + + + + + + + + + + + + + + + + + + The capabilities for the device service is returned in the Capabilities element. + + + + + + + + + + + Network capabilities. + + + + + Security capabilities. + + + + + System capabilities. + + + + + Capabilities that do not fit in any of the other categories. + + + + + + + + + + Indicates support for IP filtering. + + + + + Indicates support for zeroconf. + + + + + Indicates support for IPv6. + + + + + Indicates support for dynamic DNS configuration. + + + + + Indicates support for IEEE 802.11 configuration. + + + + + Indicates the maximum number of Dot1X configurations supported by the device + + + + + Indicates support for retrieval of hostname from DHCP. + + + + + Maximum number of NTP servers supported by the devices SetNTP command. + + + + + Indicates support for Stateful IPv6 DHCP. + + + + + + + + + + + + Indicates support for TLS 1.0. + + + + + Indicates support for TLS 1.1. + + + + + Indicates support for TLS 1.2. + + + + + Indicates support for onboard key generation. + + + + + Indicates support for access policy configuration. + + + + + Indicates support for the ONVIF default access policy. + + + + + Indicates support for IEEE 802.1X configuration. + + + + + Indicates support for remote user configuration. Used when accessing another device. + + + + + Indicates support for WS-Security X.509 token. + + + + + Indicates support for WS-Security SAML token. + + + + + Indicates support for WS-Security Kerberos token. + + + + + Indicates support for WS-Security Username token. + + + + + Indicates support for WS over HTTP digest authenticated communication layer. + + + + + Indicates support for WS-Security REL token. + + + + + EAP Methods supported by the device. The int values refer to the IANA EAP Registry. + + + + + The maximum number of users that the device supports. + + + + + + + + + Indicates support for WS Discovery resolve requests. + + + + + Indicates support for WS-Discovery Bye. + + + + + Indicates support for remote discovery. + + + + + Indicates support for system backup through MTOM. + + + + + Indicates support for retrieval of system logging through MTOM. + + + + + Indicates support for firmware upgrade through MTOM. + + + + + Indicates support for system backup through MTOM. + + + + + Indicates support for system backup through HTTP. + + + + + Indicates support for retrieval of system logging through HTTP. + + + + + Indicates support for retrieving support information through HTTP. + + + + + + + + + Lists of commands supported by SendAuxiliaryCommand. + + + + + + + + + + + + + + + + The manufactor of the device. + + + + + The device model. + + + + + The firmware version in the device. + + + + + The serial number of the device. + + + + + The hardware ID of the device. + + + + + + + + + + + + Defines if the date and time is set via NTP or manually. + + + + + Automatically adjust Daylight savings if defined in TimeZone. + + + + + The time zone in POSIX 1003.1 format + + + + + Date and time in UTC. If time is obtained via NTP, UTCDateTime has no meaning + + + + + + + + + + + + + + + + + + + + + + + Contains information whether system date and time are set manually or by NTP, daylight savings is on or off, time zone in POSIX 1003.1 format and system date and time in UTC and also local system date and time. + + + + + + + + + + + + Specifies the factory default action type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains the reboot message sent by the device. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains the arbitary device diagnostics information. + + + + + + + + + + + + Specifies the type of system log to get. + + + + + + + + + + + Contains the system log information. + + + + + + + + + + + + + + + + + + Contains a list of URI definining the device scopes. Scope parameters can be of two types: fixed and configurable. Fixed parameters can not be altered. + + + + + + + + + + + + Contains a list of scope parameters that will replace all existing configurable scope parameters. + + + + + + + + + + + + + + + + + + Contains a list of new configurable scope parameters that will be added to the existing configurable scope. + + + + + + + + + + + + + + + + + + Contains a list of URIs that should be removed from the device scope.
+ Note that the response message always will match the request or an error will be returned. The use of the response is for that reason deprecated. +
+
+
+
+
+
+ + + + + + Contains a list of URIs that has been removed from the device scope + + + + + + + + + + + + + + + + + + + Indicator of discovery mode: Discoverable, NonDiscoverable. + + + + + + + + + + + + + + Indicator of discovery mode: Discoverable, NonDiscoverable. + + + + + + + + + + + + + + + + + + + + + + + + + + Indicator of discovery mode: Discoverable, NonDiscoverable. + + + + + + + + + + + + + + Indicator of discovery mode: Discoverable, NonDiscoverable. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains a list of the onvif users and following information is included in each entry: username and user level. + + + + + + + + + + + + Creates new device users and corresponding credentials. Each user entry includes: username, password and user level. Either all users are created successfully or a fault message MUST be returned without creating any user. If trying to create several users with exactly the same username the request is rejected and no users are created. If password is missing, then fault message Too weak password is returned. + + + + + + + + + + + + + + + + + + Deletes users on an device and there may exist users that cannot be deleted to ensure access to the unit. Either all users are deleted successfully or a fault message MUST be returned and no users be deleted. If a username exists multiple times in the request, then a fault message is returned. + + + + + + + + + + + + + + + + + + Updates the credentials for one or several users on an device. Either all change requests are processed successfully or a fault message MUST be returned. If the request contains the same username multiple times, a fault message is returned. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + List of categories to retrieve capability information on. + + + + + + + + + + + + + Capability information. + + + + + + + + + + + + + + + + + + + Contains the hostname information. + + + + + + + + + + + + The hostname to set. + + + + + + + + + + + + + + + + + + True if the hostname shall be obtained via DHCP. + + + + + + + + + + + + Indicates whether or not a reboot is required after configuration updates. + + + + + + + + + + + + + + + + + + + + DNS information. + + + + + + + + + + + + + + Indicate if the DNS address is to be retrieved using DHCP. + + + + + + + DNS search domain. + + + + + + + DNS address(es) set manually. + + + + + + + + + + + + + + + + + + + + + + + + + + NTP information. + + + + + + + + + + + + + + Indicate if NTP address information is to be retrieved using DHCP. + + + + + + + Manual NTP settings. + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic DNS information. + + + + + + + + + + + + + + Dynamic DNS type. + + + + + + + DNS name. + + + + + + + DNS record time to live. + + + + + + + + + + + + + + + + + + + + + + + + + + List of network interfaces. + + + + + + + + + + + + + + Symbolic network interface name. + + + + + + + Network interface name. + + + + + + + + + + + + + Indicates whether or not a reboot is required after configuration updates. + If a device responds with RebootNeeded set to false, the device can be reached + via the new IP address without further action. A client should be aware that a device + may not be responsive for a short period of time until it signals availability at + the new address via the discovery Hello messages. + If a device responds with RebootNeeded set to true, it will be further available under + its previous IP address. The settings will only be activated when the device is + rebooted via the SystemReboot command. + + + + + + + + + + + + + + + + + + + Contains an array of defined protocols supported by the device. There are three protocols defined; HTTP, HTTPS and RTSP. The following parameters can be retrieved for each protocol: port and enable/disable. + + + + + + + + + + + + Configures one or more defined network protocols supported by the device. There are currently three protocols defined; HTTP, HTTPS and RTSP. The following parameters can be set for each protocol: port and enable/disable. + + + + + + + + + + + + + + + + + + + + + + + + Gets the default IPv4 and IPv6 gateway settings from the device. + + + + + + + + + + + + Sets IPv4 gateway address used as default setting. + + + + + Sets IPv6 gateway address used as default setting. + + + + + + + + + + + + + + + + + + + + + + + + Contains the zero-configuration. + + + + + + + + + + + + Unique identifier referencing the physical interface. + + + + + Specifies if the zero-configuration should be enabled or not. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Certificate id. + + + + + Identification of the entity associated with the public-key. + + + + + Certificate validity start date. + + + + + Certificate expiry start date. + + + + + + + + + + + + base64 encoded DER representation of certificate. + + + + + + + + + + + + + + + + + + + + Id and base64 encoded DER representation of all available certificates. + + + + + + + + + + + + + + + + + + + + Indicates if a certificate is used in an optional HTTPS configuration of the device. + + + + + + + + + + + + + + Indicates if a certificate is to be used in an optional HTTPS configuration of the device. + + + + + + + + + + + + + + + + + + + + List of ids of certificates to delete. + + + + + + + + + + + + + + + + + + + + List of ids of certificates to delete. + + + + + + + Relative Dinstinguished Name(RDN) CommonName(CN). + + + + + + + Optional base64 encoded DER attributes. + + + + + + + + + + + + + base64 encoded DER representation of certificate. + + + + + + + + + + + + + + Optional id and base64 encoded DER representation of certificate. + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether or not client certificates are required by device. + + + + + + + + + + + + + + Indicates whether or not client certificates are required by device. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns information about services on the device. + + + + + Returns the capabilities of the device service. The result is returned in a typed answer. + + + + + This operation gets basic device information from the device. + + + + + This operation sets the device system date and time. The device shall support the + configuration of the daylight saving setting and of the manual system date and time (if + applicable) or indication of NTP time (if applicable) through the SetSystemDateAndTime + command.
+ If system time and date are set manually, the client shall include UTCDateTime in the request.
+ A TimeZone token which is not formed according to the rules of IEEE 1003.1 section 8.3 is considered as invalid timezone.
+ The DayLightSavings flag should be set to true to activate any DST settings of the TimeZone string. + Clear the DayLightSavings flag if the DST portion of the TimeZone settings should be ignored. +
+ + +
+ + This operation gets the device system date and time. The device shall support the return of + the daylight saving setting and of the manual system date and time (if applicable) or indication + of NTP time (if applicable) through the GetSystemDateAndTime command.
+ A device shall provide the UTCDateTime information.
+ + +
+ + This operation reloads the parameters on the device to their factory default values. + + + + + This operation upgrades a device firmware version. After a successful upgrade the response + message is sent before the device reboots. The device should support firmware upgrade + through the UpgradeSystemFirmware command. The exact format of the firmware data is + outside the scope of this standard. + + + + + This operation reboots the device. + + + + + This operation restores the system backup configuration files(s) previously retrieved from a + device. The device should support restore of backup configuration file(s) through the + RestoreSystem command. The exact format of the backup configuration file(s) is outside the + scope of this standard. If the command is supported, it shall accept backup files returned by + the GetSystemBackup command. + + + + + This operation is retrieves system backup configuration file(s) from a device. The device + should support return of back up configuration file(s) through the GetSystemBackup command. + The backup is returned with reference to a name and mime-type together with binary data. + The exact format of the backup configuration files is outside the scope of this standard. + + + + + This operation gets a system log from the device. The exact format of the system logs is outside the scope of this standard. + + + + + This operation gets arbitary device diagnostics information from the device. + + + + + This operation requests the scope parameters of a device. The scope parameters are used in + the device discovery to match a probe message, see Section 7. The Scope parameters are of + two different types:
    +
  • Fixed
  • +
  • Configurable
  • +
+ Fixed scope parameters are permanent device characteristics and cannot be removed through the device management interface. + The scope type is indicated in the scope list returned in the get scope parameters response. A device shall support + retrieval of discovery scope parameters through the GetScopes command. As some scope parameters are mandatory, + the device shall return a non-empty scope list in the response.
+ + +
+ + This operation sets the scope parameters of a device. The scope parameters are used in the + device discovery to match a probe message. + This operation replaces all existing configurable scope parameters (not fixed parameters). If + this shall be avoided, one should use the scope add command instead. The device shall + support configuration of discovery scope parameters through the SetScopes command. + + + + + This operation adds new configurable scope parameters to a device. The scope parameters + are used in the device discovery to match a probe message. The device shall + support addition of discovery scope parameters through the AddScopes command. + + + + + This operation deletes scope-configurable scope parameters from a device. The scope + parameters are used in the device discovery to match a probe message, see Section 7. The + device shall support deletion of discovery scope parameters through the RemoveScopes + command. + Table + + + + + This operation gets the discovery mode of a device. See Section 7.2 for the definition of the + different device discovery modes. The device shall support retrieval of the discovery mode + setting through the GetDiscoveryMode command. + + + + + This operation sets the discovery mode operation of a device. See Section 7.2 for the + definition of the different device discovery modes. The device shall support configuration of + the discovery mode setting through the SetDiscoveryMode command. + + + + + This operation gets the remote discovery mode of a device. See Section 7.4 for the definition + of remote discovery extensions. A device that supports remote discovery shall support + retrieval of the remote discovery mode setting through the GetRemoteDiscoveryMode + command. + + + + + This operation sets the remote discovery mode of operation of a device. See Section 7.4 for + the definition of remote discovery remote extensions. A device that supports remote discovery + shall support configuration of the discovery mode setting through the + SetRemoteDiscoveryMode command. + + + + + This operation gets the remote DP address or addresses from a device. If the device supports + remote discovery, as specified in Section 7.4, the device shall support retrieval of the remote + DP address(es) through the GetDPAddresses command. + + + + + This operation sets the remote DP address or addresses on a device. If the device supports + remote discovery, as specified in Section 7.4, the device shall support configuration of the + remote DP address(es) through the SetDPAddresses command. + + + + + A client can ask for the device service endpoint reference address property that can be used + to derive the password equivalent for remote user operation. The device shall support the + GetEndpointReference command returning the address property of the device service + endpoint reference. + + + + + This operation returns the configured remote user (if any). A device supporting remote user + handling shall support this operation. The user is only valid for the WS-UserToken profile or + as a HTTP / RTSP user.
+ The algorithm to use for deriving the password is described in section 5.12.2.1 of the core specification.
+ + +
+ + This operation sets the remote user. A device supporting remote user handling shall support this + operation. The user is only valid for the WS-UserToken profile or as a HTTP / RTSP user.
+ The password that is set shall always be the original (not derived) password.
+ If UseDerivedPassword is set password derivation shall be done by the device when connecting to a + remote device.The algorithm to use for deriving the password is described in section 5.12.2.1 of the core specification.
+ To remove the remote user SetRemoteUser should be called without the RemoteUser parameter.
+ + +
+ + This operation lists the registered users and corresponding credentials on a device. The + device shall support retrieval of registered device users and their credentials for the user + token through the GetUsers command. + + + + + This operation creates new device users and corresponding credentials on a device for authentication purposes. + The device shall support creation of device users and their credentials through the CreateUsers + command. Either all users are created successfully or a fault message shall be returned + without creating any user.
+ ONVIF compliant devices are recommended to support password length of at least 28 bytes, + as clients may follow the password derivation mechanism which results in 'password + equivalent' of length 28 bytes, as described in section 3.1.2 of the ONVIF security white paper.
+ + +
+ + This operation deletes users on a device. The device shall support deletion of device users and their credentials + through the DeleteUsers command. A device may have one or more fixed users + that cannot be deleted to ensure access to the unit. Either all users are deleted successfully or a + fault message shall be returned and no users be deleted. + + + + + This operation updates the settings for one or several users on a device for authentication purposes. + The device shall support update of device users and their credentials through the SetUser command. + Either all change requests are processed successfully or a fault message shall be returned and no change requests be processed. + + + + + It is possible for an endpoint to request a URL that can be used to retrieve the complete + schema and WSDL definitions of a device. The command gives in return a URL entry point + where all the necessary product specific WSDL and schema definitions can be retrieved. The + device shall provide a URL for WSDL and schema download through the GetWsdlUrl command. + + + + + Any endpoint can ask for the capabilities of a device using the capability exchange request + response operation. The device shall indicate all its ONVIF compliant capabilities through the + GetCapabilities command. + The capability list includes references to the addresses (XAddr) of the service implementing + the interface operations in the category. Apart from the addresses, the + capabilities only reflect optional functions. + + + + + This operation is used by an endpoint to get the hostname from a device. The device shall + return its hostname configurations through the GetHostname command. + + + + + This operation sets the hostname on a device. It shall be possible to set the device hostname + configurations through the SetHostname command.
+ A device shall accept string formated according to RFC 1123 section 2.1 or alternatively to RFC 952, + other string shall be considered as invalid strings. +
+ + +
+ + This operation controls whether the hostname is set manually or retrieved via DHCP. + + + + + This operation gets the DNS settings from a device. The device shall return its DNS + configurations through the GetDNS command. + + + + + This operation sets the DNS settings on a device. It shall be possible to set the device DNS + configurations through the SetDNS command. + + + + + This operation gets the NTP settings from a device. If the device supports NTP, it shall be + possible to get the NTP server settings through the GetNTP command. + + + + + This operation sets the NTP settings on a device. If the device supports NTP, it shall be + possible to set the NTP server settings through the SetNTP command.
+ A device shall accept string formated according to RFC 1123 section 2.1 or alternatively to RFC 952, + other string shall be considered as invalid strings.
+ Changes to the NTP server list will not affect the clock mode DateTimeType. Use SetSystemDateAndTime to activate NTP operation. +
+ + +
+ + This operation gets the dynamic DNS settings from a device. If the device supports dynamic + DNS as specified in [RFC 2136] and [RFC 4702], it shall be possible to get the type, name + and TTL through the GetDynamicDNS command. + + + + + This operation sets the dynamic DNS settings on a device. If the device supports dynamic + DNS as specified in [RFC 2136] and [RFC 4702], it shall be possible to set the type, name + and TTL through the SetDynamicDNS command. + + + + + This operation gets the network interface configuration from a device. The device shall + support return of network interface configuration settings as defined by the NetworkInterface + type through the GetNetworkInterfaces command. + + + + + This operation sets the network interface configuration on a device. The device shall support + network configuration of supported network interfaces through the SetNetworkInterfaces + command.
+ For interoperability with a client unaware of the IEEE 802.11 extension a device shall retain + its IEEE 802.11 configuration if the IEEE 802.11 configuration element isn’t present in the + request.
+ + +
+ + This operation gets defined network protocols from a device. The device shall support the + GetNetworkProtocols command returning configured network protocols. + + + + + This operation configures defined network protocols on a device. The device shall support + configuration of defined network protocols through the SetNetworkProtocols command. + + + + + This operation gets the default gateway settings from a device. The device shall support the + GetNetworkDefaultGateway command returning configured default gateway address(es). + + + + + This operation sets the default gateway settings on a device. The device shall support + configuration of default gateway through the SetNetworkDefaultGateway command. + + + + + This operation gets the zero-configuration from a device. If the device supports dynamic IP + configuration according to [RFC3927], it shall support the return of IPv4 zero configuration + address and status through the GetZeroConfiguration command.
+ Devices supporting zero configuration on more than one interface shall use the extension to list the additional interface settings.
+ + +
+ + This operation sets the zero-configuration. Use GetCapalities to get if zero-zero-configuration is supported or not. + + + + + This operation gets the IP address filter settings from a device. If the device supports device + access control based on IP filtering rules (denied or accepted ranges of IP addresses), the + device shall support the GetIPAddressFilter command. + + + + + This operation sets the IP address filter settings on a device. If the device supports device + access control based on IP filtering rules (denied or accepted ranges of IP addresses), the + device shall support configuration of IP filtering rules through the SetIPAddressFilter + command. + + + + + This operation adds an IP filter address to a device. If the device supports device access + control based on IP filtering rules (denied or accepted ranges of IP addresses), the device + shall support adding of IP filtering addresses through the AddIPAddressFilter command. + + + + + This operation deletes an IP filter address from a device. If the device supports device access + control based on IP filtering rules (denied or accepted ranges of IP addresses), the device + shall support deletion of IP filtering addresses through the RemoveIPAddressFilter command. + + + + + Access to different services and sub-sets of services should be subject to access control. The + WS-Security framework gives the prerequisite for end-point authentication. Authorization + decisions can then be taken using an access security policy. This standard does not mandate + any particular policy description format or security policy but this is up to the device + manufacturer or system provider to choose policy and policy description format of choice. + However, an access policy (in arbitrary format) can be requested using this command. If the + device supports access policy settings based on WS-Security authentication, then the device + shall support this command. + + + + + This command sets the device access security policy (for more details on the access security + policy see the Get command). If the device supports access policy settings + based on WS-Security authentication, then the device shall support this command. + + + + + This operation generates a private/public key pair and also can create a self-signed device + certificate as a result of key pair generation. The certificate is created using a suitable + onboard key pair generation mechanism.
+ If a device supports onboard key pair generation, the device that supports TLS shall support + this certificate creation command. And also, if a device supports onboard key pair generation, + the device that support IEEE 802.1X shall support this command for the purpose of key pair + generation. Certificates and key pairs are identified using certificate IDs. These IDs are either + chosen by the certificate generation requester or by the device (in case that no ID value is + given).
+ + +
+ + This operation gets all device server certificates (including self-signed) for the purpose of TLS + authentication and all device client certificates for the purpose of IEEE 802.1X authentication. + This command lists only the TLS server certificates and IEEE 802.1X client certificates for the + device (neither trusted CA certificates nor trusted root certificates). The certificates are + returned as binary data. A device that supports TLS shall support this command and the + certificates shall be encoded using ASN.1 [X.681], [X.682], [X.683] DER [X.690] encoding + rules. + + + + + This operation is specific to TLS functionality. This operation gets the status + (enabled/disabled) of the device TLS server certificates. A device that supports TLS shall + support this command. + + + + + This operation is specific to TLS functionality. This operation sets the status (enable/disable) + of the device TLS server certificates. A device that supports TLS shall support this command. + Typically only one device server certificate is allowed to be enabled at a time. + + + + + This operation deletes a certificate or multiple certificates. The device MAY also delete a + private/public key pair which is coupled with the certificate to be deleted. The device that + support either TLS or IEEE 802.1X shall support the deletion of a certificate or multiple + certificates through this command. Either all certificates are deleted successfully or a fault + message shall be returned without deleting any certificate. + + + + + This operation requests a PKCS #10 certificate signature request from the device. The + returned information field shall be either formatted exactly as specified in [PKCS#10] or PEM + encoded [PKCS#10] format. In order for this command to work, the device must already have + a private/public key pair. This key pair should be referred by CertificateID as specified in the + input parameter description. This CertificateID refers to the key pair generated using + CreateCertificate command.
+ A device that support onboard key pair generation that supports either TLS or IEEE 802.1X + using client certificate shall support this command.
+ + +
+ + TLS server certificate(s) or IEEE 802.1X client certificate(s) created using the PKCS#10 + certificate request command can be loaded into the device using this command (see Section + 8.4.13). The certificate ID in the request shall be present. The device may sort the received + certificate(s) based on the public key and subject information in the certificate(s). + The certificate ID in the request will be the ID value the client wish to have. The device is + supposed to scan the generated key pairs present in the device to identify which is the + correspondent key pair with the loaded certificate and then make the link between the + certificate and the key pair.
+ A device that supports onboard key pair generation that support either TLS or IEEE 802.1X + shall support this command.
+ The certificates shall be encoded using ASN.1 [X.681], [X.682], [X.683] DER [X.690] encoding + rules.
+ This command is applicable to any device type, although the parameter name is called for + historical reasons NVTCertificate.
+ + +
+ + This operation is specific to TLS functionality. This operation gets the status + (enabled/disabled) of the device TLS client authentication. A device that supports TLS shall + support this command. + + + + + This operation is specific to TLS functionality. This operation sets the status + (enabled/disabled) of the device TLS client authentication. A device that supports TLS shall + support this command. + + + + + This operation gets a list of all available relay outputs and their settings.
+ This method has been depricated with version 2.0. Refer to the DeviceIO service.
+ + +
+ + This operation sets the settings of a relay output. +
This method has been depricated with version 2.0. Refer to the DeviceIO service.
+ + +
+ + This operation sets the state of a relay output. +
This method has been depricated with version 2.0. Refer to the DeviceIO service.
+ + +
+ + Manage auxiliary commands supported by a device, such as controlling an Infrared (IR) lamp, + a heater or a wiper or a thermometer that is connected to the device.
+ The supported commands can be retrieved via the AuxiliaryCommands capability.
+ Although the name of the auxiliary commands can be freely defined, commands starting with the prefix tt: are + reserved to define frequently used commands and these reserved commands shall all share the "tt:command|parameter" syntax. +
    +
  • tt:Wiper|On – Request to start the wiper.
  • +
  • tt:Wiper|Off – Request to stop the wiper.
  • +
  • tt:Washer|On – Request to start the washer.
  • +
  • tt:Washer|Off – Request to stop the washer.
  • +
  • tt:WashingProcedure|On – Request to start the washing procedure.
  • +
  • tt: WashingProcedure |Off – Request to stop the washing procedure.
  • +
  • tt:IRLamp|On – Request to turn ON an IR illuminator attached to the unit.
  • +
  • tt:IRLamp|Off – Request to turn OFF an IR illuminator attached to the unit.
  • +
  • tt:IRLamp|Auto – Request to configure an IR illuminator attached to the unit so that it automatically turns ON and OFF.
  • +
+ A device that indicates auxiliary service capability shall support this command.
+ + +
+ + CA certificates will be loaded into a device and be used for the sake of following two cases. + The one is for the purpose of TLS client authentication in TLS server function. The other one + is for the purpose of Authentication Server authentication in IEEE 802.1X function. This + operation gets all CA certificates loaded into a device. A device that supports either TLS client + authentication or IEEE 802.1X shall support this command and the returned certificates shall + be encoded using ASN.1 [X.681], [X.682], [X.683] DER [X.690] encoding rules. + + + + + There might be some cases that a Certificate Authority or some other equivalent creates a + certificate without having PKCS#10 certificate signing request. In such cases, the certificate + will be bundled in conjunction with its private key. This command will be used for such use + case scenarios. The certificate ID in the request is optionally set to the ID value the client + wish to have. If the certificate ID is not specified in the request, device can choose the ID + accordingly.
+ This operation imports a private/public key pair into the device. + The certificates shall be encoded using ASN.1 [X.681], [X.682], [X.683] DER [X.690] encoding + rules.
+ A device that does not support onboard key pair generation and support either TLS or IEEE + 802.1X using client certificate shall support this command. A device that support onboard key + pair generation MAY support this command. The security policy of a device that supports this + operation should make sure that the private key is sufficiently protected.
+ + +
+ + This operation requests the information of a certificate specified by certificate ID. The device + should respond with its “Issuer DN”, “Subject DN”, “Key usage”, "Extended key usage”, “Key + Length”, “Version”, “Serial Number”, “Signature Algorithm” and “Validity” data as the + information of the certificate, as long as the device can retrieve such information from the + specified certificate.
+ A device that supports either TLS or IEEE 802.1X should support this command.
+ + +
+ + This command is used when it is necessary to load trusted CA certificates or trusted root + certificates for the purpose of verification for its counterpart i.e. client certificate verification in + TLS function or server certificate verification in IEEE 802.1X function.
+ A device that support either TLS or IEEE 802.1X shall support this command. As for the + supported certificate format, either DER format or PEM format is possible to be used. But a + device that support this command shall support at least DER format as supported format type. + The device may sort the received certificate(s) based on the public key and subject + information in the certificate(s). Either all CA certificates are loaded successfully or a fault + message shall be returned without loading any CA certificate.
+ + +
+ + This operation newly creates IEEE 802.1X configuration parameter set of the device. The + device shall support this command if it supports IEEE 802.1X. If the device receives this + request with already existing configuration token (Dot1XConfigurationToken) specification, the + device should respond with 'ter:ReferenceToken ' error to indicate there is some configuration + conflict. + + + + + While the CreateDot1XConfiguration command is trying to create a new configuration + parameter set, this operation modifies existing IEEE 802.1X configuration parameter set of + the device. A device that support IEEE 802.1X shall support this command. + + + + + This operation gets one IEEE 802.1X configuration parameter set from the device by + specifying the configuration token (Dot1XConfigurationToken).
+ A device that supports IEEE 802.1X shall support this command. + Regardless of whether the 802.1X method in the retrieved configuration has a password or + not, the device shall not include the Password element in the response.
+ + +
+ + This operation gets all the existing IEEE 802.1X configuration parameter sets from the device. + The device shall respond with all the IEEE 802.1X configurations so that the client can get to + know how many IEEE 802.1X configurations are existing and how they are configured.
+ A device that support IEEE 802.1X shall support this command.
+ Regardless of whether the 802.1X method in the retrieved configuration has a password or + not, the device shall not include the Password element in the response.
+ + +
+ + This operation deletes an IEEE 802.1X configuration parameter set from the device. Which + configuration should be deleted is specified by the 'Dot1XConfigurationToken' in the request. + A device that support IEEE 802.1X shall support this command. + + + + + This operation returns the IEEE802.11 capabilities. The device shall support + this operation. + + + + + This operation returns the status of a wireless network interface. The device shall support this + command. + + + + + This operation returns a lists of the wireless networks in range of the device. A device should + support this operation. + + + + + This operation is used to retrieve URIs from which system information may be downloaded + using HTTP. URIs may be returned for the following system information:
+ System Logs. Multiple system logs may be returned, of different types. The exact format of + the system logs is outside the scope of this specification.
+ Support Information. This consists of arbitrary device diagnostics information from a device. + The exact format of the diagnostic information is outside the scope of this specification.
+ System Backup. The received file is a backup file that can be used to restore the current + device configuration at a later date. The exact format of the backup configuration file is + outside the scope of this specification.
+ If the device allows retrieval of system logs, support information or system backup data, it + should make them available via HTTP GET. If it does, it shall support the GetSystemUris + command.
+ + +
+ + This operation initiates a firmware upgrade using the HTTP POST mechanism. The response + to the command includes an HTTP URL to which the upgrade file may be uploaded. The + actual upgrade takes place as soon as the HTTP POST operation has completed. The device + should support firmware upgrade through the StartFirmwareUpgrade command. The exact + format of the firmware data is outside the scope of this specification. + Firmware upgrade over HTTP may be achieved using the following steps:
    +
  1. Client calls StartFirmwareUpgrade.
  2. +
  3. Server responds with upload URI and optional delay value.
  4. +
  5. Client waits for delay duration if specified by server.
  6. +
  7. Client transmits the firmware image to the upload URI using HTTP POST.
  8. +
  9. Server reprograms itself using the uploaded image, then reboots.
  10. +
+ If the firmware upgrade fails because the upgrade file was invalid, the HTTP POST response + shall be “415 Unsupported Media Type”. If the firmware upgrade fails due to an error at the + device, the HTTP POST response shall be “500 Internal Server Error”.
+ The value of the Content-Type header in the HTTP POST request shall be “application/octetstream”.
+ + +
+ + This operation initiates a system restore from backed up configuration data using the HTTP + POST mechanism. The response to the command includes an HTTP URL to which the backup + file may be uploaded. The actual restore takes place as soon as the HTTP POST operation + has completed. Devices should support system restore through the StartSystemRestore + command. The exact format of the backup configuration data is outside the scope of this + specification.
+ System restore over HTTP may be achieved using the following steps:
    +
  1. Client calls StartSystemRestore.
  2. +
  3. Server responds with upload URI.
  4. +
  5. Client transmits the configuration data to the upload URI using HTTP POST.
  6. +
  7. Server applies the uploaded configuration, then reboots if necessary.
  8. +
+ If the system restore fails because the uploaded file was invalid, the HTTP POST response + shall be “415 Unsupported Media Type”. If the system restore fails due to an error at the + device, the HTTP POST response shall be “500 Internal Server Error”.
+ The value of the Content-Type header in the HTTP POST request shall be “application/octetstream”.
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/onvif/wsdl/media.wsdl b/onvif/wsdl/media.wsdl new file mode 100644 index 000000000..de3fdb30d --- /dev/null +++ b/onvif/wsdl/media.wsdl @@ -0,0 +1,3688 @@ + + + + + + + + + + + + + + + + + + + + The capabilities for the media service is returned in the Capabilities element. + + + + + + + + + + + Media profile capabilities. + + + + + Streaming capabilities. + + + + + + + Indicates if GetSnapshotUri is supported. + + + + + Indicates whether or not Rotation feature is supported. + + + + + Indicates the support for changing video source mode. + + + + + Indicates if OSD is supported. + + + + + + + + + + + + + Maximum number of profiles supported. + + + + + + + + + + + + Indicates support for RTP multicast. + + + + + Indicates support for RTP over TCP. + + + + + Indicates support for RTP/RTSP/TCP. + + + + + Indicates support for non aggregate RTSP control. + + + + + Indicates the device does not support live media streaming via RTSP. + + + + + + + + + + + + + + + + + List of existing Video Sources + + + + + + + + + + + + + + + + + + List of existing Audio Sources + + + + + + + + + + + + + + + + + + List of existing Audio Outputs + + + + + + + + + + + + friendly name of the profile to be created + + + + + Optional token, specifying the unique identifier of the new profile.
A device supports at least a token length of 12 characters and characters "A-Z" | "a-z" | "0-9" | "-.".
+
+
+
+
+
+ + + + + + returns the new created profile + + + + + + + + + + + + this command requests a specific profile + + + + + + + + + + + returns the requested media profile + + + + + + + + + + + + + + + + + + + lists all profiles that exist in the media service + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the VideoEncoderConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +VideoEncoderConfiguration shall be removed. + + + + + + + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the VideoSourceConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +VideoSourceConfiguration shall be removed. + + + + + + + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the AudioEncoderConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +AudioEncoderConfiguration shall be removed. + + + + + + + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the AudioSourceConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +AudioSourceConfiguration shall be removed. + + + + + + + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the PTZConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +PTZConfiguration shall be removed. + + + + + + + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the VideoAnalyticsConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +VideoAnalyticsConfiguration shall be removed. + + + + + + + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the MetadataConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +MetadataConfiguration shall be removed. + + + + + + + + + + + + + + + + + + Reference to the profile where the configuration should be added + + + + + Contains a reference to the AudioOutputConfiguration to add + + + + + + + + + + + + + + + + + + Contains a reference to the media profile from which the +AudioOutputConfiguration shall be removed. + + + + + + + + + + + + + + + + + + This element contains a reference to the profile where the configuration should be added. + + + + + This element contains a reference to the AudioDecoderConfiguration to add. + + + + + + + + + + + + + + + + + + This element contains a reference to the media profile from which the AudioDecoderConfiguration shall be removed. + + + + + + + + + + + + + + + + + + This element contains a reference to the profile that should be deleted. + + + + + + + + + + + + + + + + + + + + + + + + + + This element contains a list of video encoder configurations. + + + + + + + + + + + + + + + + + + This element contains a list of video source configurations. + + + + + + + + + + + + + + + + + + This element contains a list of audio encoder configurations. + + + + + + + + + + + + + + + + + + This element contains a list of audio source configurations. + + + + + + + + + + + + + + + + + + This element contains a list of VideoAnalytics configurations. + + + + + + + + + + + + + + + + + + This element contains a list of metadata configurations + + + + + + + + + + + + + + + + + + + This element contains a list of audio output configurations + + + + + + + + + + + + + + + + + + This element contains a list of audio decoder configurations + + + + + + + + + + + + Token of the requested video source configuration. + + + + + + + + + + + + The requested video source configuration. + + + + + + + + + + + + Token of the requested video encoder configuration. + + + + + + + + + + + The requested video encoder configuration. + + + + + + + + + + + + Token of the requested audio source configuration. + + + + + + + + + + + The requested audio source configuration. + + + + + + + + + + + + Token of the requested audio encoder configuration. + + + + + + + + + + + The requested audio encoder configuration + + + + + + + + + + + + Token of the requested video analytics configuration. + + + + + + + + + + + The requested video analytics configuration. + + + + + + + + + + + + Token of the requested metadata configuration. + + + + + + + + + + + The requested metadata configuration. + + + + + + + + + + + + + Token of the requested audio output configuration. + + + + + + + + + + + + The requested audio output configuration. + + + + + + + + + + + + Token of the requested audio decoder configuration. + + + + + + + + + + + + The requested audio decoder configuration + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of video encoder configurations that are compatible with the specified media profile. + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of video source configurations that are compatible with the specified media profile. + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of audio encoder configurations that are compatible with the specified media profile. + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of audio source configurations that are compatible with the specified media profile. + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of video analytics configurations that are compatible with the specified media profile. + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of metadata configurations that are compatible with the specified media profile. + + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of audio output configurations that are compatible with the specified media profile. + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + Contains a list of audio decoder configurations that are compatible with the specified media profile. + + + + + + + + + + + + + + + + + Contains the modified video encoder configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + Contains the modified video source configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + Contains the modified audio encoder configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + Contains the modified audio source configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + Contains the modified video analytics configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + Contains the modified metadata configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + + Contains the modified audio output configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + Contains the modified audio decoder configuration. The configuration shall exist in the device. + + + + + The ForcePersistence element is obsolete and should always be assumed to be true. + + + + + + + + + + + + + + + + + + Optional video source configurationToken that specifies an existing configuration that the options are intended for. + + + + + Optional ProfileToken that specifies an existing media profile that the options shall be compatible with. + + + + + + + + + + + This message contains the video source configuration options. If a video source configuration is specified, the options shall concern that particular configuration. If a media profile is specified, the options shall be compatible with that media profile. If no tokens are specified, the options shall be considered generic for the device. + + + + + + + + + + + + Optional video encoder configuration token that specifies an existing configuration that the options are intended for. + + + + + Optional ProfileToken that specifies an existing media profile that the options shall be compatible with. + + + + + + + + + + + + + + + + + + + Optional audio source configuration token that specifies an existing configuration that the options are intended for. + + + + + Optional ProfileToken that specifies an existing media profile that the options shall be compatible with. + + + + + + + + + + + This message contains the audio source configuration options. If a audio source configuration is specified, the options shall concern that particular configuration. If a media profile is specified, the options shall be compatible with that media profile. If no tokens are specified, the options shall be considered generic for the device. + + + + + + + + + + + + Optional audio encoder configuration token that specifies an existing configuration that the options are intended for. + + + + + Optional ProfileToken that specifies an existing media profile that the options shall be compatible with. + + + + + + + + + + + This message contains the audio encoder configuration options. If a audio encoder configuration is specified, the options shall concern that particular configuration. If a media profile is specified, the options shall be compatible with that media profile. If no tokens are specified, the options shall be considered generic for the device. + + + + + + + + + + + + Optional metadata configuration token that specifies an existing configuration that the options are intended for. + + + + + Optional ProfileToken that specifies an existing media profile that the options shall be compatible with. + + + + + + + + + + + This message contains the metadata configuration options. If a metadata configuration is specified, the options shall concern that particular configuration. If a media profile is specified, the options shall be compatible with that media profile. If no tokens are specified, the options shall be considered generic for the device. + + + + + + + + + + + + Optional audio output configuration token that specifies an existing configuration that the options are intended for. + + + + + Optional ProfileToken that specifies an existing media profile that the options shall be compatible with. + + + + + + + + + + + This message contains the audio output configuration options. If a audio output configuration is specified, the options shall concern that particular configuration. If a media profile is specified, the options shall be compatible with that media profile. If no tokens are specified, the options shall be considered generic for the device. + + + + + + + + + + + + Optional audio decoder configuration token that specifies an existing configuration that the options are intended for. + + + + + Optional ProfileToken that specifies an existing media profile that the options shall be compatible with. + + + + + + + + + + + This message contains the audio decoder configuration options. If a audio decoder configuration is specified, the options shall concern that particular configuration. If a media profile is specified, the options shall be compatible with that media profile. If no tokens are specified, the options shall be considered generic for the device. + + + + + + + + + + + + Token of the video source configuration + + + + + + + + + + + The minimum guaranteed total number of encoder instances (applications) per VideoSourceConfiguration. The device is able to deliver the TotalNumber of streams + + + + + If a device limits the number of instances for respective Video Codecs the response contains the information how many Jpeg streams can be set up at the same time per VideoSource. + + + + + If a device limits the number of instances for respective Video Codecs the response contains the information how many H264 streams can be set up at the same time per VideoSource. + + + + + If a device limits the number of instances for respective Video Codecs the response contains the information how many Mpeg4 streams can be set up at the same time per VideoSource. + + + + + + + + + + + + Stream Setup that should be used with the uri + + + + + The ProfileToken element indicates the media profile to use and will define the configuration of the content of the stream. + + + + + + + + + + + + + + + + + + + + + + + Contains the token of the Profile that is used to define the multicast stream. + + + + + + + + + + + + + + + + + + Contains the token of the Profile that is used to define the multicast stream. + + + + + + + + + + + + + + + + + + Contains a Profile reference for which a Synchronization Point is requested. + + + + + + + + + + + + + + + + + + The ProfileToken element indicates the media profile to use and will define the source and dimensions of the snapshot. + + + + + + + + + + + + + + + + + + + + + + + Contains a video source reference for which a video source mode is requested. + + + + + + + + + + + Return the information for specified video source mode. + + + + + + + + + + + + Contains a video source reference for which a video source mode is requested. + + + + + Indicate video source mode. + + + + + + + + + + + The response contains information about rebooting after returning response. When Reboot is set true, a device will reboot automatically after setting mode. + + + + + + + + + Indication which encodings are supported for this video source. The list may contain one or more enumeration values of tt:VideoEncoding. + + + + + + + + + Max frame rate in frames per second for this video source mode. + + + + + Max horizontal and vertical resolution for this video source mode. + + + + + Indication which encodings are supported for this video source. The list may contain one or more enumeration values of tt:VideoEncoding. + + + + + After setting the mode if a device starts to reboot this value is true. If a device change the mode without rebooting this value is false. If true, configured parameters may not be guaranteed by the device after rebooting. + + + + + Informative description of this video source mode. This field should be described in English. + + + + + + + Indicate token for video source mode. + + + + + Indication of whether this mode is active. If active this value is true. In case of non-indication, it means as false. The value of true shall be had by only one video source mode. + + + + + + + + + + + + + + + + + + + Token of the Video Source Configuration, which has OSDs associated with are requested. If token not exist, request all available OSDs. + + + + + + + + + + + This element contains a list of requested OSDs. + + + + + + + + + + + + The GetOSD command fetches the OSD configuration if the OSD token is known. + + + + + + + + + + + + The requested OSD configuration. + + + + + + + + + + + + + Contains the modified OSD configuration. + + + + + + + + + + + + + + + + + + + + Video Source Configuration Token that specifies an existing video source configuration that the options shall be compatible with. + + + + + + + + + + + + + + + + + + + + + + + + + Contain the initial OSD configuration for create. + + + + + + + + + + + + Returns Token of the newly created OSD + + + + + + + + + + + + + This element contains a reference to the OSD configuration that should be deleted. + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns the capabilities of the media service. The result is returned in a typed answer. + + + + + + This command lists all available physical video inputs of the device. + + + + + This command lists all available physical audio inputs of the device. + + + + + This command lists all available physical audio outputs of the device. + + + + + + This operation creates a new empty media profile. The media profile shall be created in the +device and shall be persistent (remain after reboot). A created profile shall be deletable and a device shall set the “fixed” attribute to false in the +returned Profile. + + + + + If the profile token is already known, a profile can be fetched through the GetProfile command. + + + + + Any endpoint can ask for the existing media profiles of a device using the GetProfiles +command. Pre-configured or dynamically configured profiles can be retrieved using this +command. This command lists all configured profiles in a device. The client does not need to +know the media profile in order to use the command. + + + + + This operation adds a VideoEncoderConfiguration to an existing media profile. If a +configuration exists in the media profile, it will be replaced. The change shall be persistent. A device shall +support adding a compatible VideoEncoderConfiguration to a Profile containing a VideoSourceConfiguration and shall +support streaming video data of such a profile. + + + + + + This operation removes a VideoEncoderConfiguration from an existing media profile. If the +media profile does not contain a VideoEncoderConfiguration, the operation has no effect. The removal shall be persistent. + + + + + This operation adds a VideoSourceConfiguration to an existing media profile. If such a +configuration exists in the media profile, it will be replaced. The change shall be persistent. + + + + + This operation removes a VideoSourceConfiguration from an existing media profile. If the +media profile does not contain a VideoSourceConfiguration, the operation has no effect. The removal shall be persistent. Video source configurations should only be removed after removing a +VideoEncoderConfiguration from the media profile. + + + + + This operation adds an AudioEncoderConfiguration to an existing media profile. If a +configuration exists in the media profile, it will be replaced. The change shall be persistent. A device shall +support adding a compatible AudioEncoderConfiguration to a profile containing an AudioSourceConfiguration and shall +support streaming audio data of such a profile. + + + + + + This operation removes an AudioEncoderConfiguration from an existing media profile. If the +media profile does not contain an AudioEncoderConfiguration, the operation has no effect. +The removal shall be persistent. + + + + + This operation adds an AudioSourceConfiguration to an existing media profile. If a +configuration exists in the media profile, it will be replaced. The change shall be persistent. + + + + + This operation removes an AudioSourceConfiguration from an existing media profile. If the +media profile does not contain an AudioSourceConfiguration, the operation has no effect. The +removal shall be persistent. Audio source configurations should only be removed after removing an +AudioEncoderConfiguration from the media profile. + + + + + This operation adds a PTZConfiguration to an existing media profile. If a configuration exists +in the media profile, it will be replaced. The change shall be persistent. Adding a PTZConfiguration to a media profile means that streams using that media profile can +contain PTZ status (in the metadata), and that the media profile can be used for controlling +PTZ movement. + + + + + This operation removes a PTZConfiguration from an existing media profile. If the media profile +does not contain a PTZConfiguration, the operation has no effect. The removal shall be persistent. + + + + + This operation adds a VideoAnalytics configuration to an existing media profile. If a +configuration exists in the media profile, it will be replaced. The change shall be persistent. Adding a VideoAnalyticsConfiguration to a media profile means that streams using that media +profile can contain video analytics data (in the metadata) as defined by the submitted configuration reference. A profile containing only a video analytics configuration but no video source configuration is incomplete. Therefore, a client should first add a video source configuration to a profile before adding a video analytics configuration. The device can deny adding of a video analytics +configuration before a video source configuration. + + + + + This operation removes a VideoAnalyticsConfiguration from an existing media profile. If the media profile does not contain a VideoAnalyticsConfiguration, the operation has no effect. +The removal shall be persistent. + + + + + This operation adds a Metadata configuration to an existing media profile. If a configuration exists in the media profile, it will be replaced. The change shall be persistent. Adding a MetadataConfiguration to a Profile means that streams using that profile contain metadata. Metadata can consist of events, PTZ status, and/or video analytics data. + + + + + This operation removes a MetadataConfiguration from an existing media profile. If the media profile does not contain a MetadataConfiguration, the operation has no effect. The removal shall be persistent. + + + + + This operation adds an AudioOutputConfiguration to an existing media profile. If a configuration exists in the media profile, it will be replaced. The change shall be persistent. + + + + + This operation removes an AudioOutputConfiguration from an existing media profile. If the media profile does not contain an AudioOutputConfiguration, the operation has no effect. The removal shall be persistent. + + + + + This operation adds an AudioDecoderConfiguration to an existing media profile. If a configuration exists in the media profile, it shall be replaced. The change shall be persistent. + + + + + This operation removes an AudioDecoderConfiguration from an existing media profile. If the media profile does not contain an AudioDecoderConfiguration, the operation has no effect. The removal shall be persistent. + + + + + This operation deletes a profile. This change shall always be persistent. Deletion of a profile is only possible for non-fixed profiles + + + + + + This operation lists all existing video source configurations for a device. The client need not know anything about the video source configurations in order to use the command. + + + + + This operation lists all existing video encoder configurations of a device. This command lists all configured video encoder configurations in a device. The client need not know anything apriori about the video encoder configurations in order to use the command. + + + + + This operation lists all existing audio source configurations of a device. This command lists all audio source configurations in a device. The client need not know anything apriori about the audio source configurations in order to use the command. + + + + + This operation lists all existing device audio encoder configurations. The client need not know anything apriori about the audio encoder configurations in order to use the command. + + + + + This operation lists all video analytics configurations of a device. This command lists all configured video analytics in a device. The client need not know anything apriori about the video analytics in order to use the command. + + + + + This operation lists all existing metadata configurations. The client need not know anything apriori about the metadata in order to use the command. + + + + + This command lists all existing AudioOutputConfigurations of a device. The NVC need not know anything apriori about the audio configurations to use this command. + + + + + This command lists all existing AudioDecoderConfigurations of a device. The NVC need not know anything apriori about the audio decoder configurations in order to +use this command. + + + + + If the video source configuration token is already known, the video source configuration can be fetched through the GetVideoSourceConfiguration command. + + + + + If the video encoder configuration token is already known, the encoder configuration can be fetched through the GetVideoEncoderConfiguration command. + + + + + The GetAudioSourceConfiguration command fetches the audio source configurations if the audio source configuration token is already known. An + + + + + The GetAudioEncoderConfiguration command fetches the encoder configuration if the audio encoder configuration token is known. + + + + + The GetVideoAnalyticsConfiguration command fetches the video analytics configuration if the video analytics token is known. + + + + + The GetMetadataConfiguration command fetches the metadata configuration if the metadata token is known. + + + + + If the audio output configuration token is already known, the output configuration can be fetched through the GetAudioOutputConfiguration command. + + + + + If the audio decoder configuration token is already known, the decoder configuration can be fetched through the GetAudioDecoderConfiguration command. + + + + + + This operation lists all the video encoder configurations of the device that are compatible with a certain media profile. Each of the returned configurations shall be a valid input parameter for the AddVideoEncoderConfiguration command on the media profile. The result will vary depending on the capabilities, configurations and settings in the device. + + + + + This operation requests all the video source configurations of the device that are compatible +with a certain media profile. Each of the returned configurations shall be a valid input +parameter for the AddVideoSourceConfiguration command on the media profile. The result +will vary depending on the capabilities, configurations and settings in the device. + + + + + This operation requests all audio encoder configurations of a device that are compatible with a certain media profile. Each of the returned configurations shall be a valid input parameter for the AddAudioSourceConfiguration command on the media profile. The result varies depending on the capabilities, configurations and settings in the device. + + + + + This operation requests all audio source configurations of the device that are compatible with a certain media profile. Each of the returned configurations shall be a valid input parameter for the AddAudioEncoderConfiguration command on the media profile. The result varies depending on the capabilities, configurations and settings in the device. + + + + + This operation requests all video analytic configurations of the device that are compatible with a certain media profile. Each of the returned configurations shall be a valid input parameter for the AddVideoAnalyticsConfiguration command on the media profile. The result varies depending on the capabilities, configurations and settings in the device. + + + + + This operation requests all the metadata configurations of the device that are compatible with a certain media profile. Each of the returned configurations shall be a valid input parameter for the AddMetadataConfiguration command on the media profile. The result varies depending on the capabilities, configurations and settings in the device. + + + + + This command lists all audio output configurations of a device that are compatible with a certain media profile. Each returned configuration shall be a valid input for the +AddAudioOutputConfiguration command. + + + + + This operation lists all the audio decoder configurations of the device that are compatible with a certain media profile. Each of the returned configurations shall be a valid input parameter for the AddAudioDecoderConfiguration command on the media profile. + + + + + + This operation modifies a video source configuration. The ForcePersistence flag indicates if the changes shall remain after reboot of the device. Running streams using this configuration may be immediately updated according to the new settings. The changes are not guaranteed to take effect unless the client requests a new stream URI and restarts any affected stream. NVC methods for changing a running stream are out of scope for this specification. + + + + + This operation modifies a video encoder configuration. The ForcePersistence flag indicates if the changes shall remain after reboot of the device. Changes in the Multicast settings shall always be persistent. Running streams using this configuration may be immediately updated according to the new settings. The changes are not guaranteed to take effect unless the client requests a new stream URI and restarts any affected stream. NVC methods for changing a running stream are out of scope for this specification.
SessionTimeout is provided as a hint for keeping rtsp session by a device. If necessary the device may adapt parameter values for SessionTimeout elements without returning an error. For the time between keep alive calls the client shall adhere to the timeout value signaled via RTSP.
+ + +
+ + This operation modifies an audio source configuration. The ForcePersistence flag indicates if +the changes shall remain after reboot of the device. Running streams using this configuration +may be immediately updated according to the new settings. The changes are not guaranteed +to take effect unless the client requests a new stream URI and restarts any affected stream +NVC methods for changing a running stream are out of scope for this specification. + + + + + This operation modifies an audio encoder configuration. The ForcePersistence flag indicates if +the changes shall remain after reboot of the device. Running streams using this configuration may be immediately updated +according to the new settings. The changes are not guaranteed to take effect unless the client +requests a new stream URI and restarts any affected streams. NVC methods for changing a +running stream are out of scope for this specification. + + + + + A video analytics configuration is modified using this command. The ForcePersistence flag +indicates if the changes shall remain after reboot of the device or not. Running streams using +this configuration shall be immediately updated according to the new settings. Otherwise +inconsistencies can occur between the scene description processed by the rule engine and +the notifications produced by analytics engine and rule engine which reference the very same +video analytics configuration token. + + + + + This operation modifies a metadata configuration. The ForcePersistence flag indicates if the +changes shall remain after reboot of the device. Changes in the Multicast settings shall +always be persistent. Running streams using this configuration may be updated immediately +according to the new settings. The changes are not guaranteed to take effect unless the client +requests a new stream URI and restarts any affected streams. NVC methods for changing a +running stream are out of scope for this specification. + + + + + This operation modifies an audio output configuration. The ForcePersistence flag indicates if +the changes shall remain after reboot of the device. + + + + + This operation modifies an audio decoder configuration. The ForcePersistence flag indicates if +the changes shall remain after reboot of the device. + + + + + + This operation returns the available options (supported values and ranges for video source configuration parameters) when the video source parameters are +reconfigured If a video source configuration is specified, the options shall concern that +particular configuration. If a media profile is specified, the options shall be compatible with +that media profile. + + + + + This operation returns the available options (supported values and ranges for video encoder + configuration parameters) when the video encoder parameters are reconfigured.
+ For JPEG, MPEG4 and H264 extension elements have been defined that provide additional information. A device must provide the + XxxOption information for all encodings supported and should additionally provide the corresponding XxxOption2 information.
+ This response contains the available video encoder configuration options. If a video encoder configuration is specified, + the options shall concern that particular configuration. If a media profile is specified, the options shall be + compatible with that media profile. If no tokens are specified, the options shall be considered generic for the device. +
+ + +
+ + This operation returns the available options (supported values and ranges for audio source configuration parameters) when the audio source parameters are +reconfigured. If an audio source configuration is specified, the options shall concern that +particular configuration. If a media profile is specified, the options shall be compatible with +that media profile. + + + + + This operation returns the available options (supported values and ranges for audio encoder configuration parameters) when the audio encoder parameters are +reconfigured. + + + + + This operation returns the available options (supported values and ranges for metadata configuration parameters) for changing the metadata configuration. + + + + + This operation returns the available options (supported values and ranges for audio output configuration parameters) for configuring an audio output. + + + + + This command list the audio decoding capabilities for a given profile and configuration of a +device. + + + + + + The GetGuaranteedNumberOfVideoEncoderInstances command can be used to request the +minimum number of guaranteed video encoder instances (applications) per Video Source +Configuration. + + + + + + This operation requests a URI that can be used to initiate a live media stream using RTSP as +the control protocol. The returned URI shall remain valid indefinitely even if the profile is +changed. The ValidUntilConnect, ValidUntilReboot and Timeout Parameter shall be set +accordingly (ValidUntilConnect=false, ValidUntilReboot=false, timeout=PT0S).
+ The correct syntax for the StreamSetup element for these media stream setups defined in 5.1.1 of the streaming specification are as follows: +
    +
  1. RTP unicast over UDP: StreamType = "RTP_unicast", TransportProtocol = "UDP"
  2. +
  3. RTP over RTSP over HTTP over TCP: StreamType = "RTP_unicast", TransportProtocol = "HTTP"
  4. +
  5. RTP over RTSP over TCP: StreamType = "RTP_unicast", TransportProtocol = "RTSP"
  6. +
+
+If a multicast stream is requested the VideoEncoderConfiguration, AudioEncoderConfiguration and MetadataConfiguration element inside the corresponding +media profile must be configured with valid multicast settings.
+For full compatibility with other ONVIF services a device should not generate Uris longer than +128 octets.
+ + +
+ + This command starts multicast streaming using a specified media profile of a device. +Streaming continues until StopMulticastStreaming is called for the same Profile. The +streaming shall continue after a reboot of the device until a StopMulticastStreaming request is +received. The multicast address, port and TTL are configured in the +VideoEncoderConfiguration, AudioEncoderConfiguration and MetadataConfiguration +respectively. + + + + + This command stop multicast streaming using a specified media profile of a device + + + + + Synchronization points allow clients to decode and correctly use all data after the +synchronization point. +For example, if a video stream is configured with a large I-frame distance and a client loses a +single packet, the client does not display video until the next I-frame is transmitted. In such +cases, the client can request a Synchronization Point which enforces the device to add an I-Frame as soon as possible. Clients can request Synchronization Points for profiles. The device +shall add synchronization points for all streams associated with this profile. +Similarly, a synchronization point is used to get an update on full PTZ or event status through +the metadata stream. +If a video stream is associated with the profile, an I-frame shall be added to this video stream. +If a PTZ metadata stream is associated to the profile, +the PTZ position shall be repeated within the metadata stream. + + + + + A client uses the GetSnapshotUri command to obtain a JPEG snapshot from the +device. The returned URI shall remain valid indefinitely even if the profile is changed. The +ValidUntilConnect, ValidUntilReboot and Timeout Parameter shall be set accordingly +(ValidUntilConnect=false, ValidUntilReboot=false, timeout=PT0S). The URI can be used for +acquiring a JPEG image through a HTTP GET operation. The image encoding will always be +JPEG regardless of the encoding setting in the media profile. The Jpeg settings +(like resolution or quality) may be taken from the profile if suitable. The provided +image will be updated automatically and independent from calls to GetSnapshotUri. + + + + + A device returns the information for current video source mode and settable video source modes of specified video source. A device that indicates a capability of VideoSourceModes shall support this command. + + + + + SetVideoSourceMode changes the media profile structure relating to video source for the specified video source mode. A device that indicates a capability of VideoSourceModes shall support this command. The behavior after changing the mode is not defined in this specification. + + + + + + Get the OSDs. + + + + + Get the OSD. + + + + + Get the OSD Options. + + + + + Set the OSD + + + + + Create the OSD. + + + + + Delete the OSD. + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/onvif/wsdl/onvif-local.xsd b/onvif/wsdl/onvif-local.xsd new file mode 100644 index 000000000..17f722d6e --- /dev/null +++ b/onvif/wsdl/onvif-local.xsd @@ -0,0 +1,8578 @@ + + + + + + + + + + + + + + Base class for physical entities like inputs and outputs. + + + + Unique identifier referencing the physical entity. + + + + + + + Unique identifier for a physical or logical resource. + Tokens should be assigned such that they are unique within a device. Tokens must be at least unique within its class. + Length up to 64 characters. + + + + + + + + + User readable name. Length up to 64 characters. + + + + + + + + + Rectangle defined by lower left corner position and size. Units are pixel. + + + + + + + + + + Range of a rectangle. The rectangle itself is defined by lower left corner position and size. Units are pixel. + + + + + Range of X-axis. + + + + + Range of Y-axis. + + + + + Range of width. + + + + + Range of height. + + + + + + + + Range of values greater equal Min value and less equal Max value. + + + + + + + + + + Range of values greater equal Min value and less equal Max value. + + + + + + + + + + Range of duration greater equal Min duration and less equal Max duration. + + + + + + + + + + List of values. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Representation of a physical video input. + + + + + + + Frame rate in frames per second. + + + + + Horizontal and vertical resolution + + + + + Optional configuration of the image sensor. + + + + + + + + + + + + + + + Optional configuration of the image sensor. To be used if imaging service 2.00 is supported. + + + + + + + + + + + + + + + Representation of a physical audio input. + + + + + + + number of available audio channels. (1: mono, 2: stereo) + + + + + + + + + + + + + A media profile consists of a set of media configurations. Media profiles are used by a client + to configure properties of a media stream from an NVT.
+ An NVT shall provide at least one media profile at boot. An NVT should provide “ready to use” + profiles for the most common media configurations that the device offers.
+ A profile consists of a set of interconnected configuration entities. Configurations are provided + by the NVT and can be either static or created dynamically by the NVT. For example, the + dynamic configurations can be created by the NVT depending on current available encoding + resources. +
+
+ + + + User readable name of the profile. + + + + + Optional configuration of the Video input. + + + + + Optional configuration of the Audio input. + + + + + Optional configuration of the Video encoder. + + + + + Optional configuration of the Audio encoder. + + + + + Optional configuration of the video analytics module and rule engine. + + + + + Optional configuration of the pan tilt zoom unit. + + + + + Optional configuration of the metadata stream. + + + + + Extensions defined in ONVIF 2.0 + + + + + + Unique identifier of the profile. + + + + + A value of true signals that the profile cannot be deleted. Default is false. + + + +
+ + + + + + + Optional configuration of the Audio output. + + + + + Optional configuration of the Audio decoder. + + + + + + + + + + + + + + + + + + + + + + + + + + Base type defining the common properties of a configuration. + + + + + User readable name. Length up to 64 characters. + + + + + Number of internal references currently using this configuration.
This parameter is read-only and cannot be changed by a set request.
For example the value increases if the configuration is added to a media profile or attached to a PaneConfiguration.
+
+
+
+ + + Token that uniquely refernces this configuration. Length up to 64 characters. + + +
+ + + + + + + + + + Reference to the physical input. + + + + + Rectangle specifying the Video capturing area. The capturing area shall not be larger than the whole Video source area. + + + + + + + + + + + + + + + Optional element to configure rotation of captured image. + + + + + + + + + + + + + + + + + Parameter to enable/disable Rotation feature. + + + + + Optional parameter to configure how much degree of clockwise rotation of image for On mode. Omitting this parameter for On mode means 180 degree rotation. + + + + + + + + + + + + + + + + + + + + + + + + + + Supported range for the capturing area. + + + + + List of physical inputs. + + + + + + + + + + + + + Options of parameters for Rotation feature. + + + + + + + + + + + + + + + + + Supported options of Rotate mode parameter. + + + + + List of supported degree value for rotation. + + + + + + + + + + + + + + + + + + + + + + Used video codec, either Jpeg, H.264 or Mpeg4 + + + + + Configured video resolution + + + + + Relative value for the video quantizers and the quality of the video. A high value within supported quality range means higher quality + + + + + Optional element to configure rate control related parameters. + + + + + Optional element to configure Mpeg4 related parameters. + + + + + Optional element to configure H.264 related parameters. + + + + + Defines the multicast settings that could be used for video streaming. + + + + + The rtsp session timeout for the related video stream + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number of the columns of the Video image. + + + + + Number of the lines of the Video image. + + + + + + + + + + Maximum output framerate in fps. If an EncodingInterval is provided the resulting encoded framerate will be reduced by the given factor. + + + + + Interval at which images are encoded and transmitted. (A value of 1 means that every frame is encoded, a value of 2 means that every 2nd frame is encoded ...) + + + + + the maximum output bitrate in kbps + + + + + + + + + + Determines the interval in which the I-Frames will be coded. An entry of 1 indicates I-Frames are continuously generated. An entry of 2 indicates that every 2nd image is an I-Frame, and 3 only every 3rd frame, etc. The frames in between are coded as P or B Frames. + + + + + the Mpeg4 profile, either simple profile (SP) or advanced simple profile (ASP) + + + + + + + + + + Group of Video frames length. Determines typically the interval in which the I-Frames will be coded. An entry of 1 indicates I-Frames are continuously generated. An entry of 2 indicates that every 2nd image is an I-Frame, and 3 only every 3rd frame, etc. The frames in between are coded as P or B Frames. + + + + + the H.264 profile, either baseline, main, extended or high + + + + + + + + + + Range of the quality values. A high value means higher quality. + + + + + Optional JPEG encoder settings ranges (See also Extension element). + + + + + Optional MPEG-4 encoder settings ranges (See also Extension element). + + + + + Optional H.264 encoder settings ranges (See also Extension element). + + + + + + + + + + + + + Optional JPEG encoder settings ranges. + + + + + Optional MPEG-4 encoder settings ranges. + + + + + Optional H.264 encoder settings ranges. + + + + + + + + + + + + + + + + + List of supported image sizes. + + + + + Supported frame rate in fps (frames per second). + + + + + Supported encoding interval range. The encoding interval corresponds to the number of frames devided by the encoded frames. An encoding interval value of "1" means that all frames are encoded. + + + + + + + + + + + + Supported range of encoded bitrate in kbps. + + + + + + + + + + + + + + List of supported image sizes. + + + + + Supported group of Video frames length. This value typically corresponds to the I-Frame distance. + + + + + Supported frame rate in fps (frames per second). + + + + + Supported encoding interval range. The encoding interval corresponds to the number of frames devided by the encoded frames. An encoding interval value of "1" means that all frames are encoded. + + + + + List of supported MPEG-4 profiles. + + + + + + + + + + + + Supported range of encoded bitrate in kbps. + + + + + + + + + + + + + + List of supported image sizes. + + + + + Supported group of Video frames length. This value typically corresponds to the I-Frame distance. + + + + + Supported frame rate in fps (frames per second). + + + + + Supported encoding interval range. The encoding interval corresponds to the number of frames devided by the encoded frames. An encoding interval value of "1" means that all frames are encoded. + + + + + List of supported H.264 profiles. + + + + + + + + + + + + Supported range of encoded bitrate in kbps. + + + + + + + + + + + + + + + + + + Token of the Audio Source the configuration applies to + + + + + + + + + + + + + + Tokens of the audio source the configuration can be used for. + + + + + + + + + + + + + + + + + + + + + + Audio codec used for encoding the audio input (either G.711, G.726 or AAC) + + + + + The output bitrate in kbps. + + + + + The output sample rate in kHz. + + + + + Defines the multicast settings that could be used for video streaming. + + + + + The rtsp session timeout for the related audio stream + + + + + + + + + + + + + + + + + + + + + + list of supported AudioEncoderConfigurations + + + + + + + + + + + The enoding used for audio data (either G.711, G.726 or AAC) + + + + + List of supported bitrates in kbps for the specified Encoding + + + + + List of supported Sample Rates in kHz for the specified Encoding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + optional element to configure which PTZ related data is to include in the metadata stream + + + + + + Defines whether the streamed metadata will include metadata from the analytics engines (video, cell motion, audio etc.) + + + + + Defines the multicast settings that could be used for video streaming. + + + + + The rtsp session timeout for the related audio stream + + + + + + + + + + + + + + + + + + + + + + True if the metadata stream shall contain the PTZ status (IDLE, MOVING or UNKNOWN) + + + + + True if the metadata stream shall contain the PTZ position + + + + + + + + + Subcription handling in the same way as base notification subscription. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True if the device is able to stream pan or tilt status information. + + + + + True if the device is able to stream zoom status inforamtion. + + + + + + True if the device is able to stream the pan or tilt position. + + + + + True if the device is able to stream zoom position information. + + + + + + + + + + + + + + + + + + Representation of a physical video outputs. + + + + + + + + Resolution of the display in Pixel. + + + + + Refresh rate of the display in Hertz. + + + + + Aspect ratio of the display as physical extent of width divided by height. + + + + + + + + + + + + + + + + + + + + + + + + Token of the Video Output the configuration applies to + + + + + + + + + + + + + + + + + + + + + + + + + If the device is able to decode Jpeg streams this element describes the supported codecs and configurations + + + + + If the device is able to decode H.264 streams this element describes the supported codecs and configurations + + + + + If the device is able to decode Mpeg4 streams this element describes the supported codecs and configurations + + + + + + + + + + + + List of supported H.264 Video Resolutions + + + + + List of supported H264 Profiles (either baseline, main, extended or high) + + + + + Supported H.264 bitrate range in kbps + + + + + Supported H.264 framerate range in fps + + + + + + + + + + + + List of supported Jpeg Video Resolutions + + + + + Supported Jpeg bitrate range in kbps + + + + + Supported Jpeg framerate range in fps + + + + + + + + + + + + List of supported Mpeg4 Video Resolutions + + + + + List of supported Mpeg4 Profiles (either SP or ASP) + + + + + Supported Mpeg4 bitrate range in kbps + + + + + Supported Mpeg4 framerate range in fps + + + + + + + + + + + + + + + + + + Representation of a physical audio outputs. + + + + + + + + + + + + + + + + + + + + Token of the phsycial Audio output. + + + + + + An audio channel MAY support different types of audio transmission. While for full duplex + operation no special handling is required, in half duplex operation the transmission direction + needs to be switched. + The optional SendPrimacy parameter inside the AudioOutputConfiguration indicates which + direction is currently active. An NVC can switch between different modes by setting the + AudioOutputConfiguration.
+ The following modes for the Send-Primacy are defined:
    +
  • www.onvif.org/ver20/HalfDuplex/Server + The server is allowed to send audio data to the client. The client shall not send + audio data via the backchannel to the NVT in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Client + The client is allowed to send audio data via the backchannel to the server. The + NVT shall not send audio data to the client in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Auto + It is up to the device how to deal with sending and receiving audio data.
  • +
+ Acoustic echo cancellation is out of ONVIF scope.
+
+
+ + + Volume setting of the output. The applicable range is defined via the option AudioOutputOptions.OutputLevelRange. + + + +
+ +
+
+
+ + + + + + + + Tokens of the physical Audio outputs (typically one). + + + + + + An audio channel MAY support different types of audio transmission. While for full duplex + operation no special handling is required, in half duplex operation the transmission direction + needs to be switched. + The optional SendPrimacy parameter inside the AudioOutputConfiguration indicates which + direction is currently active. An NVC can switch between different modes by setting the + AudioOutputConfiguration.
+ The following modes for the Send-Primacy are defined:
    +
  • www.onvif.org/ver20/HalfDuplex/Server + The server is allowed to send audio data to the client. The client shall not send + audio data via the backchannel to the NVT in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Client + The client is allowed to send audio data via the backchannel to the server. The + NVT shall not send audio data to the client in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Auto + It is up to the device how to deal with sending and receiving audio data.
  • +
+ Acoustic echo cancellation is out of ONVIF scope.
+
+
+ + + Minimum and maximum level range supported for this Output. + + + +
+ +
+ + + + + + The Audio Decoder Configuration does not contain any that parameter to configure the +decoding .A decoder shall decode every data it receives (according to its capabilities). + + + + + + + + + + + + + + + + + + If the device is able to decode AAC encoded audio this section describes the supported configurations + + + + + If the device is able to decode G711 encoded audio this section describes the supported configurations + + + + + If the device is able to decode G726 encoded audio this section describes the supported configurations + + + + + + + + + + + + List of supported bitrates in kbps + + + + + List of supported sample rates in kHz + + + + + + + + + + + + List of supported bitrates in kbps + + + + + List of supported sample rates in kHz + + + + + + + + + + + + List of supported bitrates in kbps + + + + + List of supported sample rates in kHz + + + + + + + + + + + + + + + + + + + + The multicast address (if this address is set to 0 no multicast streaming is enaled) + + + + + The RTP mutlicast destination port. A device may support RTCP. In this case the port value shall be even to allow the corresponding RTCP stream to be mapped to the next higher (odd) destination port number as defined in the RTSP specification. + + + + + In case of IPv6 the TTL value is assumed as the hop limit. Note that for IPV6 and administratively scoped IPv4 multicast the primary use for hop limit / TTL is to prevent packets from (endlessly) circulating and not limiting scope. In these cases the address contains the scope. + + + + + Read only property signalling that streaming is persistant. Use the methods StartMulticastStreaming and StopMulticastStreaming to switch its state. + + + + + + + + + + + + Defines if a multicast or unicast stream is requested + + + + + + + + + + + + + + + + + + + + Defines the network protocol for streaming, either UDP=RTP/UDP, RTSP=RTP/RTSP/TCP or HTTP=RTP/RTSP/HTTP/TCP + + + + + + + + + + + + + + + + + + + + Stable Uri to be used for requesting the media stream + + + + + Indicates if the Uri is only valid until the connection is established. The value shall be set to "false". + + + + + Indicates if the Uri is invalid after a reboot of the device. The value shall be set to "false". + + + + + Duration how long the Uri is valid. This parameter shall be set to PT0S to indicate that this stream URI is indefinitely valid even if the profile changes + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the scope is fixed or configurable. + + + + + Scope item URI. + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether or not an interface is enabled. + + + + + Network interface information + + + + + Link configuration. + + + + + IPv4 network interface configuration. + + + + + IPv6 network interface configuration. + + + + + + + + + + + + + + + + Extension point prepared for future 802.3 configuration. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Configured link settings. + + + + + Current active link settings. + + + + + Integer indicating interface type, for example: 6 is ethernet. + + + + + + + + + + Auto negotiation on/off. + + + + + Speed. + + + + + Duplex type, Half or Full. + + + + + + + + + + + + + + + + + For valid numbers, please refer to http://www.iana.org/assignments/ianaiftype-mib. + + + + + + + + + + Network interface name, for example eth0. + + + + + Network interface MAC address. + + + + + Maximum transmission unit. + + + + + + + + + + Indicates whether or not IPv6 is enabled. + + + + + IPv6 configuration. + + + + + + + + + + Indicates whether or not IPv4 is enabled. + + + + + IPv4 configuration. + + + + + + + + + + List of manually added IPv4 addresses. + + + + + Link local address. + + + + + IPv4 address configured by using DHCP. + + + + + Indicates whether or not DHCP is used. + + + + + + + + + + + + Indicates whether router advertisment is used. + + + + + DHCP configuration. + + + + + List of manually entered IPv6 addresses. + + + + + List of link local IPv6 addresses. + + + + + List of IPv6 addresses configured by using DHCP. + + + + + List of IPv6 addresses configured by using router advertisment. + + + + + + + + + + + + + + + + + + + + + + + + + + + Network protocol type string. + + + + + Indicates if the protocol is enabled or not. + + + + + The port that is used by the protocol. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Network host type: IPv4, IPv6 or DNS. + + + + + IPv4 address. + + + + + IPv6 address. + + + + + DNS name. + + + + + + + + + + + + + + + + + + Indicates if the address is an IPv4 or IPv6 address. + + + + + IPv4 address. + + + + + IPv6 address + + + + + + + + + + IPv4 address + + + + + Prefix/submask length + + + + + + + + + + + + + + IPv6 address + + + + + Prefix/submask length + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether the hostname is obtained from DHCP or not. + + + + + Indicates the hostname. + + + + + + + + + + + + + + + + + + Indicates whether or not DNS information is retrieved from DHCP. + + + + + Search domain. + + + + + List of DNS addresses received from DHCP. + + + + + List of manually entered DNS addresses. + + + + + + + + + + + + + + + + + + Indicates if NTP information is to be retrieved by using DHCP. + + + + + List of NTP addresses retrieved by using DHCP. + + + + + List of manually entered NTP addresses. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic DNS type. + + + + + DNS name. + + + + + Time to live. + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether or not an interface is enabled. + + + + + Link configuration. + + + + + Maximum transmission unit. + + + + + IPv4 network interface configuration. + + + + + IPv6 network interface configuration. + + + + + + + + + + + + + + + + + + + + + Indicates whether or not IPv6 is enabled. + + + + + Indicates whether router advertisment is used. + + + + + List of manually added IPv6 addresses. + + + + + DHCP configuration. + + + + + + + + + + Indicates whether or not IPv4 is enabled. + + + + + List of manually added IPv4 addresses. + + + + + Indicates whether or not DHCP is used. + + + + + + + + + + IPv4 address string. + + + + + IPv6 address string. + + + + + + + + + + Unique identifier of network interface. + + + + + Indicates whether the zero-configuration is enabled or not. + + + + + The zero-configuration IPv4 address(es) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + According to IEEE802.11-2007 H.4.1 the RSNA PSK consists of 256 bits, or 64 octets when represented in hex
+ Either Key or Passphrase shall be given, if both are supplied Key shall be used by the device and Passphrase ignored. +
+
+
+ + + + According to IEEE802.11-2007 H.4.1 a pass-phrase is a sequence of between 8 and 63 ASCII-encoded characters and + each character in the pass-phrase must have an encoding in the range of 32 to 126 (decimal),inclusive.
+ If only Passpharse is supplied the Key shall be derived using the algorithm described in IEEE802.11-2007 section H.4 +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + See IEEE802.11 7.3.2.25.2 for details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Analytics capabilities + + + + + Device capabilities + + + + + Event capabilities + + + + + Imaging capabilities + + + + + Media capabilities + + + + + PTZ capabilities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Analytics service URI. + + + + + Indicates whether or not rules are supported. + + + + + Indicates whether or not modules are supported. + + + + + + + + + + + + Device service URI. + + + + + Network capabilities. + + + + + System capabilities. + + + + + I/O capabilities. + + + + + Security capabilities. + + + + + + + + + + + + + + + + + + Event service URI. + + + + + Indicates whether or not WS Subscription policy is supported. + + + + + Indicates whether or not WS Pull Point is supported. + + + + + Indicates whether or not WS Pausable Subscription Manager Interface is supported. + + + + + + + + + + + + Number of input connectors. + + + + + Number of relay outputs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Media service URI. + + + + + Streaming capabilities. + + + + + + + + + + + + + + + + + + + + + Indicates whether or not RTP multicast is supported. + + + + + Indicates whether or not RTP over TCP is supported. + + + + + Indicates whether or not RTP/RTSP/TCP is supported. + + + + + + + + + + + + + + + + + + Maximum number of profiles. + + + + + + + + + + + + Indicates whether or not IP filtering is supported. + + + + + Indicates whether or not zeroconf is supported. + + + + + Indicates whether or not IPv6 is supported. + + + + + Indicates whether or not is supported. + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether or not TLS 1.1 is supported. + + + + + Indicates whether or not TLS 1.2 is supported. + + + + + Indicates whether or not onboard key generation is supported. + + + + + Indicates whether or not access policy configuration is supported. + + + + + Indicates whether or not WS-Security X.509 token is supported. + + + + + Indicates whether or not WS-Security SAML token is supported. + + + + + Indicates whether or not WS-Security Kerberos token is supported. + + + + + Indicates whether or not WS-Security REL token is supported. + + + + + + + + + + + + + + + + + + + + + EAP Methods supported by the device. The int values refer to the IANA EAP Registry. + + + + + + + + + + + + Indicates whether or not WS Discovery resolve requests are supported. + + + + + Indicates whether or not WS-Discovery Bye is supported. + + + + + Indicates whether or not remote discovery is supported. + + + + + Indicates whether or not system backup is supported. + + + + + Indicates whether or not system logging is supported. + + + + + Indicates whether or not firmware upgrade is supported. + + + + + Indicates supported ONVIF version(s). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Major version number. + + + + + Two digit minor version number (e.g. X.0.1 maps to "01" and X.2.1 maps to "21" where X stands for Major version number). + + + + + + + + + + Imaging service URI. + + + + + + + + + + + PTZ service URI. + + + + + + + + + + + + + + + + + + + + + + + + + + Indication that the SetLayout command supports only predefined layouts. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The address of the replay service. + + + + + + + + + + + + The address of the receiver service. + + + + + Indicates whether the device can receive RTP multicast streams. + + + + + Indicates whether the device can receive RTP/TCP streams + + + + + Indicates whether the device can receive RTP/RTSP/TCP streams. + + + + + The maximum number of receivers supported by the device. + + + + + The maximum allowed length for RTSP URIs. + + + + + + + + + + + + + Obsolete property. + + + + + + + + + + + + + + + + + + + + + + + Enumeration describing the available system log modes. + + + + + Indicates that a system log is requested. + + + + + Indicates that a access log is requested. + + + + + + + + + + The log information as attachment data. + + + + + The log information as character data. + + + + + + + + + + The support information as attachment data. + + + + + The support information as character data. + + + + + + + + + + base64 encoded binary data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Enumeration describing the available factory default modes. + + + + + Indicates that a hard factory default is requested. + + + + + Indicates that a soft factory default is requested. + + + + + + + + + + Indicates that the date and time are set manually. + + + + + Indicates that the date and time are set through NTP + + + + + + + + General date time inforamtion returned by the GetSystemDateTime method. + + + + + Indicates if the time is set manully or through NTP. + + + + + Informative indicator whether daylight savings is currently on/off. + + + + + Timezone information in Posix format. + + + + + Current system date and time in UTC format. This field is mandatory since version 2.0. + + + + + Date and time in local format. + + + + + + + + + + + + + + + + + + + + + + + + + + Range is 1 to 12. + + + + + Range is 1 to 31. + + + + + + + + + + Range is 0 to 23. + + + + + Range is 0 to 59. + + + + + Range is 0 to 61 (typically 59). + + + + + + + + + The TZ format is specified by POSIX, please refer to POSIX 1003.1 section 8.3
+ Example: Europe, Paris TZ=CET-1CEST,M3.5.0/2,M10.5.0/3
+ CET = designation for standard time when daylight saving is not in force
+ -1 = offset in hours = negative so 1 hour east of Greenwich meridian
+ CEST = designation when daylight saving is in force ("Central European Summer Time")
+ , = no offset number between code and comma, so default to one hour ahead for daylight saving
+ M3.5.0 = when daylight saving starts = the last Sunday in March (the "5th" week means the last in the month)
+ /2, = the local time when the switch occurs = 2 a.m. in this case
+ M10.5.0 = when daylight saving ends = the last Sunday in October.
+ /3, = the local time when the switch occurs = 3 a.m. in this case
+
+
+ + + + Posix timezone string. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Username string. + + + + + Password string. + + + + + User level string. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Certificate id. + + + + + base64 encoded DER representation of certificate. + + + + + + + + + + Certificate id. + + + + + Indicates whether or not a certificate is used in a HTTPS configuration. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Validity Range is from "NotBefore" to "NotAfter"; the corresponding DateTimeRange is from "From" to "Until" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EAP Method type as defined in IANA EAP Registry. + + + + + + + + + + + + + + + + + + + + + Confgiuration information for TLS Method. + + + + + Password for those EAP Methods that require a password. The password shall never be returned on a get method. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 'Bistable' or 'Monostable' +
    +
  • Bistable – After setting the state, the relay remains in this state.
  • +
  • Monostable – After setting the state, the relay returns to its idle state after the specified time.
  • +
+
+
+
+ + + Time after which the relay returns to its idle state if it is in monostable mode. If the Mode field is set to bistable mode the value of the parameter can be ignored. + + + + + + 'open' or 'closed' +
    +
  • 'open' means that the relay is open when the relay state is set to 'inactive' through the trigger command and closed when the state is set to 'active' through the same command.
  • +
  • 'closed' means that the relay is closed when the relay state is set to 'inactive' through the trigger command and open when the state is set to 'active' through the same command.
  • +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A unique identifier that is used to reference PTZ Nodes. + + + + + + + A list of Coordinate Systems available for the PTZ Node. For each Coordinate System, the PTZ Node MUST specify its allowed range. + + + + + + + All preset operations MUST be available for this PTZ Node if one preset is supported. + + + + + + + A boolean operator specifying the availability of a home position. If set to true, the Home Position Operations MUST be available for this PTZ Node. + + + + + + + A list of supported Auxiliary commands. If the list is not empty, the Auxiliary Operations MUST be available for this PTZ Node. + + + + + + + + + Indication whether the HomePosition of a Node is fixed or it can be changed via the SetHomePosition command. + + + + + + + + + + + + + + + Detail of supported Preset Tour feature. + + + + + + + + + + + + + + + + + + Indicates number of preset tours that can be created. Required preset tour operations shall be available for this PTZ Node if one or more preset tour is supported. + + + + + Indicates which preset tour operations are available for this PTZ Node. + + + + + + + + + + + + + + + + + + + + + A mandatory reference to the PTZ Node that the PTZ Configuration belongs to. + + + + + + + If the PTZ Node supports absolute Pan/Tilt movements, it shall specify one Absolute Pan/Tilt Position Space as default. + + + + + + + If the PTZ Node supports absolute zoom movements, it shall specify one Absolute Zoom Position Space as default. + + + + + + + If the PTZ Node supports relative Pan/Tilt movements, it shall specify one RelativePan/Tilt Translation Space as default. + + + + + + + If the PTZ Node supports relative zoom movements, it shall specify one Relative Zoom Translation Space as default. + + + + + + + If the PTZ Node supports continuous Pan/Tilt movements, it shall specify one Continuous Pan/Tilt Velocity Space as default. + + + + + + + If the PTZ Node supports continuous zoom movements, it shall specify one Continuous Zoom Velocity Space as default. + + + + + + + If the PTZ Node supports absolute or relative PTZ movements, it shall specify corresponding default Pan/Tilt and Zoom speeds. + + + + + + + If the PTZ Node supports continuous movements, it shall specify a default timeout, after which the movement stops. + + + + + + + The Pan/Tilt limits element should be present for a PTZ Node that supports an absolute Pan/Tilt. If the element is present it signals the support for configurable Pan/Tilt limits. If limits are enabled, the Pan/Tilt movements shall always stay within the specified range. The Pan/Tilt limits are disabled by setting the limits to –INF or +INF. + + + + + + + The Zoom limits element should be present for a PTZ Node that supports absolute zoom. If the element is present it signals the supports for configurable Zoom limits. If limits are enabled the zoom movements shall always stay within the specified range. The Zoom limits are disabled by settings the limits to -INF and +INF. + + + + + + + + + + + + + + + + + + + + + Optional element to configure PT Control Direction related features. + + + + + + + + + + + + + + + + + Optional element to configure related parameters for E-Flip. + + + + + Optional element to configure related parameters for reversing of PT Control Direction. + + + + + + + + + + + + + + + + + + + Parameter to enable/disable E-Flip feature. + + + + + + + + + + + + Parameter to enable/disable Reverse feature. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list of supported coordinate systems including their range limitations. + + + + + + + A timeout Range within which Timeouts are accepted by the PTZ Node. + + + + + + + Supported options for PT Direction Control. + + + + + + + + + + + + + + + + + + Supported options for EFlip feature. + + + + + Supported options for Reverse feature. + + + + + + + + + + + + + + + + + + Options of EFlip mode parameter. + + + + + + + + + + + + + + + + + + Options of Reverse mode parameter. + + + + + + + + + + + + + + + + + + + A range of pan tilt limits. + + + + + + + + + + + + A range of zoom limit + + + + + + + + + + + + The Generic Pan/Tilt Position space is provided by every PTZ node that supports absolute Pan/Tilt, since it does not relate to a specific physical range. + Instead, the range should be defined as the full range of the PTZ unit normalized to the range -1 to 1 resulting in the following space description. + + + + + + + The Generic Zoom Position Space is provided by every PTZ node that supports absolute Zoom, since it does not relate to a specific physical range. + Instead, the range should be defined as the full range of the Zoom normalized to the range 0 (wide) to 1 (tele). + There is no assumption about how the generic zoom range is mapped to magnification, FOV or other physical zoom dimension. + + + + + + + The Generic Pan/Tilt translation space is provided by every PTZ node that supports relative Pan/Tilt, since it does not relate to a specific physical range. + Instead, the range should be defined as the full positive and negative translation range of the PTZ unit normalized to the range -1 to 1, + where positive translation would mean clockwise rotation or movement in right/up direction resulting in the following space description. + + + + + + + The Generic Zoom Translation Space is provided by every PTZ node that supports relative Zoom, since it does not relate to a specific physical range. + Instead, the corresponding absolute range should be defined as the full positive and negative translation range of the Zoom normalized to the range -1 to1, + where a positive translation maps to a movement in TELE direction. The translation is signed to indicate direction (negative is to wide, positive is to tele). + There is no assumption about how the generic zoom range is mapped to magnification, FOV or other physical zoom dimension. This results in the following space description. + + + + + + + The generic Pan/Tilt velocity space shall be provided by every PTZ node, since it does not relate to a specific physical range. + Instead, the range should be defined as a range of the PTZ unit’s speed normalized to the range -1 to 1, where a positive velocity would map to clockwise + rotation or movement in the right/up direction. A signed speed can be independently specified for the pan and tilt component resulting in the following space description. + + + + + + + The generic zoom velocity space specifies a zoom factor velocity without knowing the underlying physical model. The range should be normalized from -1 to 1, + where a positive velocity would map to TELE direction. A generic zoom velocity space description resembles the following. + + + + + + + The speed space specifies the speed for a Pan/Tilt movement when moving to an absolute position or to a relative translation. + In contrast to the velocity spaces, speed spaces do not contain any directional information. The speed of a combined Pan/Tilt + movement is represented by a single non-negative scalar value. + + + + + + + The speed space specifies the speed for a Zoom movement when moving to an absolute position or to a relative translation. + In contrast to the velocity spaces, speed spaces do not contain any directional information. + + + + + + + + + + + + + + + + + + + + A URI of coordinate systems. + + + + + + + A range of x-axis. + + + + + + + A range of y-axis. + + + + + + + + + + + + A URI of coordinate systems. + + + + + + + A range of x-axis. + + + + + + + + + + + + + Pan/tilt coordinate space selector. The following options are defined:
    +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace
  • +
+
+
+
+
+ + + + + + + Pan/tilt coordinate space selector. The following options are defined:
    +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace
  • +
+
+
+
+
+ + + + + + Pan and tilt position. The x component corresponds to pan and the y component to tilt. + + + + + + A zoom position. + + + + + + + + + + + Pan and tilt speed. The x component corresponds to pan and the y component to tilt. If omitted in a request, the current (if any) PanTilt movement should not be affected. + + + + + + A zoom speed. If omitted in a request, the current (if any) Zoom movement should not be affected. + + + + + + + + + + + + Specifies the absolute position of the PTZ unit together with the Space references. The default absolute spaces of the corresponding PTZ configuration MUST be referenced within the Position element. + + + + + + + Indicates if the Pan/Tilt/Zoom device unit is currently moving, idle or in an unknown state. + + + + + + + States a current PTZ error. + + + + + + + Specifies the UTC time when this status was generated. + + + + + + + + + + + + + + A list of preset position name. + + + + + + + A list of preset position. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Readable name of the preset tour. + + + + + Read only parameters to indicate the status of the preset tour. + + + + + Auto Start flag of the preset tour. True allows the preset tour to be activated always. + + + + + Parameters to specify the detail behavior of the preset tour. + + + + + A list of detail of touring spots including preset positions. + + + + + + + Unique identifier of this preset tour. + + + + + + + + + + + + + + + + Detail definition of preset position of the tour spot. + + + + + Optional parameter to specify Pan/Tilt and Zoom speed on moving toward this tour spot. + + + + + Optional parameter to specify time duration of staying on this tour sport. + + + + + + + + + + + + + + + + + + + Option to specify the preset position with Preset Token defined in advance. + + + + + Option to specify the preset position with the home position of this PTZ Node. "False" to this parameter shall be treated as an invalid argument. + + + + + Option to specify the preset position with vector of PTZ node directly. + + + + + + + + + + + + + + + + + + + + Indicates state of this preset tour by Idle/Touring/Paused. + + + + + Indicates a tour spot currently staying. + + + + + + + + + + + + + + + + + + Optional parameter to specify how many times the preset tour is recurred. + + + + + Optional parameter to specify how long time duration the preset tour is recurred. + + + + + Optional parameter to choose which direction the preset tour goes. Forward shall be chosen in case it is omitted. + + + + + + + + + + + + + + + + + + Indicates whether or not the AutoStart is supported. + + + + + Supported options for Preset Tour Starting Condition. + + + + + Supported options for Preset Tour Spot. + + + + + + + + + + + + Supported options for detail definition of preset position of the tour spot. + + + + + Supported range of stay time for a tour spot. + + + + + + + + + + + + A list of available Preset Tokens for tour spots. + + + + + An option to indicate Home postion for tour spots. + + + + + Supported range of Pan and Tilt for tour spots. + + + + + Supported range of Zoom for a tour spot. + + + + + + + + + + + + + + + + + + Supported range of Recurring Time. + + + + + Supported range of Recurring Duration. + + + + + Supported options for Direction of Preset Tour. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Status of focus position. + + + + + + + Status of focus MoveStatus. + + + + + + + Error status of focus. + + + + + + + + + + + + + + + Parameter to set autofocus near limit (unit: meter). + + + + + Parameter to set autofocus far limit (unit: meter). +If set to 0.0, infinity will be used. + + + + + + + + + + + + + + + + + + + Enabled/disabled BLC mode (on/off). + + + + + Image brightness (unit unspecified). + + + + + Color saturation of the image (unit unspecified). + + + + + Contrast of the image (unit unspecified). + + + + + Exposure mode of the device. + + + + + Focus configuration. + + + + + Infrared Cutoff Filter settings. + + + + + Sharpness of the Video image. + + + + + WDR settings. + + + + + White balance settings. + + + + + + + + + + + + + + + + + + + Exposure Mode +
    +
  • Auto – Enabled the exposure algorithm on the NVT.
  • +
  • Manual – Disabled exposure algorithm on the NVT.
  • +
+
+
+
+ + + + The exposure priority mode (low noise/framerate). + + + + + + + Rectangular exposure mask. + + + + + + + Minimum value of exposure time range allowed to be used by the algorithm. + + + + + + + Maximum value of exposure time range allowed to be used by the algorithm. + + + + + + + Minimum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Maximum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Minimum value of the iris range allowed to be used by the algorithm. + + + + + + + Maximum value of the iris range allowed to be used by the algorithm. + + + + + + + The fixed exposure time used by the image sensor (μs). + + + + + + + The fixed gain used by the image sensor (dB). + + + + + + + The fixed attenuation of input light affected by the iris (dB). 0dB maps to a fully opened iris. + + + +
+
+ + + + + + + + + + + + + + White dynamic range (on/off) + + + + + + + Optional level parameter (unitless) + + + + + + + + + Enumeration describing the available backlight compenstation modes. + + + + + Backlight compensation is disabled. + + + + + Backlight compensation is enabled. + + + + + + + + + + Backlight compensation mode (on/off). + + + + + Optional level parameter (unit unspecified). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters for the absolute focus control. + + + + + + + Parameters for the relative focus control. + + + + + + + Parameter for the continuous focus control. + + + + + + + + + + + + Position parameter for the absolute focus control. + + + + + + + Speed parameter for the absolute focus control. + + + + + + + + + + + + Distance parameter for the relative focus control. + + + + + + + Speed parameter for the relative focus control. + + + + + + + + + + + + Speed parameter for the Continuous focus control. + + + + + + + + + + + + + + + + + + + + Valid ranges of the position. + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + Valid ranges of the distance. + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Auto whitebalancing mode (auto/manual). + + + + + Rgain (unitless). + + + + + Bgain (unitless). + + + + + + + + + + + + + + + + + + Status of focus. + + + + + + + + + + + + + + + + + + + + Status of focus position. + + + + + + + Status of focus MoveStatus. + + + + + + + Error status of focus. + + + + + + + + + + + + + + + + + Type describing the ImagingSettings of a VideoSource. The supported options and ranges can be obtained via the GetOptions command. + + + + + Enabled/disabled BLC mode (on/off). + + + + + Image brightness (unit unspecified). + + + + + Color saturation of the image (unit unspecified). + + + + + Contrast of the image (unit unspecified). + + + + + Exposure mode of the device. + + + + + Focus configuration. + + + + + Infrared Cutoff Filter settings. + + + + + Sharpness of the Video image. + + + + + WDR settings. + + + + + White balance settings. + + + + + + + + + + + + + Optional element to configure Image Stabilization feature. + + + + + + + + + + + An optional parameter applied to only auto mode to adjust timing of toggling Ir cut filter. + + + + + + + + + + + + + + + + + Parameter to enable/disable Image Stabilization feature. + + + + + Optional level parameter (unit unspecified) + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies which boundaries to automatically toggle Ir cut filter following parameters are applied to. Its options shall be chosen from tt:IrCutFilterAutoBoundaryType. + + + + + Adjusts boundary exposure level for toggling Ir cut filter to on/off specified with unitless normalized value from +1.0 to -1.0. Zero is default and -1.0 is the darkest adjustment (Unitless). + + + + + Delay time of toggling Ir cut filter to on/off after crossing of the boundary exposure levels. + + + + + + + + + + + + + + + + + + + + + + + + + Type describing whether WDR mode is enabled or disabled (on/off). + + + + + Wide dynamic range mode (on/off). + + + + + Optional level parameter (unit unspecified). + + + + + + + + Type describing whether BLC mode is enabled or disabled (on/off). + + + + + Backlight compensation mode (on/off). + + + + + Optional level parameter (unit unspecified). + + + + + + + + Type describing the exposure settings. + + + + + + Exposure Mode +
    +
  • Auto – Enabled the exposure algorithm on the device.
  • +
  • Manual – Disabled exposure algorithm on the device.
  • +
+
+
+
+ + + + The exposure priority mode (low noise/framerate). + + + + + + + Rectangular exposure mask. + + + + + + + Minimum value of exposure time range allowed to be used by the algorithm. + + + + + + + Maximum value of exposure time range allowed to be used by the algorithm. + + + + + + + Minimum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Maximum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Minimum value of the iris range allowed to be used by the algorithm. + + + + + + + Maximum value of the iris range allowed to be used by the algorithm. + + + + + + + The fixed exposure time used by the image sensor (μs). + + + + + + + The fixed gain used by the image sensor (dB). + + + + + + + The fixed attenuation of input light affected by the iris (dB). 0dB maps to a fully opened iris. + + + +
+
+ + + + + + + Valid range of Backlight Compensation. + + + + + + + Valid range of Brightness. + + + + + + + Valid range of Color Saturation. + + + + + + + Valid range of Contrast. + + + + + + + Valid range of Exposure. + + + + + + + Valid range of Focus. + + + + + + + Valid range of IrCutFilterModes. + + + + + + + Valid range of Sharpness. + + + + + + + Valid range of WideDynamicRange. + + + + + + + Valid range of WhiteBalance. + + + + + + + + + + + + + + Options of parameters for Image Stabilization feature. + + + + + + + + + + + Options of parameters for adjustment of Ir cut filter auto mode. + + + + + + + + + + + + + + + + + Supported options of Image Stabilization mode parameter. + + + + + Valid range of the Image Stabilization. + + + + + + + + + + + + + + + + + + Supported options of boundary types for adjustment of Ir cut filter auto mode. The opptions shall be chosen from tt:IrCutFilterAutoBoundaryType. + + + + + Indicates whether or not boundary offset for toggling Ir cut filter is supported. + + + + + Supported range of delay time for toggling Ir cut filter. + + + + + + + + + + + + + + + + + + + + + + + + + + 'ON' or 'OFF' + + + + + + + Level range of BacklightCompensation. + + + + + + + + + + + + Exposure Mode +
    +
  • Auto – Enabled the exposure algorithm on the device.
  • +
  • Manual – Disabled exposure algorithm on the device.
  • +
+
+
+
+ + + + The exposure priority mode (low noise/framerate). + + + + + + + Valid range of the Minimum ExposureTime. + + + + + + + Valid range of the Maximum ExposureTime. + + + + + + + Valid range of the Minimum Gain. + + + + + + + Valid range of the Maximum Gain. + + + + + + + Valid range of the Minimum Iris. + + + + + + + Valid range of the Maximum Iris. + + + + + + + Valid range of the ExposureTime. + + + + + + + Valid range of the Gain. + + + + + + + Valid range of the Iris. + + + +
+
+ + + + + + + Valid ranges for the absolute control. + + + + + + + Valid ranges for the relative control. + + + + + + + Valid ranges for the continuous control. + + + + + + + + + + + + Valid ranges of the distance. + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + 'AUTO' or 'MANUAL' + + + + + + + Rgain (unitless). + + + + + + + Bgain (unitless). + + + + + + + + + + + + + + + + + + + + Mode of auto fucus. +
    +
  • AUTO
  • +
  • MANUAL
  • +
+
+
+
+ + + + Parameter to set autofocus near limit (unit: meter). + + + + + Parameter to set autofocus far limit (unit: meter). + + + +
+ +
+ + + + + + + + + + + + + Mode of WhiteBalance. +
    +
  • AUTO
  • +
  • MANUAL
  • +
+
+
+
+ + + +
+
+ + + + + + + + + + + + + Mode of Auto Focus. +
    +
  • AUTO
  • +
  • MANUAL
  • +
+
+
+
+ + + + Valid range of DefaultSpeed. + + + + + + + Valid range of NearLimit. + + + + + + + Valid range of FarLimit. + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Token value pairs that triggered this message. Typically only one item is present. + + + + + + + + + + + + + + + + + + + + + + List of parameters according to the corresponding ItemListDescription. + Each item in the list shall have a unique name. + + + + + + Value name pair as defined by the corresponding description. + + + + + Item name. + + + + + Item value. The type is defined in the corresponding description. + + + + + + + Complex value structure. + + + + + + XML tree contiaing the element value as defined in the corresponding description. + + + + + + Item name. + + + + + + + + + + + + + + + + + + + + + + Set of tokens producing this message. The list may only contain SimpleItemDescription items. + The set of tokens identify the component within the WS-Endpoint, which is responsible for the producing the message.
+ For analytics events the token set shall include the VideoSourceConfigurationToken, the VideoAnalyticsConfigurationToken + and the name of the analytics module or rule. +
+
+
+ + + Describes optional message payload parameters that may be used as key. E.g. object IDs of tracked objects are conveyed as key. + + + + + Describes the payload of the message. + + + +
+ + + Must be set to true when the described Message relates to a property. An alternative term of "property" is a "state" in contrast to a pure event, which contains relevant information for only a single point in time.
Default is false.
+
+
+ +
+ + + + + + + + + + + Describes a list of items. Each item in the list shall have a unique name. + The list is designed as linear structure without optional or unbounded elements. + Use ElementItems only when complex structures are inevitable. + + + + + + Description of a simple item. The type must be of cathegory simpleType (xs:string, xs:integer, xs:float, ...). + + + + + Item name. Must be unique within a list. + + + + + + + + + Description of a complex type. The Type must reference a defined type. + + + + + + Item name. Must be unique within a list. + + + + + The type of the item. The Type must reference a defined type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Object Class Type + + + + + A likelihood/probability that the corresponding object belongs to this class. The sum of the likelihoods shall NOT exceed 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number of columns of the cell grid (x dimension) + + + + + Number of rows of the cell grid (y dimension) + + + + + A “1” denotes a cell where motion is detected and a “0” an empty cell. The first cell is in the upper left corner. Then the cell order goes first from left to right and then from up to down. If the number of cells is not a multiple of 8 the last byte is filled with zeros. The information is run length encoded according to Packbit coding in ISO 12369 (TIFF, Revision 6.0). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + List of configuration parameters as defined in the correspding description. + + + + + + Name of the configuration. + + + + + Type of the configuration represented by a unique QName. The Type characterizes a ConfigDescription defining the Parameters. + + + + + + + + + + List describing the configuration parameters. The names of the parameters must be unique. If possible SimpleItems + should be used to transport the information to ease parsing of dynamically defined messages by a client + application. + + + + + + + The analytics modules and rule engine produce Events, which must be listed within the Analytics Module Description. In order to do so + the structure of the Message is defined and consists of three groups: Source, Key, and Data. It is recommended to use SimpleItemDescriptions wherever applicable. + The name of all Items must be unique within all Items contained in any group of this Message. + Depending on the component multiple parameters or none may be needed to identify the component uniquely. + + + + + + + + + + The ParentTopic labels the message (e.g. "nn:RuleEngine/LineCrossing"). The real message can extend the ParentTopic + by for example the name of the instaniated rule (e.g. "nn:RuleEngine/LineCrossing/corssMyFirstLine"). + Even without knowing the complete topic name, the subscriber will be able to distiguish the + messages produced by different rule instances of the same type via the Source fields of the message. + There the name of the rule instance, which produced the message, must be listed. + + + + + + + + + + + + + XML Type of the Configuration (e.g. "tt::LineDetector"). + + + + + + + + + + + + + + + + Lists the location of all schemas that are referenced in the rules. + + + + + List of rules supported by the Video Analytics configuration.. + + + + + + + + + + + + + + + + + + It optionally contains a list of URLs that provide the location of schema files. + These schema files describe the types and elements used in the analytics module descriptions. + If the analytics module descriptions reference types or elements of the ONVIF schema file, + the ONVIF schema file MUST be explicitly listed. + + + + + + + + + + + + + + + + + + + Contains Polygon configuration for rule parameters + + + + + + + + + + + + Contains array of Polyline + + + + + + + + + + + + + + + + + + Contains PolylineArray configuration data + + + + + + + + + + + + Motion Expression data structure contains motion expression which is based on Scene Descriptor schema with XPATH syntax. The Type argument could allow introduction of different dialects + + + + + + + + + + + + + Contains Rule MotionExpression configuration + + + + + + + + + + + + Mapping of the cell grid to the Video frame. The cell grid is starting from the upper left corner and x dimension is going from left to right and the y dimension from up to down. + + + + + + + Number of columns of the cell grid (x dimension) + + + + + Number of rows of the cell grid (y dimension) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Configuration of the streaming and coding settings of a Video window. + + + + + Optional name of the pane configuration. + + + + + If the device has audio outputs, this element contains a pointer to the audio output that is associated with the pane. A client +can retrieve the available audio outputs of a device using the GetAudioOutputs command of the DeviceIO service. + + + + + If the device has audio sources, this element contains a pointer to the audio source that is associated with this pane. +The audio connection from a decoder device to the NVT is established using the backchannel mechanism. A client can retrieve the available audio sources of a device using the GetAudioSources command of the +DeviceIO service. + + + + + The configuration of the audio encoder including codec, bitrate +and sample rate. + + + + + A pointer to a Receiver that has the necessary information to receive + data from a Transmitter. This Receiver can be connected and the network video decoder displays the received data on the specified outputs. A client can retrieve the available Receivers using the + GetReceivers command of the Receiver Service. + + + + + A unique identifier in the display device. + + + + + + + + + + A pane layout describes one Video window of a display. It links a pane configuration to a region of the screen. + + + + + Reference to the configuration of the streaming and coding parameters. + + + + + Describes the location and size of the area on the monitor. The area coordinate values are espressed in normalized units [-1.0, 1.0]. + + + + + + + + + + A layout describes a set of Video windows that are displayed simultaniously on a display. + + + + + List of panes assembling the display layout. + + + + + + + + + + + + + + + + This type contains the Audio and Video coding capabilities of a display service. + + + + + If the device supports audio encoding this section describes the supported codecs and their configuration. + + + + + If the device supports audio decoding this section describes the supported codecs and their settings. + + + + + This section describes the supported video codesc and their configuration. + + + + + + + + + + The options supported for a display layout. + + + + + Lists the possible Pane Layouts of the Video Output + + + + + + + + + + + + + + + + Description of a pane layout describing a complete display layout. + + + + + List of areas assembling a layout. Coordinate values are in the range [-1.0, 1.0]. + + + + + + + + + + + + + + + + + + + + + + Description of a receiver, including its token and configuration. + + + + + + Unique identifier of the receiver. + + + + + Describes the configuration of the receiver. + + + + + + + + + + + Describes the configuration of a receiver. + + + + + + The following connection modes are defined: + + + + + Details of the URI to which the receiver should connect. + + + + + Stream connection parameters. + + + + + + + + + + + Specifies a receiver connection mode. + + + + + + The receiver connects on demand, as required by consumers of the media streams. + + + + + The receiver attempts to maintain a persistent connection to the configured endpoint. + + + + + The receiver does not attempt to connect. + + + + + This case should never happen. + + + + + + + + + Specifies the current connection state of the receiver. + + + + + + The receiver is not connected. + + + + + The receiver is attempting to connect. + + + + + The receiver is connected. + + + + + This case should never happen. + + + + + + + + + Contains information about a receiver's current state. + + + + + + The connection state of the receiver may have one of the following states: + + + + + Indicates whether or not the receiver was created automatically. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The earliest point in time where there is recorded data on the device. + + + + + The most recent point in time where there is recorded data on the device. + + + + + The device contains this many recordings. + + + + + + + + + + A structure for defining a limited scope when searching in recorded data. + + + + + A list of sources that are included in the scope. If this list is included, only data from one of these sources shall be searched. + + + + + A list of recordings that are included in the scope. If this list is included, only data from one of these recordings shall be searched. + + + + + An xpath expression used to specify what recordings to search. Only those recordings with an RecordingInformation structure that matches the filter shall be searched. + + + + + Extension point + + + + + + + + + + + + + + + + + + + The lower boundary of the PTZ volume to look for. + + + + + The upper boundary of the PTZ volume to look for. + + + + + If true, search for when entering the specified PTZ volume. + + + + + + + + + + + + + + + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A RecordingInformation structure for each found recording matching the search. + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A FindEventResult structure for each found event matching the search. + + + + + + + + + + The recording where this event was found. Empty string if no recording is associated with this event. + + + + + A reference to the track where this event was found. Empty string if no track is associated with this event. + + + + + The time when the event occured. + + + + + + The description of the event. + + + + + If true, indicates that the event is a virtual event generated for this particular search session to give the state of a property at the start time of the search. + + + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A FindPTZPositionResult structure for each found PTZ position matching the search. + + + + + + + + + + A reference to the recording containing the PTZ position. + + + + + A reference to the metadata track containing the PTZ position. + + + + + The time when the PTZ position was valid. + + + + + The PTZ position. + + + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A FindMetadataResult structure for each found set of Metadata matching the search. + + + + + + + + + + A reference to the recording containing the metadata. + + + + + A reference to the metadata track containing the matching metadata. + + + + + The point in time when the matching metadata occurs in the metadata track. + + + + + + + + + + + + The search is queued and not yet started. + + + + + The search is underway and not yet completed. + + + + + The search has been completed and no new results will be found. + + + + + The state of the search is unknown. (This is not a valid response from GetSearchState.) + + + + + + + + + + + + + + + + Information about the source of the recording. This gives a description of where the data in the recording comes from. Since a single + recording is intended to record related material, there is just one source. It is indicates the physical location or the + major data source for the recording. Currently the recordingconfiguration cannot describe each individual data source. + + + + + + + + + Basic information about the track. Note that a track may represent a single contiguous time span or consist of multiple slices. + + + + + + + + + + + + A set of informative desciptions of a data source. The Search searvice allows a client to filter on recordings based on information in this structure. + + + + + + + Identifier for the source chosen by the client that creates the structure. + This identifier is opaque to the device. Clients may use any type of URI for this field. A device shall support at least 128 characters. + + + + + Informative user readable name of the source, e.g. "Camera23". A device shall support at least 20 characters. + + + + + Informative description of the physical location of the source, e.g. the coordinates on a map. + + + + + Informative description of the source. + + + + + URI provided by the service supplying data to be recorded. A device shall support at least 128 characters. + + + + + + + + + + + + + + + + + This case should never happen. + + + + + + + + + + + Type of the track: "Video", "Audio" or "Metadata". + The track shall only be able to hold data of that type. + + + + + Informative description of the contents of the track. + + + + + The start date and time of the oldest recorded data in the track. + + + + + The stop date and time of the newest recorded data in the track. + + + + + + + + + + + + + + + Placeholder for future extension. + + + + + + + + A set of media attributes valid for a recording at a point in time or for a time interval. + + + + + A reference to the recording that has these attributes. + + + + + A set of attributes for each track. + + + + + The attributes are valid from this point in time in the recording. + + + + + The attributes are valid until this point in time in the recording. Can be equal to 'From' to indicate that the attributes are only known to be valid for this particular point in time. + + + + + + + + + + + + The basic information about the track. Note that a track may represent a single contiguous time span or consist of multiple slices. + + + + + If the track is a video track, exactly one of this structure shall be present and contain the video attributes. + + + + + If the track is an audio track, exactly one of this structure shall be present and contain the audio attributes. + + + + + If the track is an metadata track, exactly one of this structure shall be present and contain the metadata attributes. + + + + + + + + + + + + + + + + + + + + + + Average bitrate in kbps. + + + + + The width of the video in pixels. + + + + + The height of the video in pixels. + + + + + Used video codec, either Jpeg, H.264 or Mpeg4 + + + + + Average framerate in frames per second. + + + + + + + + + + + + The bitrate in kbps. + + + + + Audio codec used for encoding the audio (either G.711, G.726 or AAC) + + + + + The sample rate in kHz. + + + + + + + + + + + + Indicates that there can be PTZ data in the metadata track in the specified time interval. + + + + + Indicates that there can be analytics data in the metadata track in the specified time interval. + + + + + Indicates that there can be notifications in the metadata track in the specified time interval. + + + + + + + List of all PTZ spaces active for recording. Note that events are only recorded on position changes and the actual point of recording may not necessarily contain an event of the specified type. + + + + + + + + + + + + + + + + + Information about the source of the recording. + + + + + Informative description of the source. + + + + + Sspecifies the maximum time that data in any track within the + recording shall be stored. The device shall delete any data older than the maximum retention + time. Such data shall not be accessible anymore. If the MaximumRetentionPeriod is set to 0, + the device shall not limit the retention time of stored data, except by resource constraints. + Whatever the value of MaximumRetentionTime, the device may automatically delete + recordings to free up storage space for new recordings. + + + + + + + + + + + + Type of the track. It shall be equal to the strings “Video”, + “Audio” or “Metadata”. The track shall only be able to hold data of that type. + + + + + Informative description of the track. + + + + + + + + + + + + Token of the recording. + + + + + Configuration of the recording. + + + + + List of tracks. + + + + + + + + + + + + Configuration of a track. + + + + + + + + + + + Token of the track. + + + + + Configuration of the track. + + + + + + + + + + + + Identifies the recording to which this job shall store the received data. + + + + + The mode of the job. If it is idle, nothing shall happen. If it is active, the device shall try + to obtain data from the receivers. A client shall use GetRecordingJobState to determine if data transfer is really taking place.
+ The only valid values for Mode shall be “Idle” and “Active”.
+
+
+ + + This shall be a non-negative number. If there are multiple recording jobs that store data to + the same track, the device will only store the data for the recording job with the highest + priority. The priority is specified per recording job, but the device shall determine the priority + of each track individually. If there are two recording jobs with the same priority, the device + shall record the data corresponding to the recording job that was activated the latest. + + + + + Source of the recording. + + + +
+ +
+ + + + + + + + + + + + + + + + This field shall be a reference to the source of the data. The type of the source + is determined by the attribute Type in the SourceToken structure. If Type is + http://www.onvif.org/ver10/schema/Receiver, the token is a ReceiverReference. In this case + the device shall receive the data over the network. If Type is + http://www.onvif.org/ver10/schema/Profile, the token identifies a media profile, instructing the + device to obtain data from a profile that exists on the local device. + + + + + If this field is TRUE, and if the SourceToken is omitted, the device + shall create a receiver object (through the receiver service) and assign the + ReceiverReference to the SourceToken field. When retrieving the RecordingJobConfiguration + from the device, the AutoCreateReceiver field shall never be present. + + + + + List of tracks associated with the recording. + + + + + + + + + + + + + + + + + + If the received RTSP stream contains multiple tracks of the same type, the + SourceTag differentiates between those Tracks. This field can be ignored in case of recording a local source. + + + + + The destination is the tracktoken of the track to which the device shall store the + received data. + + + + + + + + + + + + Identification of the recording that the recording job records to. + + + + + Holds the aggregated state over the whole RecordingJobInformation structure. + + + + + Identifies the data source of the recording job. + + + + + + + + + + + + + + + + + + + + + + Identifies the data source of the recording job. + + + + + Holds the aggregated state over all substructures of RecordingJobStateSource. + + + + + List of track items. + + + + + + + + + + + + + + + + + + + Identifies the track of the data source that provides the data. + + + + + Indicates the destination track. + + + + + Optionally holds an implementation defined string value that describes the error. + The string should be in the English language. + + + + + Provides the job state of the track. The valid + values of state shall be “Idle”, “Active” and “Error”. If state equals “Error”, the Error field may be filled in with an implementation defined value. + + + + + + + + + + + + + + + + + + + + + + + + + + Configuration parameters for the replay service. + + + + + + The RTSP session timeout. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Token of the analytics engine (AnalyticsEngine) being controlled. + + + + + Token of the analytics engine configuration (VideoAnalyticsConfiguration) in effect. + + + + + Tokens of the input (AnalyticsEngineInput) configuration applied. + + + + + Tokens of the receiver providing media input data. The order of ReceiverToken shall exactly match the order of InputToken. + + + + + + + + + + + + + + + + + + + This case should never happen. + + + + + + + + + + Token of the control object whose status is requested. + + + + + + + + + + + + + + + + + + + + + + + + + + Action Engine Event Payload data structure contains the information about the ONVIF command invocations. Since this event could be generated by other or proprietary actions, the command invocation specific fields are defined as optional and additional extension mechanism is provided for future or additional action definitions. + + + + + Request Message + + + + + Response Message + + + + + Fault Message + + + + + + + + + + + + + + + + + + + + + + + AudioClassType acceptable values are; + gun_shot, scream, glass_breaking, tire_screech + + + + + + + + + + Indicates audio class label + + + + + A likelihood/probability that the corresponding audio event belongs to this class. The sum of the likelihoods shall NOT exceed 1 + + + + + + + + + + + + Array of audio class label and class probability + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + For OSD position type, following are the pre-defined:
  • UpperLeft
  • +
  • UpperRight
  • +
  • LowerLeft
  • +
  • LowerRight
  • +
  • Custom
+
+
+
+ + +
+ +
+ + + + + + + + + + + The value range of "Transparent" could be defined by vendors only should follow this rule: the minimum value means non-transparent and the maximum value maens fully transparent. + + + + + + + + + + + + + + The following OSD Text Type are defined:
    +
  • Plain - The Plain type means the OSD is shown as a text string which defined in the "PlainText" item.
  • +
  • Date - The Date type means the OSD is shown as a date, format of which should be present in the "DateFormat" item.
  • +
  • Time - The Time type means the OSD is shown as a time, format of which should be present in the "TimeFormat" item.
  • +
  • DateAndTime - The DateAndTime type means the OSD is shown as date and time, format of which should be present in the "DateFormat" and the "TimeFormat" item.
  • +
+
+
+
+ + + + List of supported OSD date formats. This element shall be present when the value of Type field has Date or DateAndTime. The following DateFormat are defined:
    +
  • M/d/yyyy - e.g. 3/6/2013
  • +
  • MM/dd/yyyy - e.g. 03/06/2013
  • +
  • dd/MM/yyyy - e.g. 06/03/2013
  • +
  • yyyy/MM/dd - e.g. 2013/03/06
  • +
  • yyyy-MM-dd - e.g. 2013-06-03
  • +
  • dddd, MMMM dd, yyyy - e.g. Wednesday, March 06, 2013
  • +
  • MMMM dd, yyyy - e.g. March 06, 2013
  • +
  • dd MMMM, yyyy - e.g. 06 March, 2013
  • +
+
+
+
+ + + + List of supported OSD time formats. This element shall be present when the value of Type field has Time or DateAndTime. The following TimeFormat are defined:
    +
  • h:mm:ss tt - e.g. 2:14:21 PM
  • +
  • hh:mm:ss tt - e.g. 02:14:21 PM
  • +
  • H:mm:ss - e.g. 14:14:21
  • +
  • HH:mm:ss - e.g. 14:14:21
  • +
+
+
+
+ + + Font size of the text in pt. + + + + + Font color of the text. + + + + + Background color of the text. + + + + + The content of text to be displayed. + + + +
+ +
+ + + + + + + + + + + + + The URI of the image which to be displayed. + + + + + + + + + + + + + + + + + + + + + + + + + + + Describe the option of the color supported. Either list each color or define the range of color value. The following values are acceptable for Colourspace attribute.
  • http://www.onvif.org/ver10/colorspace/YCbCr - YCbCr colourspace
  • +
  • http://www.onvif.org/ver10/colorspace/CIELUV - CIE LUV
  • +
  • http://www.onvif.org/ver10/colorspace/CIELAB - CIE 1976 (L*a*b*)
  • +
  • http://www.onvif.org/ver10/colorspace/HSV - HSV colourspace
+
+
+ + + + + List the supported color. + + + + + Define the rang of color supported. + + + + + +
+ + + + Describe the option of the color and its transparency. + + + + + Optional list of supported colors. + + + + + Range of the transparent level. Larger means more tranparent. + + + + + + + + + + + + + + + + + + + List of supported OSD text type. When a device indicates the supported number relating to Text type in MaximumNumberOfOSDs, the type shall be presented. + + + + + Range of the font size value. + + + + + List of supported date format. + + + + + List of supported time format. + + + + + List of supported font color. + + + + + List of supported background color. + + + + + + + + + + + + + + + + + + + List of avaiable uris of image. + + + + + + + + + + + + + + + + + + + + + Reference to the video source configuration. + + + + + Type of OSD. + + + + + Position configuration of OSD. + + + + + Text configuration of OSD. It shall be present when the value of Type field is Text. + + + + + Image configuration of OSD. It shall be present when the value of Type field is Image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The maximum number of OSD configurations supported for the specificate video source configuration. If a device limits the number of instances by OSDType, it should indicate the supported number via the related attribute. + + + + + List supported type of OSD configuration. When a device indicates the supported number for each types in MaximumNumberOfOSDs, related type shall be presented. A device shall return Option element relating to listed type. + + + + + List available OSD position type. Following are the pre-defined:
  • UpperLeft
  • +
  • UpperRight
  • +
  • LowerLeft
  • +
  • LowerRight
  • +
  • Custom
+
+
+
+ + + Option of the OSD text configuration. This element shall be returned if the device is signaling the support for Text. + + + + + Option of the OSD image configuration. This element shall be returned if the device is signaling the support for Image. + + + +
+ +
+ + + + + + + + + + +
diff --git a/onvif/wsdl/onvif.xsd b/onvif/wsdl/onvif.xsd new file mode 100644 index 000000000..252204e2f --- /dev/null +++ b/onvif/wsdl/onvif.xsd @@ -0,0 +1,8559 @@ + + + + + + + + + + + + + + Base class for physical entities like inputs and outputs. + + + + Unique identifier referencing the physical entity. + + + + + + + Unique identifier for a physical or logical resource. + Tokens should be assigned such that they are unique within a device. Tokens must be at least unique within its class. + Length up to 64 characters. + + + + + + + + + User readable name. Length up to 64 characters. + + + + + + + + + Rectangle defined by lower left corner position and size. Units are pixel. + + + + + + + + + + Range of a rectangle. The rectangle itself is defined by lower left corner position and size. Units are pixel. + + + + + Range of X-axis. + + + + + Range of Y-axis. + + + + + Range of width. + + + + + Range of height. + + + + + + + + Range of values greater equal Min value and less equal Max value. + + + + + + + + + + Range of values greater equal Min value and less equal Max value. + + + + + + + + + + Range of duration greater equal Min duration and less equal Max duration. + + + + + + + + + + List of values. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Representation of a physical video input. + + + + + + + Frame rate in frames per second. + + + + + Horizontal and vertical resolution + + + + + Optional configuration of the image sensor. + + + + + + + + + + + + + + + Optional configuration of the image sensor. To be used if imaging service 2.00 is supported. + + + + + + + + + + + + + + + Representation of a physical audio input. + + + + + + + number of available audio channels. (1: mono, 2: stereo) + + + + + + + + + + + + + A media profile consists of a set of media configurations. Media profiles are used by a client + to configure properties of a media stream from an NVT.
+ An NVT shall provide at least one media profile at boot. An NVT should provide “ready to use” + profiles for the most common media configurations that the device offers.
+ A profile consists of a set of interconnected configuration entities. Configurations are provided + by the NVT and can be either static or created dynamically by the NVT. For example, the + dynamic configurations can be created by the NVT depending on current available encoding + resources. +
+
+ + + + User readable name of the profile. + + + + + Optional configuration of the Video input. + + + + + Optional configuration of the Audio input. + + + + + Optional configuration of the Video encoder. + + + + + Optional configuration of the Audio encoder. + + + + + Optional configuration of the video analytics module and rule engine. + + + + + Optional configuration of the pan tilt zoom unit. + + + + + Optional configuration of the metadata stream. + + + + + Extensions defined in ONVIF 2.0 + + + + + + Unique identifier of the profile. + + + + + A value of true signals that the profile cannot be deleted. Default is false. + + + +
+ + + + + + + Optional configuration of the Audio output. + + + + + Optional configuration of the Audio decoder. + + + + + + + + + + + + + + + + + + + + + + + + + + Base type defining the common properties of a configuration. + + + + + User readable name. Length up to 64 characters. + + + + + Number of internal references currently using this configuration.
This parameter is read-only and cannot be changed by a set request.
For example the value increases if the configuration is added to a media profile or attached to a PaneConfiguration.
+
+
+
+ + + Token that uniquely refernces this configuration. Length up to 64 characters. + + +
+ + + + + + + + + + Reference to the physical input. + + + + + Rectangle specifying the Video capturing area. The capturing area shall not be larger than the whole Video source area. + + + + + + + + + + + + + + + Optional element to configure rotation of captured image. + + + + + + + + + + + + + + + + + Parameter to enable/disable Rotation feature. + + + + + Optional parameter to configure how much degree of clockwise rotation of image for On mode. Omitting this parameter for On mode means 180 degree rotation. + + + + + + + + + + + + + + + + + + + + + + + + + + Supported range for the capturing area. + + + + + List of physical inputs. + + + + + + + + + + + + + Options of parameters for Rotation feature. + + + + + + + + + + + + + + + + + Supported options of Rotate mode parameter. + + + + + List of supported degree value for rotation. + + + + + + + + + + + + + + + + + + + + + + Used video codec, either Jpeg, H.264 or Mpeg4 + + + + + Configured video resolution + + + + + Relative value for the video quantizers and the quality of the video. A high value within supported quality range means higher quality + + + + + Optional element to configure rate control related parameters. + + + + + Optional element to configure Mpeg4 related parameters. + + + + + Optional element to configure H.264 related parameters. + + + + + Defines the multicast settings that could be used for video streaming. + + + + + The rtsp session timeout for the related video stream + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number of the columns of the Video image. + + + + + Number of the lines of the Video image. + + + + + + + + + + Maximum output framerate in fps. If an EncodingInterval is provided the resulting encoded framerate will be reduced by the given factor. + + + + + Interval at which images are encoded and transmitted. (A value of 1 means that every frame is encoded, a value of 2 means that every 2nd frame is encoded ...) + + + + + the maximum output bitrate in kbps + + + + + + + + + + Determines the interval in which the I-Frames will be coded. An entry of 1 indicates I-Frames are continuously generated. An entry of 2 indicates that every 2nd image is an I-Frame, and 3 only every 3rd frame, etc. The frames in between are coded as P or B Frames. + + + + + the Mpeg4 profile, either simple profile (SP) or advanced simple profile (ASP) + + + + + + + + + + Group of Video frames length. Determines typically the interval in which the I-Frames will be coded. An entry of 1 indicates I-Frames are continuously generated. An entry of 2 indicates that every 2nd image is an I-Frame, and 3 only every 3rd frame, etc. The frames in between are coded as P or B Frames. + + + + + the H.264 profile, either baseline, main, extended or high + + + + + + + + + + Range of the quality values. A high value means higher quality. + + + + + Optional JPEG encoder settings ranges (See also Extension element). + + + + + Optional MPEG-4 encoder settings ranges (See also Extension element). + + + + + Optional H.264 encoder settings ranges (See also Extension element). + + + + + + + + + + + + + Optional JPEG encoder settings ranges. + + + + + Optional MPEG-4 encoder settings ranges. + + + + + Optional H.264 encoder settings ranges. + + + + + + + + + + + + + + + + + List of supported image sizes. + + + + + Supported frame rate in fps (frames per second). + + + + + Supported encoding interval range. The encoding interval corresponds to the number of frames devided by the encoded frames. An encoding interval value of "1" means that all frames are encoded. + + + + + + + + + + + + Supported range of encoded bitrate in kbps. + + + + + + + + + + + + + + List of supported image sizes. + + + + + Supported group of Video frames length. This value typically corresponds to the I-Frame distance. + + + + + Supported frame rate in fps (frames per second). + + + + + Supported encoding interval range. The encoding interval corresponds to the number of frames devided by the encoded frames. An encoding interval value of "1" means that all frames are encoded. + + + + + List of supported MPEG-4 profiles. + + + + + + + + + + + + Supported range of encoded bitrate in kbps. + + + + + + + + + + + + + + List of supported image sizes. + + + + + Supported group of Video frames length. This value typically corresponds to the I-Frame distance. + + + + + Supported frame rate in fps (frames per second). + + + + + Supported encoding interval range. The encoding interval corresponds to the number of frames devided by the encoded frames. An encoding interval value of "1" means that all frames are encoded. + + + + + List of supported H.264 profiles. + + + + + + + + + + + + Supported range of encoded bitrate in kbps. + + + + + + + + + + + + + + + + + + Token of the Audio Source the configuration applies to + + + + + + + + + + + + + + Tokens of the audio source the configuration can be used for. + + + + + + + + + + + + + + + + + + + + + + Audio codec used for encoding the audio input (either G.711, G.726 or AAC) + + + + + The output bitrate in kbps. + + + + + The output sample rate in kHz. + + + + + Defines the multicast settings that could be used for video streaming. + + + + + The rtsp session timeout for the related audio stream + + + + + + + + + + + + + + + + + + + + + + list of supported AudioEncoderConfigurations + + + + + + + + + + + The enoding used for audio data (either G.711, G.726 or AAC) + + + + + List of supported bitrates in kbps for the specified Encoding + + + + + List of supported Sample Rates in kHz for the specified Encoding + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + optional element to configure which PTZ related data is to include in the metadata stream + + + + + Optional element to configure the streaming of events. A client might be interested in receiving all, + none or some of the events produced by the device:
    +
  • To get all events: Include the Events element but do not include a filter.
  • +
  • To get no events: Do not include the Events element.
  • +
  • To get only some events: Include the Events element and include a filter in the element.
  • +
+
+
+
+ + + Defines whether the streamed metadata will include metadata from the analytics engines (video, cell motion, audio etc.) + + + + + Defines the multicast settings that could be used for video streaming. + + + + + The rtsp session timeout for the related audio stream + + + + + +
+ +
+
+
+ + + + + + + + + + + + True if the metadata stream shall contain the PTZ status (IDLE, MOVING or UNKNOWN) + + + + + True if the metadata stream shall contain the PTZ position + + + + + + + + + Subcription handling in the same way as base notification subscription. + + + + + + + + + + + + + + + + + + + + + + + + + + + + True if the device is able to stream pan or tilt status information. + + + + + True if the device is able to stream zoom status inforamtion. + + + + + + True if the device is able to stream the pan or tilt position. + + + + + True if the device is able to stream zoom position information. + + + + + + + + + + + + + + + + + + Representation of a physical video outputs. + + + + + + + + Resolution of the display in Pixel. + + + + + Refresh rate of the display in Hertz. + + + + + Aspect ratio of the display as physical extent of width divided by height. + + + + + + + + + + + + + + + + + + + + + + + + Token of the Video Output the configuration applies to + + + + + + + + + + + + + + + + + + + + + + + + + If the device is able to decode Jpeg streams this element describes the supported codecs and configurations + + + + + If the device is able to decode H.264 streams this element describes the supported codecs and configurations + + + + + If the device is able to decode Mpeg4 streams this element describes the supported codecs and configurations + + + + + + + + + + + + List of supported H.264 Video Resolutions + + + + + List of supported H264 Profiles (either baseline, main, extended or high) + + + + + Supported H.264 bitrate range in kbps + + + + + Supported H.264 framerate range in fps + + + + + + + + + + + + List of supported Jpeg Video Resolutions + + + + + Supported Jpeg bitrate range in kbps + + + + + Supported Jpeg framerate range in fps + + + + + + + + + + + + List of supported Mpeg4 Video Resolutions + + + + + List of supported Mpeg4 Profiles (either SP or ASP) + + + + + Supported Mpeg4 bitrate range in kbps + + + + + Supported Mpeg4 framerate range in fps + + + + + + + + + + + + + + + + + + Representation of a physical audio outputs. + + + + + + + + + + + + + + + + + + + + Token of the phsycial Audio output. + + + + + + An audio channel MAY support different types of audio transmission. While for full duplex + operation no special handling is required, in half duplex operation the transmission direction + needs to be switched. + The optional SendPrimacy parameter inside the AudioOutputConfiguration indicates which + direction is currently active. An NVC can switch between different modes by setting the + AudioOutputConfiguration.
+ The following modes for the Send-Primacy are defined:
    +
  • www.onvif.org/ver20/HalfDuplex/Server + The server is allowed to send audio data to the client. The client shall not send + audio data via the backchannel to the NVT in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Client + The client is allowed to send audio data via the backchannel to the server. The + NVT shall not send audio data to the client in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Auto + It is up to the device how to deal with sending and receiving audio data.
  • +
+ Acoustic echo cancellation is out of ONVIF scope.
+
+
+ + + Volume setting of the output. The applicable range is defined via the option AudioOutputOptions.OutputLevelRange. + + + +
+ +
+
+
+ + + + + + + + Tokens of the physical Audio outputs (typically one). + + + + + + An audio channel MAY support different types of audio transmission. While for full duplex + operation no special handling is required, in half duplex operation the transmission direction + needs to be switched. + The optional SendPrimacy parameter inside the AudioOutputConfiguration indicates which + direction is currently active. An NVC can switch between different modes by setting the + AudioOutputConfiguration.
+ The following modes for the Send-Primacy are defined:
    +
  • www.onvif.org/ver20/HalfDuplex/Server + The server is allowed to send audio data to the client. The client shall not send + audio data via the backchannel to the NVT in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Client + The client is allowed to send audio data via the backchannel to the server. The + NVT shall not send audio data to the client in this mode.
  • +
  • www.onvif.org/ver20/HalfDuplex/Auto + It is up to the device how to deal with sending and receiving audio data.
  • +
+ Acoustic echo cancellation is out of ONVIF scope.
+
+
+ + + Minimum and maximum level range supported for this Output. + + + +
+ +
+ + + + + + The Audio Decoder Configuration does not contain any that parameter to configure the +decoding .A decoder shall decode every data it receives (according to its capabilities). + + + + + + + + + + + + + + + + + + If the device is able to decode AAC encoded audio this section describes the supported configurations + + + + + If the device is able to decode G711 encoded audio this section describes the supported configurations + + + + + If the device is able to decode G726 encoded audio this section describes the supported configurations + + + + + + + + + + + + List of supported bitrates in kbps + + + + + List of supported sample rates in kHz + + + + + + + + + + + + List of supported bitrates in kbps + + + + + List of supported sample rates in kHz + + + + + + + + + + + + List of supported bitrates in kbps + + + + + List of supported sample rates in kHz + + + + + + + + + + + + + + + + + + + + The multicast address (if this address is set to 0 no multicast streaming is enaled) + + + + + The RTP mutlicast destination port. A device may support RTCP. In this case the port value shall be even to allow the corresponding RTCP stream to be mapped to the next higher (odd) destination port number as defined in the RTSP specification. + + + + + In case of IPv6 the TTL value is assumed as the hop limit. Note that for IPV6 and administratively scoped IPv4 multicast the primary use for hop limit / TTL is to prevent packets from (endlessly) circulating and not limiting scope. In these cases the address contains the scope. + + + + + Read only property signalling that streaming is persistant. Use the methods StartMulticastStreaming and StopMulticastStreaming to switch its state. + + + + + + + + + + + + Defines if a multicast or unicast stream is requested + + + + + + + + + + + + + + + + + + + + Defines the network protocol for streaming, either UDP=RTP/UDP, RTSP=RTP/RTSP/TCP or HTTP=RTP/RTSP/HTTP/TCP + + + + + Optional element to describe further tunnel options. This element is normally not needed + + + + + + + + + + + + + + + + + + + Stable Uri to be used for requesting the media stream + + + + + Indicates if the Uri is only valid until the connection is established. The value shall be set to "false". + + + + + Indicates if the Uri is invalid after a reboot of the device. The value shall be set to "false". + + + + + Duration how long the Uri is valid. This parameter shall be set to PT0S to indicate that this stream URI is indefinitely valid even if the profile changes + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the scope is fixed or configurable. + + + + + Scope item URI. + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether or not an interface is enabled. + + + + + Network interface information + + + + + Link configuration. + + + + + IPv4 network interface configuration. + + + + + IPv6 network interface configuration. + + + + + + + + + + + + + + + + Extension point prepared for future 802.3 configuration. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Configured link settings. + + + + + Current active link settings. + + + + + Integer indicating interface type, for example: 6 is ethernet. + + + + + + + + + + Auto negotiation on/off. + + + + + Speed. + + + + + Duplex type, Half or Full. + + + + + + + + + + + + + + + + + For valid numbers, please refer to http://www.iana.org/assignments/ianaiftype-mib. + + + + + + + + + + Network interface name, for example eth0. + + + + + Network interface MAC address. + + + + + Maximum transmission unit. + + + + + + + + + + Indicates whether or not IPv6 is enabled. + + + + + IPv6 configuration. + + + + + + + + + + Indicates whether or not IPv4 is enabled. + + + + + IPv4 configuration. + + + + + + + + + + List of manually added IPv4 addresses. + + + + + Link local address. + + + + + IPv4 address configured by using DHCP. + + + + + Indicates whether or not DHCP is used. + + + + + + + + + + + + Indicates whether router advertisment is used. + + + + + DHCP configuration. + + + + + List of manually entered IPv6 addresses. + + + + + List of link local IPv6 addresses. + + + + + List of IPv6 addresses configured by using DHCP. + + + + + List of IPv6 addresses configured by using router advertisment. + + + + + + + + + + + + + + + + + + + + + + + + + + + Network protocol type string. + + + + + Indicates if the protocol is enabled or not. + + + + + The port that is used by the protocol. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Network host type: IPv4, IPv6 or DNS. + + + + + IPv4 address. + + + + + IPv6 address. + + + + + DNS name. + + + + + + + + + + + + + + + + + + Indicates if the address is an IPv4 or IPv6 address. + + + + + IPv4 address. + + + + + IPv6 address + + + + + + + + + + IPv4 address + + + + + Prefix/submask length + + + + + + + + + + + + + + IPv6 address + + + + + Prefix/submask length + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether the hostname is obtained from DHCP or not. + + + + + Indicates the hostname. + + + + + + + + + + + + + + + + + + Indicates whether or not DNS information is retrieved from DHCP. + + + + + Search domain. + + + + + List of DNS addresses received from DHCP. + + + + + List of manually entered DNS addresses. + + + + + + + + + + + + + + + + + + Indicates if NTP information is to be retrieved by using DHCP. + + + + + List of NTP addresses retrieved by using DHCP. + + + + + List of manually entered NTP addresses. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dynamic DNS type. + + + + + DNS name. + + + + + Time to live. + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether or not an interface is enabled. + + + + + Link configuration. + + + + + Maximum transmission unit. + + + + + IPv4 network interface configuration. + + + + + IPv6 network interface configuration. + + + + + + + + + + + + + + + + + + + + + Indicates whether or not IPv6 is enabled. + + + + + Indicates whether router advertisment is used. + + + + + List of manually added IPv6 addresses. + + + + + DHCP configuration. + + + + + + + + + + Indicates whether or not IPv4 is enabled. + + + + + List of manually added IPv4 addresses. + + + + + Indicates whether or not DHCP is used. + + + + + + + + + + IPv4 address string. + + + + + IPv6 address string. + + + + + + + + + + Unique identifier of network interface. + + + + + Indicates whether the zero-configuration is enabled or not. + + + + + The zero-configuration IPv4 address(es) + + + + + + + + + + + + + Optional array holding the configuration for the second and possibly further interfaces. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + According to IEEE802.11-2007 H.4.1 the RSNA PSK consists of 256 bits, or 64 octets when represented in hex
+ Either Key or Passphrase shall be given, if both are supplied Key shall be used by the device and Passphrase ignored. +
+
+
+ + + + According to IEEE802.11-2007 H.4.1 a pass-phrase is a sequence of between 8 and 63 ASCII-encoded characters and + each character in the pass-phrase must have an encoding in the range of 32 to 126 (decimal),inclusive.
+ If only Passpharse is supplied the Key shall be derived using the algorithm described in IEEE802.11-2007 section H.4 +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + See IEEE802.11 7.3.2.25.2 for details. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Analytics capabilities + + + + + Device capabilities + + + + + Event capabilities + + + + + Imaging capabilities + + + + + Media capabilities + + + + + PTZ capabilities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Analytics service URI. + + + + + Indicates whether or not rules are supported. + + + + + Indicates whether or not modules are supported. + + + + + + + + + + + + Device service URI. + + + + + Network capabilities. + + + + + System capabilities. + + + + + I/O capabilities. + + + + + Security capabilities. + + + + + + + + + + + + + + + + + + Event service URI. + + + + + Indicates whether or not WS Subscription policy is supported. + + + + + Indicates whether or not WS Pull Point is supported. + + + + + Indicates whether or not WS Pausable Subscription Manager Interface is supported. + + + + + + + + + + + + Number of input connectors. + + + + + Number of relay outputs. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Media service URI. + + + + + Streaming capabilities. + + + + + + + + + + + + + + + + + + + + + Indicates whether or not RTP multicast is supported. + + + + + Indicates whether or not RTP over TCP is supported. + + + + + Indicates whether or not RTP/RTSP/TCP is supported. + + + + + + + + + + + + + + + + + + Maximum number of profiles. + + + + + + + + + + + + Indicates whether or not IP filtering is supported. + + + + + Indicates whether or not zeroconf is supported. + + + + + Indicates whether or not IPv6 is supported. + + + + + Indicates whether or not is supported. + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates whether or not TLS 1.1 is supported. + + + + + Indicates whether or not TLS 1.2 is supported. + + + + + Indicates whether or not onboard key generation is supported. + + + + + Indicates whether or not access policy configuration is supported. + + + + + Indicates whether or not WS-Security X.509 token is supported. + + + + + Indicates whether or not WS-Security SAML token is supported. + + + + + Indicates whether or not WS-Security Kerberos token is supported. + + + + + Indicates whether or not WS-Security REL token is supported. + + + + + + + + + + + + + + + + + + + + + EAP Methods supported by the device. The int values refer to the IANA EAP Registry. + + + + + + + + + + + + Indicates whether or not WS Discovery resolve requests are supported. + + + + + Indicates whether or not WS-Discovery Bye is supported. + + + + + Indicates whether or not remote discovery is supported. + + + + + Indicates whether or not system backup is supported. + + + + + Indicates whether or not system logging is supported. + + + + + Indicates whether or not firmware upgrade is supported. + + + + + Indicates supported ONVIF version(s). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Major version number. + + + + + Two digit minor version number (e.g. X.0.1 maps to "01" and X.2.1 maps to "21" where X stands for Major version number). + + + + + + + + + + Imaging service URI. + + + + + + + + + + + PTZ service URI. + + + + + + + + + + + + + + + + + + + + + + + + + + Indication that the SetLayout command supports only predefined layouts. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The address of the replay service. + + + + + + + + + + + + The address of the receiver service. + + + + + Indicates whether the device can receive RTP multicast streams. + + + + + Indicates whether the device can receive RTP/TCP streams + + + + + Indicates whether the device can receive RTP/RTSP/TCP streams. + + + + + The maximum number of receivers supported by the device. + + + + + The maximum allowed length for RTSP URIs. + + + + + + + + + + + + + Obsolete property. + + + + + + + + + + + + + + + + + + + + + + + Enumeration describing the available system log modes. + + + + + Indicates that a system log is requested. + + + + + Indicates that a access log is requested. + + + + + + + + + + The log information as attachment data. + + + + + The log information as character data. + + + + + + + + + + The support information as attachment data. + + + + + The support information as character data. + + + + + + + + + + base64 encoded binary data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Enumeration describing the available factory default modes. + + + + + Indicates that a hard factory default is requested. + + + + + Indicates that a soft factory default is requested. + + + + + + + + + + Indicates that the date and time are set manually. + + + + + Indicates that the date and time are set through NTP + + + + + + + + General date time inforamtion returned by the GetSystemDateTime method. + + + + + Indicates if the time is set manully or through NTP. + + + + + Informative indicator whether daylight savings is currently on/off. + + + + + Timezone information in Posix format. + + + + + Current system date and time in UTC format. This field is mandatory since version 2.0. + + + + + Date and time in local format. + + + + + + + + + + + + + + + + + + + + + + + + + + Range is 1 to 12. + + + + + Range is 1 to 31. + + + + + + + + + + Range is 0 to 23. + + + + + Range is 0 to 59. + + + + + Range is 0 to 61 (typically 59). + + + + + + + + + The TZ format is specified by POSIX, please refer to POSIX 1003.1 section 8.3
+ Example: Europe, Paris TZ=CET-1CEST,M3.5.0/2,M10.5.0/3
+ CET = designation for standard time when daylight saving is not in force
+ -1 = offset in hours = negative so 1 hour east of Greenwich meridian
+ CEST = designation when daylight saving is in force ("Central European Summer Time")
+ , = no offset number between code and comma, so default to one hour ahead for daylight saving
+ M3.5.0 = when daylight saving starts = the last Sunday in March (the "5th" week means the last in the month)
+ /2, = the local time when the switch occurs = 2 a.m. in this case
+ M10.5.0 = when daylight saving ends = the last Sunday in October.
+ /3, = the local time when the switch occurs = 3 a.m. in this case
+
+
+ + + + Posix timezone string. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Username string. + + + + + Password string. + + + + + User level string. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Certificate id. + + + + + base64 encoded DER representation of certificate. + + + + + + + + + + Certificate id. + + + + + Indicates whether or not a certificate is used in a HTTPS configuration. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Validity Range is from "NotBefore" to "NotAfter"; the corresponding DateTimeRange is from "From" to "Until" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EAP Method type as defined in IANA EAP Registry. + + + + + + + + + + + + + + + + + + + + + Confgiuration information for TLS Method. + + + + + Password for those EAP Methods that require a password. The password shall never be returned on a get method. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 'Bistable' or 'Monostable' +
    +
  • Bistable – After setting the state, the relay remains in this state.
  • +
  • Monostable – After setting the state, the relay returns to its idle state after the specified time.
  • +
+
+
+
+ + + Time after which the relay returns to its idle state if it is in monostable mode. If the Mode field is set to bistable mode the value of the parameter can be ignored. + + + + + + 'open' or 'closed' +
    +
  • 'open' means that the relay is open when the relay state is set to 'inactive' through the trigger command and closed when the state is set to 'active' through the same command.
  • +
  • 'closed' means that the relay is closed when the relay state is set to 'inactive' through the trigger command and open when the state is set to 'active' through the same command.
  • +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A unique identifier that is used to reference PTZ Nodes. + + + + + + + A list of Coordinate Systems available for the PTZ Node. For each Coordinate System, the PTZ Node MUST specify its allowed range. + + + + + + + All preset operations MUST be available for this PTZ Node if one preset is supported. + + + + + + + A boolean operator specifying the availability of a home position. If set to true, the Home Position Operations MUST be available for this PTZ Node. + + + + + + + A list of supported Auxiliary commands. If the list is not empty, the Auxiliary Operations MUST be available for this PTZ Node. + + + + + + + + + Indication whether the HomePosition of a Node is fixed or it can be changed via the SetHomePosition command. + + + + + + + + + + + + + + + Detail of supported Preset Tour feature. + + + + + + + + + + + + + + + + + + Indicates number of preset tours that can be created. Required preset tour operations shall be available for this PTZ Node if one or more preset tour is supported. + + + + + Indicates which preset tour operations are available for this PTZ Node. + + + + + + + + + + + + + + + + + + + + + A mandatory reference to the PTZ Node that the PTZ Configuration belongs to. + + + + + + + If the PTZ Node supports absolute Pan/Tilt movements, it shall specify one Absolute Pan/Tilt Position Space as default. + + + + + + + If the PTZ Node supports absolute zoom movements, it shall specify one Absolute Zoom Position Space as default. + + + + + + + If the PTZ Node supports relative Pan/Tilt movements, it shall specify one RelativePan/Tilt Translation Space as default. + + + + + + + If the PTZ Node supports relative zoom movements, it shall specify one Relative Zoom Translation Space as default. + + + + + + + If the PTZ Node supports continuous Pan/Tilt movements, it shall specify one Continuous Pan/Tilt Velocity Space as default. + + + + + + + If the PTZ Node supports continuous zoom movements, it shall specify one Continuous Zoom Velocity Space as default. + + + + + + + If the PTZ Node supports absolute or relative PTZ movements, it shall specify corresponding default Pan/Tilt and Zoom speeds. + + + + + + + If the PTZ Node supports continuous movements, it shall specify a default timeout, after which the movement stops. + + + + + + + The Pan/Tilt limits element should be present for a PTZ Node that supports an absolute Pan/Tilt. If the element is present it signals the support for configurable Pan/Tilt limits. If limits are enabled, the Pan/Tilt movements shall always stay within the specified range. The Pan/Tilt limits are disabled by setting the limits to –INF or +INF. + + + + + + + The Zoom limits element should be present for a PTZ Node that supports absolute zoom. If the element is present it signals the supports for configurable Zoom limits. If limits are enabled the zoom movements shall always stay within the specified range. The Zoom limits are disabled by settings the limits to -INF and +INF. + + + + + + + + + + + + + + + + + + + + + Optional element to configure PT Control Direction related features. + + + + + + + + + + + + + + + + + Optional element to configure related parameters for E-Flip. + + + + + Optional element to configure related parameters for reversing of PT Control Direction. + + + + + + + + + + + + + + + + + + + Parameter to enable/disable E-Flip feature. + + + + + + + + + + + + Parameter to enable/disable Reverse feature. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list of supported coordinate systems including their range limitations. + + + + + + + A timeout Range within which Timeouts are accepted by the PTZ Node. + + + + + + + Supported options for PT Direction Control. + + + + + + + + + + + + + + + + + + Supported options for EFlip feature. + + + + + Supported options for Reverse feature. + + + + + + + + + + + + + + + + + + Options of EFlip mode parameter. + + + + + + + + + + + + + + + + + + Options of Reverse mode parameter. + + + + + + + + + + + + + + + + + + + A range of pan tilt limits. + + + + + + + + + + + + A range of zoom limit + + + + + + + + + + + + The Generic Pan/Tilt Position space is provided by every PTZ node that supports absolute Pan/Tilt, since it does not relate to a specific physical range. + Instead, the range should be defined as the full range of the PTZ unit normalized to the range -1 to 1 resulting in the following space description. + + + + + + + The Generic Zoom Position Space is provided by every PTZ node that supports absolute Zoom, since it does not relate to a specific physical range. + Instead, the range should be defined as the full range of the Zoom normalized to the range 0 (wide) to 1 (tele). + There is no assumption about how the generic zoom range is mapped to magnification, FOV or other physical zoom dimension. + + + + + + + The Generic Pan/Tilt translation space is provided by every PTZ node that supports relative Pan/Tilt, since it does not relate to a specific physical range. + Instead, the range should be defined as the full positive and negative translation range of the PTZ unit normalized to the range -1 to 1, + where positive translation would mean clockwise rotation or movement in right/up direction resulting in the following space description. + + + + + + + The Generic Zoom Translation Space is provided by every PTZ node that supports relative Zoom, since it does not relate to a specific physical range. + Instead, the corresponding absolute range should be defined as the full positive and negative translation range of the Zoom normalized to the range -1 to1, + where a positive translation maps to a movement in TELE direction. The translation is signed to indicate direction (negative is to wide, positive is to tele). + There is no assumption about how the generic zoom range is mapped to magnification, FOV or other physical zoom dimension. This results in the following space description. + + + + + + + The generic Pan/Tilt velocity space shall be provided by every PTZ node, since it does not relate to a specific physical range. + Instead, the range should be defined as a range of the PTZ unit’s speed normalized to the range -1 to 1, where a positive velocity would map to clockwise + rotation or movement in the right/up direction. A signed speed can be independently specified for the pan and tilt component resulting in the following space description. + + + + + + + The generic zoom velocity space specifies a zoom factor velocity without knowing the underlying physical model. The range should be normalized from -1 to 1, + where a positive velocity would map to TELE direction. A generic zoom velocity space description resembles the following. + + + + + + + The speed space specifies the speed for a Pan/Tilt movement when moving to an absolute position or to a relative translation. + In contrast to the velocity spaces, speed spaces do not contain any directional information. The speed of a combined Pan/Tilt + movement is represented by a single non-negative scalar value. + + + + + + + The speed space specifies the speed for a Zoom movement when moving to an absolute position or to a relative translation. + In contrast to the velocity spaces, speed spaces do not contain any directional information. + + + + + + + + + + + + + + + + + + + + A URI of coordinate systems. + + + + + + + A range of x-axis. + + + + + + + A range of y-axis. + + + + + + + + + + + + A URI of coordinate systems. + + + + + + + A range of x-axis. + + + + + + + + + + + + + Pan/tilt coordinate space selector. The following options are defined:
    +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace
  • +
+
+
+
+
+ + + + + + + Pan/tilt coordinate space selector. The following options are defined:
    +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/PositionGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/TranslationGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace
  • +
  • http://www.onvif.org/ver10/tptz/PanTiltSpaces/GenericSpeedSpace
  • +
+
+
+
+
+ + + + + + Pan and tilt position. The x component corresponds to pan and the y component to tilt. + + + + + + A zoom position. + + + + + + + + + + + Pan and tilt speed. The x component corresponds to pan and the y component to tilt. If omitted in a request, the current (if any) PanTilt movement should not be affected. + + + + + + A zoom speed. If omitted in a request, the current (if any) Zoom movement should not be affected. + + + + + + + + + + + + Specifies the absolute position of the PTZ unit together with the Space references. The default absolute spaces of the corresponding PTZ configuration MUST be referenced within the Position element. + + + + + + + Indicates if the Pan/Tilt/Zoom device unit is currently moving, idle or in an unknown state. + + + + + + + States a current PTZ error. + + + + + + + Specifies the UTC time when this status was generated. + + + + + + + + + + + + + + A list of preset position name. + + + + + + + A list of preset position. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Readable name of the preset tour. + + + + + Read only parameters to indicate the status of the preset tour. + + + + + Auto Start flag of the preset tour. True allows the preset tour to be activated always. + + + + + Parameters to specify the detail behavior of the preset tour. + + + + + A list of detail of touring spots including preset positions. + + + + + + + Unique identifier of this preset tour. + + + + + + + + + + + + + + + + Detail definition of preset position of the tour spot. + + + + + Optional parameter to specify Pan/Tilt and Zoom speed on moving toward this tour spot. + + + + + Optional parameter to specify time duration of staying on this tour sport. + + + + + + + + + + + + + + + + + + + Option to specify the preset position with Preset Token defined in advance. + + + + + Option to specify the preset position with the home position of this PTZ Node. "False" to this parameter shall be treated as an invalid argument. + + + + + Option to specify the preset position with vector of PTZ node directly. + + + + + + + + + + + + + + + + + + + + Indicates state of this preset tour by Idle/Touring/Paused. + + + + + Indicates a tour spot currently staying. + + + + + + + + + + + + + + + + + + Optional parameter to specify how many times the preset tour is recurred. + + + + + Optional parameter to specify how long time duration the preset tour is recurred. + + + + + Optional parameter to choose which direction the preset tour goes. Forward shall be chosen in case it is omitted. + + + + + + + + + + + + + + + + + + Indicates whether or not the AutoStart is supported. + + + + + Supported options for Preset Tour Starting Condition. + + + + + Supported options for Preset Tour Spot. + + + + + + + + + + + + Supported options for detail definition of preset position of the tour spot. + + + + + Supported range of stay time for a tour spot. + + + + + + + + + + + + A list of available Preset Tokens for tour spots. + + + + + An option to indicate Home postion for tour spots. + + + + + Supported range of Pan and Tilt for tour spots. + + + + + Supported range of Zoom for a tour spot. + + + + + + + + + + + + + + + + + + Supported range of Recurring Time. + + + + + Supported range of Recurring Duration. + + + + + Supported options for Direction of Preset Tour. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Status of focus position. + + + + + + + Status of focus MoveStatus. + + + + + + + Error status of focus. + + + + + + + + + + + + + + + Parameter to set autofocus near limit (unit: meter). + + + + + Parameter to set autofocus far limit (unit: meter). +If set to 0.0, infinity will be used. + + + + + + + + + + + + + + + + + + + Enabled/disabled BLC mode (on/off). + + + + + Image brightness (unit unspecified). + + + + + Color saturation of the image (unit unspecified). + + + + + Contrast of the image (unit unspecified). + + + + + Exposure mode of the device. + + + + + Focus configuration. + + + + + Infrared Cutoff Filter settings. + + + + + Sharpness of the Video image. + + + + + WDR settings. + + + + + White balance settings. + + + + + + + + + + + + + + + + + + + Exposure Mode +
    +
  • Auto – Enabled the exposure algorithm on the NVT.
  • +
  • Manual – Disabled exposure algorithm on the NVT.
  • +
+
+
+
+ + + + The exposure priority mode (low noise/framerate). + + + + + + + Rectangular exposure mask. + + + + + + + Minimum value of exposure time range allowed to be used by the algorithm. + + + + + + + Maximum value of exposure time range allowed to be used by the algorithm. + + + + + + + Minimum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Maximum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Minimum value of the iris range allowed to be used by the algorithm. + + + + + + + Maximum value of the iris range allowed to be used by the algorithm. + + + + + + + The fixed exposure time used by the image sensor (μs). + + + + + + + The fixed gain used by the image sensor (dB). + + + + + + + The fixed attenuation of input light affected by the iris (dB). 0dB maps to a fully opened iris. + + + +
+
+ + + + + + + + + + + + + + White dynamic range (on/off) + + + + + + + Optional level parameter (unitless) + + + + + + + + + Enumeration describing the available backlight compenstation modes. + + + + + Backlight compensation is disabled. + + + + + Backlight compensation is enabled. + + + + + + + + + + Backlight compensation mode (on/off). + + + + + Optional level parameter (unit unspecified). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters for the absolute focus control. + + + + + + + Parameters for the relative focus control. + + + + + + + Parameter for the continuous focus control. + + + + + + + + + + + + Position parameter for the absolute focus control. + + + + + + + Speed parameter for the absolute focus control. + + + + + + + + + + + + Distance parameter for the relative focus control. + + + + + + + Speed parameter for the relative focus control. + + + + + + + + + + + + Speed parameter for the Continuous focus control. + + + + + + + + + + + + + + + + + + + + Valid ranges of the position. + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + Valid ranges of the distance. + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Auto whitebalancing mode (auto/manual). + + + + + Rgain (unitless). + + + + + Bgain (unitless). + + + + + + + + + + + + + + + + + + Status of focus. + + + + + + + + + + + + + + + + + + + + Status of focus position. + + + + + + + Status of focus MoveStatus. + + + + + + + Error status of focus. + + + + + + + + + + + + + + + + + Type describing the ImagingSettings of a VideoSource. The supported options and ranges can be obtained via the GetOptions command. + + + + + Enabled/disabled BLC mode (on/off). + + + + + Image brightness (unit unspecified). + + + + + Color saturation of the image (unit unspecified). + + + + + Contrast of the image (unit unspecified). + + + + + Exposure mode of the device. + + + + + Focus configuration. + + + + + Infrared Cutoff Filter settings. + + + + + Sharpness of the Video image. + + + + + WDR settings. + + + + + White balance settings. + + + + + + + + + + + + + Optional element to configure Image Stabilization feature. + + + + + + + + + + + An optional parameter applied to only auto mode to adjust timing of toggling Ir cut filter. + + + + + + + + + + + + + + + + + Parameter to enable/disable Image Stabilization feature. + + + + + Optional level parameter (unit unspecified) + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies which boundaries to automatically toggle Ir cut filter following parameters are applied to. Its options shall be chosen from tt:IrCutFilterAutoBoundaryType. + + + + + Adjusts boundary exposure level for toggling Ir cut filter to on/off specified with unitless normalized value from +1.0 to -1.0. Zero is default and -1.0 is the darkest adjustment (Unitless). + + + + + Delay time of toggling Ir cut filter to on/off after crossing of the boundary exposure levels. + + + + + + + + + + + + + + + + + + + + + + + + + Type describing whether WDR mode is enabled or disabled (on/off). + + + + + Wide dynamic range mode (on/off). + + + + + Optional level parameter (unit unspecified). + + + + + + + + Type describing whether BLC mode is enabled or disabled (on/off). + + + + + Backlight compensation mode (on/off). + + + + + Optional level parameter (unit unspecified). + + + + + + + + Type describing the exposure settings. + + + + + + Exposure Mode +
    +
  • Auto – Enabled the exposure algorithm on the device.
  • +
  • Manual – Disabled exposure algorithm on the device.
  • +
+
+
+
+ + + + The exposure priority mode (low noise/framerate). + + + + + + + Rectangular exposure mask. + + + + + + + Minimum value of exposure time range allowed to be used by the algorithm. + + + + + + + Maximum value of exposure time range allowed to be used by the algorithm. + + + + + + + Minimum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Maximum value of the sensor gain range that is allowed to be used by the algorithm. + + + + + + + Minimum value of the iris range allowed to be used by the algorithm. + + + + + + + Maximum value of the iris range allowed to be used by the algorithm. + + + + + + + The fixed exposure time used by the image sensor (μs). + + + + + + + The fixed gain used by the image sensor (dB). + + + + + + + The fixed attenuation of input light affected by the iris (dB). 0dB maps to a fully opened iris. + + + +
+
+ + + + + + + Valid range of Backlight Compensation. + + + + + + + Valid range of Brightness. + + + + + + + Valid range of Color Saturation. + + + + + + + Valid range of Contrast. + + + + + + + Valid range of Exposure. + + + + + + + Valid range of Focus. + + + + + + + Valid range of IrCutFilterModes. + + + + + + + Valid range of Sharpness. + + + + + + + Valid range of WideDynamicRange. + + + + + + + Valid range of WhiteBalance. + + + + + + + + + + + + + + Options of parameters for Image Stabilization feature. + + + + + + + + + + + Options of parameters for adjustment of Ir cut filter auto mode. + + + + + + + + + + + + + + + + + Supported options of Image Stabilization mode parameter. + + + + + Valid range of the Image Stabilization. + + + + + + + + + + + + + + + + + + Supported options of boundary types for adjustment of Ir cut filter auto mode. The opptions shall be chosen from tt:IrCutFilterAutoBoundaryType. + + + + + Indicates whether or not boundary offset for toggling Ir cut filter is supported. + + + + + Supported range of delay time for toggling Ir cut filter. + + + + + + + + + + + + + + + + + + + + + + + + + + 'ON' or 'OFF' + + + + + + + Level range of BacklightCompensation. + + + + + + + + + + + + Exposure Mode +
    +
  • Auto – Enabled the exposure algorithm on the device.
  • +
  • Manual – Disabled exposure algorithm on the device.
  • +
+
+
+
+ + + + The exposure priority mode (low noise/framerate). + + + + + + + Valid range of the Minimum ExposureTime. + + + + + + + Valid range of the Maximum ExposureTime. + + + + + + + Valid range of the Minimum Gain. + + + + + + + Valid range of the Maximum Gain. + + + + + + + Valid range of the Minimum Iris. + + + + + + + Valid range of the Maximum Iris. + + + + + + + Valid range of the ExposureTime. + + + + + + + Valid range of the Gain. + + + + + + + Valid range of the Iris. + + + +
+
+ + + + + + + Valid ranges for the absolute control. + + + + + + + Valid ranges for the relative control. + + + + + + + Valid ranges for the continuous control. + + + + + + + + + + + + Valid ranges of the distance. + + + + + + + Valid ranges of the speed. + + + + + + + + + + + + 'AUTO' or 'MANUAL' + + + + + + + Rgain (unitless). + + + + + + + Bgain (unitless). + + + + + + + + + + + + + + + + + + + + Mode of auto fucus. +
    +
  • AUTO
  • +
  • MANUAL
  • +
+
+
+
+ + + + Parameter to set autofocus near limit (unit: meter). + + + + + Parameter to set autofocus far limit (unit: meter). + + + +
+ +
+ + + + + + + + + + + + + Mode of WhiteBalance. +
    +
  • AUTO
  • +
  • MANUAL
  • +
+
+
+
+ + + +
+
+ + + + + + + + + + + + + Mode of Auto Focus. +
    +
  • AUTO
  • +
  • MANUAL
  • +
+
+
+
+ + + + Valid range of DefaultSpeed. + + + + + + + Valid range of NearLimit. + + + + + + + Valid range of FarLimit. + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Token value pairs that triggered this message. Typically only one item is present. + + + + + + + + + + + + + + + + + + + + + + List of parameters according to the corresponding ItemListDescription. + Each item in the list shall have a unique name. + + + + + + Value name pair as defined by the corresponding description. + + + + + Item name. + + + + + Item value. The type is defined in the corresponding description. + + + + + + + Complex value structure. + + + + + + XML tree contiaing the element value as defined in the corresponding description. + + + + + + Item name. + + + + + + + + + + + + + + + + + + + + + + Set of tokens producing this message. The list may only contain SimpleItemDescription items. + The set of tokens identify the component within the WS-Endpoint, which is responsible for the producing the message.
+ For analytics events the token set shall include the VideoSourceConfigurationToken, the VideoAnalyticsConfigurationToken + and the name of the analytics module or rule. +
+
+
+ + + Describes optional message payload parameters that may be used as key. E.g. object IDs of tracked objects are conveyed as key. + + + + + Describes the payload of the message. + + + +
+ + + Must be set to true when the described Message relates to a property. An alternative term of "property" is a "state" in contrast to a pure event, which contains relevant information for only a single point in time.
Default is false.
+
+
+ +
+ + + + + + + + + + + Describes a list of items. Each item in the list shall have a unique name. + The list is designed as linear structure without optional or unbounded elements. + Use ElementItems only when complex structures are inevitable. + + + + + + Description of a simple item. The type must be of cathegory simpleType (xs:string, xs:integer, xs:float, ...). + + + + + Item name. Must be unique within a list. + + + + + + + + + Description of a complex type. The Type must reference a defined type. + + + + + + Item name. Must be unique within a list. + + + + + The type of the item. The Type must reference a defined type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Object Class Type + + + + + A likelihood/probability that the corresponding object belongs to this class. The sum of the likelihoods shall NOT exceed 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Number of columns of the cell grid (x dimension) + + + + + Number of rows of the cell grid (y dimension) + + + + + A “1” denotes a cell where motion is detected and a “0” an empty cell. The first cell is in the upper left corner. Then the cell order goes first from left to right and then from up to down. If the number of cells is not a multiple of 8 the last byte is filled with zeros. The information is run length encoded according to Packbit coding in ISO 12369 (TIFF, Revision 6.0). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + List of configuration parameters as defined in the correspding description. + + + + + + Name of the configuration. + + + + + Type of the configuration represented by a unique QName. The Type characterizes a ConfigDescription defining the Parameters. + + + + + + + + + + List describing the configuration parameters. The names of the parameters must be unique. If possible SimpleItems + should be used to transport the information to ease parsing of dynamically defined messages by a client + application. + + + + + + + The analytics modules and rule engine produce Events, which must be listed within the Analytics Module Description. In order to do so + the structure of the Message is defined and consists of three groups: Source, Key, and Data. It is recommended to use SimpleItemDescriptions wherever applicable. + The name of all Items must be unique within all Items contained in any group of this Message. + Depending on the component multiple parameters or none may be needed to identify the component uniquely. + + + + + + + + + + The ParentTopic labels the message (e.g. "nn:RuleEngine/LineCrossing"). The real message can extend the ParentTopic + by for example the name of the instaniated rule (e.g. "nn:RuleEngine/LineCrossing/corssMyFirstLine"). + Even without knowing the complete topic name, the subscriber will be able to distiguish the + messages produced by different rule instances of the same type via the Source fields of the message. + There the name of the rule instance, which produced the message, must be listed. + + + + + + + + + + + + + XML Type of the Configuration (e.g. "tt::LineDetector"). + + + + + + + + + + + + + + + + Lists the location of all schemas that are referenced in the rules. + + + + + List of rules supported by the Video Analytics configuration.. + + + + + + + + + + + + + + + + + + It optionally contains a list of URLs that provide the location of schema files. + These schema files describe the types and elements used in the analytics module descriptions. + If the analytics module descriptions reference types or elements of the ONVIF schema file, + the ONVIF schema file MUST be explicitly listed. + + + + + + + + + + + + + + + + + + + Contains Polygon configuration for rule parameters + + + + + + + + + + + + Contains array of Polyline + + + + + + + + + + + + + + + + + + Contains PolylineArray configuration data + + + + + + + + + + + + Motion Expression data structure contains motion expression which is based on Scene Descriptor schema with XPATH syntax. The Type argument could allow introduction of different dialects + + + + + + + + + + + + + Contains Rule MotionExpression configuration + + + + + + + + + + + + Mapping of the cell grid to the Video frame. The cell grid is starting from the upper left corner and x dimension is going from left to right and the y dimension from up to down. + + + + + + + Number of columns of the cell grid (x dimension) + + + + + Number of rows of the cell grid (y dimension) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Configuration of the streaming and coding settings of a Video window. + + + + + Optional name of the pane configuration. + + + + + If the device has audio outputs, this element contains a pointer to the audio output that is associated with the pane. A client +can retrieve the available audio outputs of a device using the GetAudioOutputs command of the DeviceIO service. + + + + + If the device has audio sources, this element contains a pointer to the audio source that is associated with this pane. +The audio connection from a decoder device to the NVT is established using the backchannel mechanism. A client can retrieve the available audio sources of a device using the GetAudioSources command of the +DeviceIO service. + + + + + The configuration of the audio encoder including codec, bitrate +and sample rate. + + + + + A pointer to a Receiver that has the necessary information to receive + data from a Transmitter. This Receiver can be connected and the network video decoder displays the received data on the specified outputs. A client can retrieve the available Receivers using the + GetReceivers command of the Receiver Service. + + + + + A unique identifier in the display device. + + + + + + + + + + A pane layout describes one Video window of a display. It links a pane configuration to a region of the screen. + + + + + Reference to the configuration of the streaming and coding parameters. + + + + + Describes the location and size of the area on the monitor. The area coordinate values are espressed in normalized units [-1.0, 1.0]. + + + + + + + + + + A layout describes a set of Video windows that are displayed simultaniously on a display. + + + + + List of panes assembling the display layout. + + + + + + + + + + + + + + + + This type contains the Audio and Video coding capabilities of a display service. + + + + + If the device supports audio encoding this section describes the supported codecs and their configuration. + + + + + If the device supports audio decoding this section describes the supported codecs and their settings. + + + + + This section describes the supported video codesc and their configuration. + + + + + + + + + + The options supported for a display layout. + + + + + Lists the possible Pane Layouts of the Video Output + + + + + + + + + + + + + + + + Description of a pane layout describing a complete display layout. + + + + + List of areas assembling a layout. Coordinate values are in the range [-1.0, 1.0]. + + + + + + + + + + + + + + + + + + + + + + Description of a receiver, including its token and configuration. + + + + + + Unique identifier of the receiver. + + + + + Describes the configuration of the receiver. + + + + + + + + + + + Describes the configuration of a receiver. + + + + + + The following connection modes are defined: + + + + + Details of the URI to which the receiver should connect. + + + + + Stream connection parameters. + + + + + + + + + + + Specifies a receiver connection mode. + + + + + + The receiver connects on demand, as required by consumers of the media streams. + + + + + The receiver attempts to maintain a persistent connection to the configured endpoint. + + + + + The receiver does not attempt to connect. + + + + + This case should never happen. + + + + + + + + + Specifies the current connection state of the receiver. + + + + + + The receiver is not connected. + + + + + The receiver is attempting to connect. + + + + + The receiver is connected. + + + + + This case should never happen. + + + + + + + + + Contains information about a receiver's current state. + + + + + + The connection state of the receiver may have one of the following states: + + + + + Indicates whether or not the receiver was created automatically. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The earliest point in time where there is recorded data on the device. + + + + + The most recent point in time where there is recorded data on the device. + + + + + The device contains this many recordings. + + + + + + + + + + A structure for defining a limited scope when searching in recorded data. + + + + + A list of sources that are included in the scope. If this list is included, only data from one of these sources shall be searched. + + + + + A list of recordings that are included in the scope. If this list is included, only data from one of these recordings shall be searched. + + + + + An xpath expression used to specify what recordings to search. Only those recordings with an RecordingInformation structure that matches the filter shall be searched. + + + + + Extension point + + + + + + + + + + + + + + + + + + + + + + + + + The lower boundary of the PTZ volume to look for. + + + + + The upper boundary of the PTZ volume to look for. + + + + + If true, search for when entering the specified PTZ volume. + + + + + + + + + + + + + + + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A RecordingInformation structure for each found recording matching the search. + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A FindEventResult structure for each found event matching the search. + + + + + + + + + + The recording where this event was found. Empty string if no recording is associated with this event. + + + + + A reference to the track where this event was found. Empty string if no track is associated with this event. + + + + + The time when the event occured. + + + + + The description of the event. + + + + + If true, indicates that the event is a virtual event generated for this particular search session to give the state of a property at the start time of the search. + + + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A FindPTZPositionResult structure for each found PTZ position matching the search. + + + + + + + + + + A reference to the recording containing the PTZ position. + + + + + A reference to the metadata track containing the PTZ position. + + + + + The time when the PTZ position was valid. + + + + + The PTZ position. + + + + + + + + + + + + The state of the search when the result is returned. Indicates if there can be more results, or if the search is completed. + + + + + A FindMetadataResult structure for each found set of Metadata matching the search. + + + + + + + + + + A reference to the recording containing the metadata. + + + + + A reference to the metadata track containing the matching metadata. + + + + + The point in time when the matching metadata occurs in the metadata track. + + + + + + + + + + + + The search is queued and not yet started. + + + + + The search is underway and not yet completed. + + + + + The search has been completed and no new results will be found. + + + + + The state of the search is unknown. (This is not a valid response from GetSearchState.) + + + + + + + + + + + + + + + + Information about the source of the recording. This gives a description of where the data in the recording comes from. Since a single + recording is intended to record related material, there is just one source. It is indicates the physical location or the + major data source for the recording. Currently the recordingconfiguration cannot describe each individual data source. + + + + + + + + + Basic information about the track. Note that a track may represent a single contiguous time span or consist of multiple slices. + + + + + + + + + + + + A set of informative desciptions of a data source. The Search searvice allows a client to filter on recordings based on information in this structure. + + + + + + + Identifier for the source chosen by the client that creates the structure. + This identifier is opaque to the device. Clients may use any type of URI for this field. A device shall support at least 128 characters. + + + + + Informative user readable name of the source, e.g. "Camera23". A device shall support at least 20 characters. + + + + + Informative description of the physical location of the source, e.g. the coordinates on a map. + + + + + Informative description of the source. + + + + + URI provided by the service supplying data to be recorded. A device shall support at least 128 characters. + + + + + + + + + + + + + + + + + This case should never happen. + + + + + + + + + + + Type of the track: "Video", "Audio" or "Metadata". + The track shall only be able to hold data of that type. + + + + + Informative description of the contents of the track. + + + + + The start date and time of the oldest recorded data in the track. + + + + + The stop date and time of the newest recorded data in the track. + + + + + + + + + + + + + + + Placeholder for future extension. + + + + + + + + A set of media attributes valid for a recording at a point in time or for a time interval. + + + + + A reference to the recording that has these attributes. + + + + + A set of attributes for each track. + + + + + The attributes are valid from this point in time in the recording. + + + + + The attributes are valid until this point in time in the recording. Can be equal to 'From' to indicate that the attributes are only known to be valid for this particular point in time. + + + + + + + + + + + + The basic information about the track. Note that a track may represent a single contiguous time span or consist of multiple slices. + + + + + If the track is a video track, exactly one of this structure shall be present and contain the video attributes. + + + + + If the track is an audio track, exactly one of this structure shall be present and contain the audio attributes. + + + + + If the track is an metadata track, exactly one of this structure shall be present and contain the metadata attributes. + + + + + + + + + + + + + + + + + + + + + + Average bitrate in kbps. + + + + + The width of the video in pixels. + + + + + The height of the video in pixels. + + + + + Used video codec, either Jpeg, H.264 or Mpeg4 + + + + + Average framerate in frames per second. + + + + + + + + + + + + The bitrate in kbps. + + + + + Audio codec used for encoding the audio (either G.711, G.726 or AAC) + + + + + The sample rate in kHz. + + + + + + + + + + + + Indicates that there can be PTZ data in the metadata track in the specified time interval. + + + + + Indicates that there can be analytics data in the metadata track in the specified time interval. + + + + + Indicates that there can be notifications in the metadata track in the specified time interval. + + + + + + + List of all PTZ spaces active for recording. Note that events are only recorded on position changes and the actual point of recording may not necessarily contain an event of the specified type. + + + + + + + + + + + + + + + + + Information about the source of the recording. + + + + + Informative description of the source. + + + + + Sspecifies the maximum time that data in any track within the + recording shall be stored. The device shall delete any data older than the maximum retention + time. Such data shall not be accessible anymore. If the MaximumRetentionPeriod is set to 0, + the device shall not limit the retention time of stored data, except by resource constraints. + Whatever the value of MaximumRetentionTime, the device may automatically delete + recordings to free up storage space for new recordings. + + + + + + + + + + + + Type of the track. It shall be equal to the strings “Video”, + “Audio” or “Metadata”. The track shall only be able to hold data of that type. + + + + + Informative description of the track. + + + + + + + + + + + + Token of the recording. + + + + + Configuration of the recording. + + + + + List of tracks. + + + + + + + + + + + + Configuration of a track. + + + + + + + + + + + Token of the track. + + + + + Configuration of the track. + + + + + + + + + + + + Identifies the recording to which this job shall store the received data. + + + + + The mode of the job. If it is idle, nothing shall happen. If it is active, the device shall try + to obtain data from the receivers. A client shall use GetRecordingJobState to determine if data transfer is really taking place.
+ The only valid values for Mode shall be “Idle” and “Active”.
+
+
+ + + This shall be a non-negative number. If there are multiple recording jobs that store data to + the same track, the device will only store the data for the recording job with the highest + priority. The priority is specified per recording job, but the device shall determine the priority + of each track individually. If there are two recording jobs with the same priority, the device + shall record the data corresponding to the recording job that was activated the latest. + + + + + Source of the recording. + + + +
+ +
+ + + + + + + + + + + + + + + + This field shall be a reference to the source of the data. The type of the source + is determined by the attribute Type in the SourceToken structure. If Type is + http://www.onvif.org/ver10/schema/Receiver, the token is a ReceiverReference. In this case + the device shall receive the data over the network. If Type is + http://www.onvif.org/ver10/schema/Profile, the token identifies a media profile, instructing the + device to obtain data from a profile that exists on the local device. + + + + + If this field is TRUE, and if the SourceToken is omitted, the device + shall create a receiver object (through the receiver service) and assign the + ReceiverReference to the SourceToken field. When retrieving the RecordingJobConfiguration + from the device, the AutoCreateReceiver field shall never be present. + + + + + List of tracks associated with the recording. + + + + + + + + + + + + + + + + + + If the received RTSP stream contains multiple tracks of the same type, the + SourceTag differentiates between those Tracks. This field can be ignored in case of recording a local source. + + + + + The destination is the tracktoken of the track to which the device shall store the + received data. + + + + + + + + + + + + Identification of the recording that the recording job records to. + + + + + Holds the aggregated state over the whole RecordingJobInformation structure. + + + + + Identifies the data source of the recording job. + + + + + + + + + + + + + + + + + + + + + + Identifies the data source of the recording job. + + + + + Holds the aggregated state over all substructures of RecordingJobStateSource. + + + + + List of track items. + + + + + + + + + + + + + + + + + + + Identifies the track of the data source that provides the data. + + + + + Indicates the destination track. + + + + + Optionally holds an implementation defined string value that describes the error. + The string should be in the English language. + + + + + Provides the job state of the track. The valid + values of state shall be “Idle”, “Active” and “Error”. If state equals “Error”, the Error field may be filled in with an implementation defined value. + + + + + + + + + + + + + + + + + + + + + + + + + + Configuration parameters for the replay service. + + + + + + The RTSP session timeout. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Token of the analytics engine (AnalyticsEngine) being controlled. + + + + + Token of the analytics engine configuration (VideoAnalyticsConfiguration) in effect. + + + + + Tokens of the input (AnalyticsEngineInput) configuration applied. + + + + + Tokens of the receiver providing media input data. The order of ReceiverToken shall exactly match the order of InputToken. + + + + + + + + + + + + + + + + + + + This case should never happen. + + + + + + + + + + Token of the control object whose status is requested. + + + + + + + + + + + + + + + + + + + + + + + + + + Action Engine Event Payload data structure contains the information about the ONVIF command invocations. Since this event could be generated by other or proprietary actions, the command invocation specific fields are defined as optional and additional extension mechanism is provided for future or additional action definitions. + + + + + Request Message + + + + + Response Message + + + + + Fault Message + + + + + + + + + + + + + + + + + + + + + + + AudioClassType acceptable values are; + gun_shot, scream, glass_breaking, tire_screech + + + + + + + + + + Indicates audio class label + + + + + A likelihood/probability that the corresponding audio event belongs to this class. The sum of the likelihoods shall NOT exceed 1 + + + + + + + + + + + + Array of audio class label and class probability + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + For OSD position type, following are the pre-defined:
  • UpperLeft
  • +
  • UpperRight
  • +
  • LowerLeft
  • +
  • LowerRight
  • +
  • Custom
+
+
+
+ + +
+ +
+ + + + + + + + + + + The value range of "Transparent" could be defined by vendors only should follow this rule: the minimum value means non-transparent and the maximum value maens fully transparent. + + + + + + + + + + + + + + The following OSD Text Type are defined:
    +
  • Plain - The Plain type means the OSD is shown as a text string which defined in the "PlainText" item.
  • +
  • Date - The Date type means the OSD is shown as a date, format of which should be present in the "DateFormat" item.
  • +
  • Time - The Time type means the OSD is shown as a time, format of which should be present in the "TimeFormat" item.
  • +
  • DateAndTime - The DateAndTime type means the OSD is shown as date and time, format of which should be present in the "DateFormat" and the "TimeFormat" item.
  • +
+
+
+
+ + + + List of supported OSD date formats. This element shall be present when the value of Type field has Date or DateAndTime. The following DateFormat are defined:
    +
  • M/d/yyyy - e.g. 3/6/2013
  • +
  • MM/dd/yyyy - e.g. 03/06/2013
  • +
  • dd/MM/yyyy - e.g. 06/03/2013
  • +
  • yyyy/MM/dd - e.g. 2013/03/06
  • +
  • yyyy-MM-dd - e.g. 2013-06-03
  • +
  • dddd, MMMM dd, yyyy - e.g. Wednesday, March 06, 2013
  • +
  • MMMM dd, yyyy - e.g. March 06, 2013
  • +
  • dd MMMM, yyyy - e.g. 06 March, 2013
  • +
+
+
+
+ + + + List of supported OSD time formats. This element shall be present when the value of Type field has Time or DateAndTime. The following TimeFormat are defined:
    +
  • h:mm:ss tt - e.g. 2:14:21 PM
  • +
  • hh:mm:ss tt - e.g. 02:14:21 PM
  • +
  • H:mm:ss - e.g. 14:14:21
  • +
  • HH:mm:ss - e.g. 14:14:21
  • +
+
+
+
+ + + Font size of the text in pt. + + + + + Font color of the text. + + + + + Background color of the text. + + + + + The content of text to be displayed. + + + +
+ +
+ + + + + + + + + + + + + The URI of the image which to be displayed. + + + + + + + + + + + + + + + + + + + + + + + + + + + Describe the option of the color supported. Either list each color or define the range of color value. The following values are acceptable for Colourspace attribute.
  • http://www.onvif.org/ver10/colorspace/YCbCr - YCbCr colourspace
  • +
  • http://www.onvif.org/ver10/colorspace/CIELUV - CIE LUV
  • +
  • http://www.onvif.org/ver10/colorspace/CIELAB - CIE 1976 (L*a*b*)
  • +
  • http://www.onvif.org/ver10/colorspace/HSV - HSV colourspace
+
+
+ + + + + List the supported color. + + + + + Define the rang of color supported. + + + + + +
+ + + + Describe the option of the color and its transparency. + + + + + Optional list of supported colors. + + + + + Range of the transparent level. Larger means more tranparent. + + + + + + + + + + + + + + + + + + + List of supported OSD text type. When a device indicates the supported number relating to Text type in MaximumNumberOfOSDs, the type shall be presented. + + + + + Range of the font size value. + + + + + List of supported date format. + + + + + List of supported time format. + + + + + List of supported font color. + + + + + List of supported background color. + + + + + + + + + + + + + + + + + + + List of avaiable uris of image. + + + + + + + + + + + + + + + + + + + + + Reference to the video source configuration. + + + + + Type of OSD. + + + + + Position configuration of OSD. + + + + + Text configuration of OSD. It shall be present when the value of Type field is Text. + + + + + Image configuration of OSD. It shall be present when the value of Type field is Image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The maximum number of OSD configurations supported for the specificate video source configuration. If a device limits the number of instances by OSDType, it should indicate the supported number via the related attribute. + + + + + List supported type of OSD configuration. When a device indicates the supported number for each types in MaximumNumberOfOSDs, related type shall be presented. A device shall return Option element relating to listed type. + + + + + List available OSD position type. Following are the pre-defined:
  • UpperLeft
  • +
  • UpperRight
  • +
  • LowerLeft
  • +
  • LowerRight
  • +
  • Custom
+
+
+
+ + + Option of the OSD text configuration. This element shall be returned if the device is signaling the support for Text. + + + + + Option of the OSD image configuration. This element shall be returned if the device is signaling the support for Image. + + + +
+ +
+ + + + + + + + + + +
diff --git a/onvif/wsdl/ptz.wsdl b/onvif/wsdl/ptz.wsdl new file mode 100644 index 000000000..e977619be --- /dev/null +++ b/onvif/wsdl/ptz.wsdl @@ -0,0 +1,1300 @@ + + + + + + + + + + + + + + + + + + + + The capabilities for the PTZ service is returned in the Capabilities element. + + + + + + + + + + + + + Indicates whether or not EFlip is supported. + + + + + Indicates whether or not reversing of PT control direction is supported. + + + + + Indicates support for the GetCompatibleConfigurations command. + + + + + + + + + + + + + + + A list of the existing PTZ Nodes on the device. + + + + + + + + + + + + + Token of the requested PTZNode. + + + + + + + + + + + + A requested PTZNode. + + + + + + + + + + + + + + + + A list of all existing PTZConfigurations on the device. + + + + + + + + + + + + + Token of the requested PTZConfiguration. + + + + + + + + + + + + A requested PTZConfiguration. + + + + + + + + + + + + + + + + + + + Flag that makes configuration persistent. Example: User wants the configuration to exist after reboot. + + + + + + + + + + + + + + + + + + Token of an existing configuration that the options are intended for. + + + + + + + + + + + + The requested PTZ configuration options. + + + + + + + + + + + + + A reference to the MediaProfile where the operation should take place. + + + + + + The Auxiliary request data. + + + + + + + + + + + + The response contains the auxiliary response. + + + + + + + + + + + + + A reference to the MediaProfile where the operation should take place. + + + + + + + + + + + + A list of presets which are available for the requested MediaProfile. + + + + + + + + + + + + + A reference to the MediaProfile where the operation should take place. + + + + + + A requested preset name. + + + + + + A requested preset token. + + + + + + + + + + + + A token to the Preset which has been set. + + + + + + + + + + + + + A reference to the MediaProfile where the operation should take place. + + + + + + A requested preset token. + + + + + + + + + + + + + + + + A reference to the MediaProfile where the operation should take place. + + + + + + A requested preset token. + + + + + + A requested speed.The speed parameter can only be specified when Speed Spaces are available for the PTZ Node. + + + + + + + + + + + + + + + + A reference to the MediaProfile where the PTZStatus should be requested. + + + + + + + + + + + + The PTZStatus for the requested MediaProfile. + + + + + + + + + + + + + A reference to the MediaProfile where the operation should take place. + + + + + + A requested speed.The speed parameter can only be specified when Speed Spaces are available for the PTZ Node. + + + + + + + + + + + + + + + + + + A reference to the MediaProfile where the home position should be set. + + + + + + + + + + + + + + + + + + A reference to the MediaProfile. + + + + + + A Velocity vector specifying the velocity of pan, tilt and zoom. + + + + + + An optional Timeout parameter. + + + + + + + + + + + + + + + + + + A reference to the MediaProfile. + + + + + + A positional Translation relative to the current position + + + + + + An optional Speed parameter. + + + + + + + + + + + + + + + + + + A reference to the MediaProfile. + + + + + + A Position vector specifying the absolute target position. + + + + + + An optional Speed. + + + + + + + + + + + + + + + + + + A reference to the MediaProfile that indicate what should be stopped. + + + + + + Set true when we want to stop ongoing pan and tilt movements.If PanTilt arguments are not present, this command stops these movements. + + + + + + Set true when we want to stop ongoing zoom movement.If Zoom arguments are not present, this command stops ongoing zoom movement. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Contains the token of an existing media profile the configurations shall be compatible with. + + + + + + + + + + + A list of all existing PTZConfigurations on the NVT that is suitable to be added to the addressed media profile. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns the capabilities of the PTZ service. The result is returned in a typed answer. + + + + + + Get the descriptions of the available PTZ Nodes. +
+ A PTZ-capable device may have multiple PTZ Nodes. The PTZ Nodes may represent + mechanical PTZ drivers, uploaded PTZ drivers or digital PTZ drivers. PTZ Nodes are the + lowest level entities in the PTZ control API and reflect the supported PTZ capabilities. The + PTZ Node is referenced either by its name or by its reference token. +
+ + +
+ + Get a specific PTZ Node identified by a reference + token or a name. + + + + + + Get a specific PTZonfiguration from the device, identified by its reference token or name. +
+ The default Position/Translation/Velocity Spaces are introduced to allow NVCs sending move + requests without the need to specify a certain coordinate system. The default Speeds are + introduced to control the speed of move requests (absolute, relative, preset), where no + explicit speed has been set.
+ The allowed pan and tilt range for Pan/Tilt Limits is defined by a two-dimensional space range + that is mapped to a specific Absolute Pan/Tilt Position Space. At least one Pan/Tilt Position + Space is required by the PTZNode to support Pan/Tilt limits. The limits apply to all supported + absolute, relative and continuous Pan/Tilt movements. The limits shall be checked within the + coordinate system for which the limits have been specified. That means that even if + movements are specified in a different coordinate system, the requested movements shall be + transformed to the coordinate system of the limits where the limits can be checked. When a + relative or continuous movements is specified, which would leave the specified limits, the PTZ + unit has to move along the specified limits. The Zoom Limits have to be interpreted + accordingly. +
+ + +
+ + + Get all the existing PTZConfigurations from the device. +
+ The default Position/Translation/Velocity Spaces are introduced to allow NVCs sending move + requests without the need to specify a certain coordinate system. The default Speeds are + introduced to control the speed of move requests (absolute, relative, preset), where no + explicit speed has been set.
+ The allowed pan and tilt range for Pan/Tilt Limits is defined by a two-dimensional space range + that is mapped to a specific Absolute Pan/Tilt Position Space. At least one Pan/Tilt Position + Space is required by the PTZNode to support Pan/Tilt limits. The limits apply to all supported + absolute, relative and continuous Pan/Tilt movements. The limits shall be checked within the + coordinate system for which the limits have been specified. That means that even if + movements are specified in a different coordinate system, the requested movements shall be + transformed to the coordinate system of the limits where the limits can be checked. When a + relative or continuous movements is specified, which would leave the specified limits, the PTZ + unit has to move along the specified limits. The Zoom Limits have to be interpreted + accordingly. +
+ + +
+ + + Set/update a existing PTZConfiguration on the device. + + + + + + + List supported coordinate systems including their range limitations. Therefore, the options + MAY differ depending on whether the PTZ Configuration is assigned to a Profile containing a + Video Source Configuration. In that case, the options may additionally contain coordinate + systems referring to the image coordinate system described by the Video Source + Configuration. If the PTZ Node supports continuous movements, it shall return a Timeout Range within + which Timeouts are accepted by the PTZ Node. + + + + + + + Operation to send auxiliary commands to the PTZ device + mapped by the PTZNode in the selected profile. The + operation is supported + if the AuxiliarySupported element of the PTZNode is true + + + + + + + Operation to request all PTZ presets for the PTZNode + in the selected profile. The operation is supported if there is support + for at least on PTZ preset by the PTZNode. + + + + + + The SetPreset command saves the current device position parameters so that the device can + move to the saved preset position through the GotoPreset operation. + In order to create a new preset, the SetPresetRequest contains no PresetToken. If creation is + successful, the Response contains the PresetToken which uniquely identifies the Preset. An + existing Preset can be overwritten by specifying the PresetToken of the corresponding Preset. + In both cases (overwriting or creation) an optional PresetName can be specified. The + operation fails if the PTZ device is moving during the SetPreset operation. + The device MAY internally save additional states such as imaging properties in the PTZ + Preset which then should be recalled in the GotoPreset operation. + + + + + + Operation to remove a PTZ preset for the Node in + the + selected profile. The operation is supported if the + PresetPosition + capability exists for teh Node in the + selected profile. + + + + + + + Operation to go to a saved preset position for the + PTZNode in the selected profile. The operation is supported if there is + support for at least on PTZ preset by the PTZNode. + + + + + + Operation to move the PTZ device to it's "home" position. The operation is supported if the HomeSupported element in the PTZNode is true. + + + + + Operation to save current position as the home position. + The SetHomePosition command returns with a failure if the “home” position is fixed and + cannot be overwritten. If the SetHomePosition is successful, it is possible to recall the + Home Position with the GotoHomePosition command. + + + + + Operation for continuous Pan/Tilt and Zoom movements. The operation is supported if the PTZNode supports at least one continuous Pan/Tilt or Zoom space. If the space argument is omitted, the default space set by the PTZConfiguration will be used. + + + + + Operation for Relative Pan/Tilt and Zoom Move. The operation is supported if the PTZNode supports at least one relative Pan/Tilt or Zoom space.
+ The speed argument is optional. If an x/y speed value is given it is up to the device to either use + the x value as absolute resoluting speed vector or to map x and y to the component speed. + If the speed argument is omitted, the default speed set by the PTZConfiguration will be used. +
+ + +
+ + + Operation to request PTZ status for the Node in the + selected profile. + + + + + Operation to move pan,tilt or zoom to a absolute destination.
+ The speed argument is optional. If an x/y speed value is given it is up to the device to either use + the x value as absolute resoluting speed vector or to map x and y to the component speed. + If the speed argument is omitted, the default speed set by the PTZConfiguration will be used. +
+ + +
+ + Operation to stop ongoing pan, tilt and zoom movements of absolute relative and continuous type. +If no stop argument for pan, tilt or zoom is set, the device will stop all ongoing pan, tilt and zoom movements. + + + + + Operation to request PTZ preset tours in the selected media profiles. + + + + + Operation to request a specific PTZ preset tour in the selected media profile. + + + + + Operation to request available options to configure PTZ preset tour. + + + + + Operation to create a preset tour for the selected media profile. + + + + + Operation to modify a preset tour for the selected media profile. + + + + + Operation to perform specific operation on the preset tour in selected media profile. + + + + + Operation to delete a specific preset tour from the media profile. + + + + + Operation to get all available PTZConfigurations that can be added to the referenced media profile.
+ A device providing more than one PTZConfiguration or more than one VideoSourceConfiguration or which has any other resource + interdependency between PTZConfiguration entities and other resources listable in a media profile should implement this operation. + PTZConfiguration entities returned by this operation shall not fail on adding them to the referenced media profile. +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/onvif/wsdl/r-2.xsd b/onvif/wsdl/r-2.xsd new file mode 100644 index 000000000..21cfbd782 --- /dev/null +++ b/onvif/wsdl/r-2.xsd @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/rw-2.wsdl b/onvif/wsdl/rw-2.wsdl new file mode 100644 index 000000000..04ad487c2 --- /dev/null +++ b/onvif/wsdl/rw-2.wsdl @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/soap-envelop.xsd b/onvif/wsdl/soap-envelop.xsd new file mode 100644 index 000000000..b1a20e08e --- /dev/null +++ b/onvif/wsdl/soap-envelop.xsd @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Prose in the spec does not specify that attributes are allowed on the Body element + + + + + + + + + + + + + + + + + + + + 'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern described in SOAP specification + + + + + + + + + + + + + + + Fault reporting structure + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/t-1.xsd b/onvif/wsdl/t-1.xsd new file mode 100644 index 000000000..ae42cfbc7 --- /dev/null +++ b/onvif/wsdl/t-1.xsd @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TopicPathExpression ::= TopicPath ( '|' TopicPath )* + TopicPath ::= RootTopic ChildTopicExpression* + RootTopic ::= NamespacePrefix? ('//')? (NCName | '*') + NamespacePrefix ::= NCName ':' + ChildTopicExpression ::= '/' '/'? (QName | NCName | '*'| '.') + + + + + + + + + + + + + The pattern allows strings matching the following EBNF: + ConcreteTopicPath ::= RootTopic ChildTopic* + RootTopic ::= QName + ChildTopic ::= '/' (QName | NCName) + + + + + + + + + + + + + The pattern allows strings matching the following EBNF: + RootTopic ::= QName + + + + + + + diff --git a/onvif/wsdl/ws-addressing-2004-08.xsd b/onvif/wsdl/ws-addressing-2004-08.xsd new file mode 100644 index 000000000..b7bfaff6a --- /dev/null +++ b/onvif/wsdl/ws-addressing-2004-08.xsd @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + If "Policy" elements from namespace "http://schemas.xmlsoap.org/ws/2002/12/policy#policy" are used, they must appear first (before any extensibility elements). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/ws-discovery-1.0.wsdl b/onvif/wsdl/ws-discovery-1.0.wsdl new file mode 100644 index 000000000..3f198c634 --- /dev/null +++ b/onvif/wsdl/ws-discovery-1.0.wsdl @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/ws-discovery-1.0.xsd b/onvif/wsdl/ws-discovery-1.0.xsd new file mode 100644 index 000000000..11ac790bb --- /dev/null +++ b/onvif/wsdl/ws-discovery-1.0.xsd @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/wsdd-discovery-1.1-schema-os.xsd b/onvif/wsdl/wsdd-discovery-1.1-schema-os.xsd new file mode 100644 index 000000000..3307efc1d --- /dev/null +++ b/onvif/wsdl/wsdd-discovery-1.1-schema-os.xsd @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl b/onvif/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl new file mode 100644 index 000000000..36936b2a1 --- /dev/null +++ b/onvif/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/wsdiscovery-udp.wsdl b/onvif/wsdl/wsdiscovery-udp.wsdl new file mode 100644 index 000000000..54b9fc92d --- /dev/null +++ b/onvif/wsdl/wsdiscovery-udp.wsdl @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/wsdiscovery10-udp.wsdl b/onvif/wsdl/wsdiscovery10-udp.wsdl new file mode 100644 index 000000000..6fddfb822 --- /dev/null +++ b/onvif/wsdl/wsdiscovery10-udp.wsdl @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/wsdl.xsd b/onvif/wsdl/wsdl.xsd new file mode 100644 index 000000000..a81ab5691 --- /dev/null +++ b/onvif/wsdl/wsdl.xsd @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + This type is extended by component types to allow them to be documented + + + + + + + + + + + + + This type is extended by component types to allow attributes from other namespaces to be added. + + + + + + + + + + + + + This type is extended by component types to allow elements from other namespaces to be added. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Any top level optional element allowed to appear more then once - any child of definitions element except wsdl:types. Any extensibility element is allowed in any place. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/wsdl11soap12.xsd b/onvif/wsdl/wsdl11soap12.xsd new file mode 100644 index 000000000..a5e7a0b94 --- /dev/null +++ b/onvif/wsdl/wsdl11soap12.xsd @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/wsnotification.wsdl b/onvif/wsdl/wsnotification.wsdl new file mode 100644 index 000000000..2ce67b2e4 --- /dev/null +++ b/onvif/wsdl/wsnotification.wsdl @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/onvif/wsdl/xmlmime.xsd b/onvif/wsdl/xmlmime.xsd new file mode 100644 index 000000000..766a07bd9 --- /dev/null +++ b/onvif/wsdl/xmlmime.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/onvif/wsdl/xop-include.xsd b/onvif/wsdl/xop-include.xsd new file mode 100644 index 000000000..edb43a086 --- /dev/null +++ b/onvif/wsdl/xop-include.xsd @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index bd1885fbe..a96952a85 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -9,6 +9,7 @@ configure_file(zmcontrol.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmcontrol.pl" @ONLY) configure_file(zmdc.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmdc.pl" @ONLY) configure_file(zmfilter.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmfilter.pl" @ONLY) configure_file(zmonvif-probe.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmonvif-probe.pl" @ONLY) +configure_file(zmonvif-trigger.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmonvif-trigger.pl" @ONLY) configure_file(zmpkg.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmpkg.pl" @ONLY) configure_file(zmrecover.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmrecover.pl" @ONLY) configure_file(zmtrack.pl.in "${CMAKE_CURRENT_BINARY_DIR}/zmtrack.pl" @ONLY) @@ -36,7 +37,24 @@ FOREACH(PERLSCRIPT ${perlscripts}) ENDFOREACH(PERLSCRIPT ${perlscripts}) # Install the perl scripts -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zmaudit.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmcontrol.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmdc.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmfilter.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmonvif-probe.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmpkg.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmrecover.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmtrack.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmtrigger.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmupdate.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmvideo.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmwatch.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmcamtool.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmtelemetry.pl" "${CMAKE_CURRENT_BINARY_DIR}/zmstats.pl" DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/zmaudit.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmcontrol.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmdc.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmfilter.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmonvif-probe.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmonvif-trigger.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmpkg.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmrecover.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmtrack.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmtrigger.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmupdate.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmvideo.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmwatch.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmcamtool.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmtelemetry.pl" + "${CMAKE_CURRENT_BINARY_DIR}/zmstats.pl" + DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) if(NOT ZM_NO_X10) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/zmx10.pl" DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) endif(NOT ZM_NO_X10) diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control.pm index 06c116626..acce8eb4a 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control.pm @@ -116,7 +116,7 @@ sub getParam { } elsif ( defined($default) ) { return $default; } - Fatal("Missing mandatory parameter '$name'"); + Error("Missing mandatory parameter '$name'"); } sub executeCommand { diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/DCS5020L.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/DCS5020L.pm index 4f14e787a..2b2cf3fd2 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/DCS5020L.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/DCS5020L.pm @@ -69,9 +69,9 @@ sub sendCmd { my $result = undef; - printMsg($cmd, 'Tx'); + $self->printMsg($cmd, 'Tx'); - my $req = HTTP::Request->new( POST=>"http://$self->{Monitor}->{ControlAddress}/$cgi.cgi" ); + my $req = HTTP::Request->new(POST=>"http://$self->{Monitor}->{ControlAddress}/$cgi.cgi"); $req->content($cmd); my $res = $self->{ua}->request($req); diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm index 5d05ae7c5..0513f563e 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm @@ -210,7 +210,7 @@ sub initialise( @ ) { if ( my $logFile = $this->getTargettedEnv('LOG_FILE') ) { $tempLogFile = $logFile; } - ($tempLogFile) = $tempLogFile =~ /^([\w\.\/]+)$/; + ($tempLogFile) = $tempLogFile =~ /^([_\-\w\.\/]+)$/; my $tempLevel = INFO; my $tempTermLevel = $this->{termLevel}; @@ -456,9 +456,9 @@ sub fileLevel { if ( defined($fileLevel) ) { $fileLevel = $this->limit($fileLevel); # The filename might have changed, so always close and re-open - $this->closeFile() if ( $this->{fileLevel} > NOLOG ); + $this->closeFile() if $this->{fileLevel} > NOLOG; $this->{fileLevel} = $fileLevel; - $this->openFile() if ( $this->{fileLevel} > NOLOG ); + $this->openFile() if $this->{fileLevel} > NOLOG; } return $this->{fileLevel}; } @@ -490,7 +490,7 @@ sub closeSyslog { sub logFile { my $this = shift; my $logFile = shift; - if ( $logFile =~ /^(.+)\+$/ ) { + if ( $logFile and ( $logFile =~ /^(.+)\+$/ ) ) { $this->{logFile} = $1.'.'.$$; } else { $this->{logFile} = $logFile; @@ -499,6 +499,7 @@ sub logFile { sub openFile { my $this = shift; + if ( open($LOGFILE, '>>', $this->{logFile}) ) { $LOGFILE->autoflush() if $this->{autoFlush}; @@ -519,7 +520,6 @@ sub openFile { } sub closeFile { - #my $this = shift; close($LOGFILE) if fileno($LOGFILE); } diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ONVIF.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ONVIF.pm.in index 9b9c6c794..d90a5fea3 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ONVIF.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ONVIF.pm.in @@ -39,12 +39,10 @@ our %EXPORT_TAGS = ( ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; -our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); +our @EXPORT_OK = ( @{ $EXPORT_TAGS{all} } ); our @EXPORT = qw(); -our $VERSION = $ZoneMinder::Base::VERSION; - use Data::UUID; use vars qw( $verbose $soap_version ); @@ -60,13 +58,16 @@ require WSDiscovery::TransportUDP; sub deserialize_message { my ($wsdl_client, $response) = @_; + if ( ! $response ) { + return; + } # copied and adapted from SOAP::WSDL::Client # get deserializer my $deserializer = $wsdl_client->get_deserializer(); - if(! $deserializer) { + if ( !$deserializer ) { $deserializer = SOAP::WSDL::Factory::Deserializer->get_deserializer({ soap_version => $wsdl_client->get_soap_version(), %{ $wsdl_client->get_deserializer_args() }, @@ -74,22 +75,18 @@ sub deserialize_message { } # set class resolver if serializer supports it $deserializer->set_class_resolver( $wsdl_client->get_class_resolver() ) - if ( $deserializer->can('set_class_resolver') ); + if $deserializer->can('set_class_resolver'); # Try deserializing response - there may be some, -# even if transport did not succeed (got a 500 response) - if ( ! $response ) { - return; - } - +# even if transport did not succeed (got a 500 response) # as our faults are false, returning a success marker is the only # reliable way of determining whether the deserializer succeeded. # Custom deserializers may return an empty list, or undef, # and $@ is not guaranteed to be undefined. my ($success, $result_body, $result_header) = eval { - (1, $deserializer->deserialize( $response )); + (1, $deserializer->deserialize($response)); }; - if (defined $success) { + if ( defined $success ) { return wantarray ? ($result_body, $result_header) : $result_body; @@ -97,7 +94,6 @@ sub deserialize_message { return $@; } - #else return $deserializer->generate_fault({ code => 'soap:Server', role => 'urn:localhost', @@ -107,14 +103,11 @@ sub deserialize_message { } # end sub deserialize_message sub interpret_messages { - my ($svc_discover, $services, @responses ) = @_; + my ( $svc_discover, $services, @responses ) = @_; my @results; foreach my $response ( @responses ) { - - if ( $verbose ) { - print "Received message:\n" . $response . "\n"; - } + print "Received message:\n" . $response . "\n" if $verbose; my $result = deserialize_message($svc_discover, $response); if ( not $result ) { @@ -143,28 +136,26 @@ sub interpret_messages { next if defined $services->{$xaddr}; $services->{$xaddr} = 1; - print "$xaddr, " . $svc_discover->get_soap_version() . ", "; + print $xaddr.', '.$svc_discover->get_soap_version().', '; - print "("; + print '('; my $scopes = $result->get_ProbeMatch()->get_Scopes(); my $count = 0; my %scopes; - foreach my $scope(split ' ', $scopes) { - if($scope =~ m|onvif://www\.onvif\.org/(.+)/(.*)|) { + foreach my $scope (split ' ', $scopes) { + if ( $scope =~ m|onvif://www\.onvif\.org/(.+)/(.*)| ) { my ($attr, $value) = ($1,$2); - if( 0 < $count ++) { - print ", "; - } - print $attr . "=\'" . $value . "\'"; + print ', ' if 0 < $count ++; + print $attr . '=\'' . $value . '\''; $scopes{$attr} = $value; } } print ")\n"; - push @results, { xaddr=>$xaddr, + push @results, { + xaddr => $xaddr, soap_version => $svc_discover->get_soap_version(), - scopes => \%scopes, + scopes => \%scopes, }; - } return @results; } # end sub interpret_messages @@ -172,7 +163,7 @@ sub interpret_messages { # functions sub discover { - my ( $soap_version, $net_interface ) = @_; + my ($soap_versions, $net_interface) = @_; my @results; ## collect all responses @@ -185,23 +176,19 @@ sub discover { push @responses, $response; }; -## try both soap versions - my $uuid_gen = Data::UUID->new(); - if ( ( ! $soap_version ) or ( $soap_version eq '1.1' ) ) { + foreach my $version ( $soap_versions ? ( split(',',$soap_versions) ) : ( '1.1', '1.2') ) { my %services; - if ( $verbose ) { - print "Probing for SOAP 1.1\n"; - } + print "Probing for SOAP $version\n" if $verbose; my $svc_discover = WSDiscovery10::Interfaces::WSDiscovery::WSDiscoveryPort->new({ # no_dispatch => '1', }); - $svc_discover->set_soap_version('1.1'); + $svc_discover->set_soap_version($version); if ( $net_interface ) { my $transport = $svc_discover->get_transport(); - print "Setting net interface for $transport to $net_interface\n"; + print "Setting net interface for $transport to $net_interface\n" if $verbose; $transport->set_net_interface($net_interface); } @@ -209,7 +196,15 @@ sub discover { my $result = $svc_discover->ProbeOp( { # WSDiscovery::Types::ProbeType - Types => 'http://www.onvif.org/ver10/network/wsdl:NetworkVideoTransmitter http://www.onvif.org/ver10/device/wsdl:Device', # QNameListType + ( + ($version eq '1.1') ? + ( + Types => 'http://www.onvif.org/ver10/network/wsdl:NetworkVideoTransmitter http://www.onvif.org/ver10/device/wsdl:Device', # QNameListType + ) : ( + xmlattr => { 'xmlns:dn' => 'http://www.onvif.org/ver10/network/wsdl', }, + ) + ), + Types => 'dn:NetworkVideoTransmitter', # QNameListType Scopes => { value => '' }, }, WSDiscovery10::Elements::Header->new({ @@ -218,78 +213,49 @@ sub discover { To => { value => 'urn:schemas-xmlsoap-org:ws:2005:04:discovery' }, }) ); - print $result . "\n" if $verbose; + print $result."\n" if $verbose; push @results, interpret_messages($svc_discover, \%services, @responses); - @responses = (); - } # end if doing soap 1.1 + @responses = (); + } # end foreach version - if ( ( ! $soap_version ) or ( $soap_version eq '1.2' ) ) { - my %services; - if ( $verbose ) { - print "Probing for SOAP 1.2\n"; - } - my $svc_discover = WSDiscovery10::Interfaces::WSDiscovery::WSDiscoveryPort->new({ -# no_dispatch => '1', - }); - $svc_discover->set_soap_version('1.2'); - if ( $net_interface ) { - my $transport = $svc_discover->get_transport(); - print "Setting net interface for $transport to $net_interface\n"; - $transport->set_net_interface($net_interface); - } - -# copies of the same Probe message must have the same MessageID. -# This is not a copy. So we generate a new uuid. - my $uuid = $uuid_gen->create_str(); - -# Everyone else, like the nodejs onvif code and odm only ask for NetworkVideoTransmitter - my $result = $svc_discover->ProbeOp( - { # WSDiscovery::Types::ProbeType - xmlattr => { 'xmlns:dn' => 'http://www.onvif.org/ver10/network/wsdl', }, - Types => 'dn:NetworkVideoTransmitter', # QNameListType - Scopes => { value => '' }, - }, - WSDiscovery10::Elements::Header->new({ - Action => { value => 'http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe' }, - MessageID => { value => "urn:uuid:$uuid" }, - To => { value => 'urn:schemas-xmlsoap-org:ws:2005:04:discovery' }, - }) - ); - print $result . "\n" if $verbose; - push @results, interpret_messages($svc_discover, \%services, @responses); - } # end if doing soap 1.2 return @results; } # end sub discover sub profiles { - my ( $client ) = @_; + my ($client) = @_; my $media = $client->get_endpoint('media'); - if ( ! $media ) { + if ( !$media ) { print "No media endpoint for client.\n"; return; } my $result = $media->GetProfiles( { } ,, ); - if ( ! $result ) { + if ( !$result ) { print "No result from GetProfiles.\n"; return; } if ( $verbose ) { - print "Received message:\n" . $result . "\n"; + use XML::LibXML; + my $dom = XML::LibXML->load_xml(string=>$result); + print "Received message:\n" . $dom->toString(1) . "\n"; } + my @Profiles = @{ $result->get_Profiles() }; + if ( !@Profiles ) { + print "No profiles returned from get_Profiles\n"; + return; + } + print 'Number of profiles found: ' .(scalar @Profiles)."\n" if $verbose; + my @profiles; - my $profiles = $result->get_Profiles(); - - foreach my $profile ( @{ $profiles } ) { - + foreach my $profile ( @Profiles ) { my $token = $profile->attr()->get_token() ; my $Name = $profile->get_Name(); my $VideoEncoderConfiguration = $profile->get_VideoEncoderConfiguration(); if ( ! $VideoEncoderConfiguration ) { - print "Unknown profile $token $Name.\n"; + print "No VideoEncoderConfiguration in profile $token $Name.\n"; next; } @@ -304,21 +270,56 @@ sub profiles { }, }, ProfileToken => $token, # ReferenceToken - } ); - next if ! ( $StreamUri and $StreamUri->can('get_MediaUri') ); - my $MediaUri = $StreamUri->get_MediaUri(); - next if ! $MediaUri; - my $Uri = $MediaUri->get_Uri(); - next if ! $Uri; + } ); + if ( ! ( $StreamUri and $StreamUri->can('get_MediaUri') ) ) { + print "No StreamUri or no MediaUri on profile $Name of type $streamtype\n" if $verbose; + next; + } + if ( $verbose ) { + eval { + use XML::LibXML; + my $dom = XML::LibXML->load_xml(string=>$StreamUri); + print "Received message:\n" . $dom->toString(1) . "\n"; + }; + } + my $MediaUri = $StreamUri->get_MediaUri(); + if ( !$MediaUri ) { + print "No MediaUri in profile $Name of type $streamtype\n"; + next; + } + if ( $verbose ) { + eval { + use XML::LibXML; + my $dom = XML::LibXML->load_xml(string=>$MediaUri); + print "Received message:\n" . $dom->toString(1) . "\n"; + }; + } + my $Uri = $MediaUri->get_Uri(); + if ( ! $Uri ) { + print "No Uri in profile $Name of type $streamtype\n"; + next; + } + if ( $verbose ) { + eval { + use XML::LibXML; + my $dom = XML::LibXML->load_xml(string=>$Uri); + print "Received message:\n" . $dom->toString(1) . "\n"; + }; + } + my $Resolution = $VideoEncoderConfiguration->get_Resolution(); + my $Width = $Resolution ? $Resolution->get_Width() : 0; + my $Height = $Resolution ? $Resolution->get_Height() : 0; - print join(', ', $token, - $Name, - $VideoEncoderConfiguration->get_Encoding(), - $VideoEncoderConfiguration->get_Resolution()->get_Width(), - $VideoEncoderConfiguration->get_Resolution()->get_Height(), - $VideoEncoderConfiguration->get_RateControl()->get_FrameRateLimit(), - $Uri, - ) . "\n"; + push @profiles, [ + $token, + $Name, + $VideoEncoderConfiguration->get_Encoding(), + $Width, + $Height, + $VideoEncoderConfiguration->get_RateControl()->get_FrameRateLimit(), + $streamtype, + $Uri, + ]; } # end foreach streamtype } # end foreach profile @@ -326,6 +327,7 @@ sub profiles { # # use message parser without schema validation ??? # + return @profiles; } # end sub profiles @@ -339,12 +341,12 @@ sub move { } # end sub move sub metadata { - my ( $client ) = @_; + my ($client) = @_; my $media = $client->get_endpoint('media'); die 'No media endpoint.' if !$media; my $result = $media->GetMetadataConfigurations( { } ,, ); - if ( ! $result ) { + if ( !$result ) { print "No MetaDataConfigurations\n" if $verbose; } else { print $result . "\n"; @@ -363,8 +365,6 @@ sub metadata { } - - 1; __END__ diff --git a/scripts/zmonvif-probe.pl.in b/scripts/zmonvif-probe.pl.in old mode 100755 new mode 100644 index c825f8447..b9d3cd0bf --- a/scripts/zmonvif-probe.pl.in +++ b/scripts/zmonvif-probe.pl.in @@ -41,7 +41,7 @@ my $OPTIONS = 'v'; sub HELP_MESSAGE { my ($fh, $pkg, $ver, $opts) = @_; - print $fh "Usage: " . __FILE__ . " [-v] probe \n"; + print $fh "Usage: " . __FILE__ . " [-v] probe \n"; print $fh " " . __FILE__ . " [-v] \n"; print $fh <new( { + verbose => $ZoneMinder::ONVIF::verbose, url_svc_device => $url_svc_device, soap_version => $soap_version } ); @@ -102,17 +103,43 @@ if ( $action eq 'probe' ) { $client->create_services(); if ( $action eq 'profiles' ) { - ZoneMinder::ONVIF::profiles($client); - } elsif( $action eq 'move' ) { + my @profiles = ZoneMinder::ONVIF::profiles($client); + foreach my $profile ( @profiles ) { + my ( $token, $name, $encoding, $width, $height, $frame_rate_limit, $stream_type, $uri ) = @{$profile}; + print join(', ', $token, + $name, + $encoding, + $width, + $height, + $frame_rate_limit, + $stream_type, + $uri, + ) . "\n"; + + } # end foreach profile + } elsif ( $action eq 'move' ) { my $dir = shift; ZoneMinder::ONVIF::move($client, $dir); } elsif ( $action eq 'metadata' ) { ZoneMinder::ONVIF::metadata($client); } else { - print("Error: Unknown command \"$action\""); - exit(1); + my $media = $client->get_endpoint('media'); + if ( ! $media ) { + print "No media endpoint for client.\n"; + return; + } + + my $result = $media->$action( { } ,, ); + if ( $result ) { + use XML::LibXML; + my $dom = XML::LibXML->load_xml(string=>$result); + print "Received message:\n" . $dom->toString(1) . "\n"; + } else { + print("Error: Unknown command \"$action\""); + exit(1); + } } -} +} # end if probe or other 1; __END__ @@ -131,6 +158,8 @@ zmonvif-probe.pl - ZoneMinder ONVIF probing tool profiles - print the device's supported stream configurations metadata - print some of the device's configuration settings move - move the device (only ptz cameras) + other - Any command supported by the ONVIF Media element. + Common parameters: -v - increase verbosity Device access parameters (for all commands but 'probe'): diff --git a/scripts/zmonvif-trigger.pl.in b/scripts/zmonvif-trigger.pl.in new file mode 100644 index 000000000..b837c4e4b --- /dev/null +++ b/scripts/zmonvif-trigger.pl.in @@ -0,0 +1,682 @@ +#!@PERL_EXECUTABLE@ -w +# +# ========================================================================== +# +# ZoneMinder ONVIF Event Watcher Script +# Copyright (C) Jan M. Hochstein +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ========================================================================== +# +# This module contains the implementation of the ONVIF event watcher +# + +## SETUP: +## chmod g+rw /dev/shm/zm* +## chgrp users /dev/shm/zm* +## systemctl stop iptables + +## DEBUG: +## hexdump -x -s 0 -n 600 /dev/shm/zm.mmap.1 +## rm -rf /srv/www/html/zm/events/[...] +## + +use strict; +use bytes; + +use Carp; +use Data::Dump qw( dump ); + +use DBI; +use Getopt::Long qw(:config no_auto_abbrev no_ignore_case bundling); +use IO::Select; +use POSIX qw( EINTR ); +use Time::HiRes qw( usleep ); + +use SOAP::Lite; # +trace; +use SOAP::Transport::HTTP; + +use ZoneMinder; + +require ONVIF::Client; + +require WSNotification::Interfaces::WSBaseNotificationSender::NotificationProducerPort; +require WSNotification::Interfaces::WSBaseNotificationSender::SubscriptionManagerPort; +require WSNotification::Types::TopicExpressionType; + +# ======================================================================== +# Constants + +# in seconds +use constant SUBSCRIPTION_RENEW_INTERVAL => 60; #3600; +use constant SUBSCRIPTION_RENEW_EARLY => 5; # 60; +use constant MONITOR_RELOAD_INTERVAL => 3600; + +# ======================================================================== +# Globals + +my $verbose = 0; +my $script; +my $daemon_pid; + +my $monitor_reload_time = 0; + +# this does not work on all architectures +my @EXTRA_SOCK_OPTS = ( + 'ReuseAddr' => '1', + # 'ReusePort' => '1', + # 'Blocking' => '0', +); + + +# ========================================================================= +# signal handling + +sub handler { # 1st argument is signal name + my ($sig) = @_; + Error("Caught a SIG$sig -- shutting down"); + confess(); + kill($daemon_pid) if defined $daemon_pid; + exit(0); +} + +$SIG{INT} = \&handler; +$SIG{HUP} = \&handler; +$SIG{QUIT} = \&handler; +$SIG{TERM} = \&handler; +$SIG{__DIE__} = \&handler; + +# ========================================================================= +# Debug + +use Data::Hexdumper qw(hexdump); +#use Devel::Peek; + +sub dump_mapped { + my ($monitor) = @_; + + if ( !zmMemVerify($monitor) ) { + print "Error: Mapped memory not accessible\n"; + } + my $mmap = $monitor->{MMap}; + print 'Size: '.$ZoneMinder::Memory::mem_size ."\n"; + printf("Mapped at %x\n", $monitor->{MMapAddr}); + # Dump($mmap); + if ( $mmap && $$mmap ) { + print hexdump( + data => $$mmap, # what to dump + output_format => ' %4a : %S %S %S %S %S %S %S %S : %d', + # start_position => 336, # start at this offset ... + end_position => 400 # ... and end at this offset + ); + } +} + +#push @EXPORT, qw(dump_mapped); + +# ========================================================================= +# internal methods + +sub xs_duration { + use integer; + my ($seconds) = @_; + my $s = $seconds % 60; + $seconds /= 60; + my $m = $seconds % 60; + $seconds /= 60; + my $h = $seconds % 24; + $seconds /= 24; + my $d = $seconds; + my $str; + if($d > 0) { + $str = "P". $d; + } + else { + $str = "P"; + } + $str = $str . "T"; + if($h > 0) { + $str = $str . $h . "H"; + } + if($m > 0) { + $str = $str . $m . "M"; + } + if($s > 0) { + $str = $str . $s . "S"; + } + return $str; +} + +# ========================================================================= +### ZoneMinder integration + +## make this a singleton ? +{ + package _ZoneMinder; + + use strict; + use bytes; + + use base qw(Class::Std::Fast); + + use DBI; + use Encode qw(decode encode); + use Time::HiRes qw( usleep ); + use ZoneMinder; + + # my %monitors = (); + my $dbh; + my %monitors_of; # :ATTR(:name :default<{}>); + + sub init { + $dbh = zmDbConnect(); + } + + sub monitors { + my ($self) = @_; + return $monitors_of{ident $self}?%{ $monitors_of{ident $self} }:undef; + } + + sub set_monitors { + my ($self, %monitors_par) = @_; + $monitors_of{ident $self} = \%monitors_par; + } + + ## TODO: remember to refresh this in all threads (daemon is forked) + sub loadMonitors { + my ($self) = @_; + Info("Loading monitors"); + $monitor_reload_time = time(); + + my %new_monitors = (); + + # my $sql = "select * from Monitors where find_in_set( Function, 'Modect,Mocord,Nodect,ExtDect' )>0 and ConfigType='ONVIF'"; + my $sql = "SELECT * FROM Monitors WHERE ONVIF_URL != ''"; + my $sth = $dbh->prepare_cached($sql) or Fatal("Can't prepare '$sql': ".$dbh->errstr()); + my $res = $sth->execute() or Fatal("Can't execute: ".$sth->errstr()); + while ( my $monitor = $sth->fetchrow_hashref() ) { + if ( !defined $script ) { + if ( !zmMemVerify($monitor) ) { # Check shared memory ok + zmMemInvalidate($monitor); + next if !zmMemVerify($monitor); + } + } + + Info('Monitor URL: '.$monitor->{ONVIF_URL}); + + ## set up ONVIF client for monitor + next if ! $monitor->{ONVIF_URL}; + + my $soap_version; + if ( $monitor->{ONVIF_Options} =~ /SOAP1([12])/ ) { + $soap_version = "1.$1"; + } else { + $soap_version = '1.1'; + } + my $client = ONVIF::Client->new( { + url_svc_device => $monitor->{ONVIF_URL}, + soap_version => $soap_version } ); + + if ( $monitor->{ONVIF_Username} ) { + $client->set_credentials($monitor->{ONVIF_Username}, $monitor->{ONVIF_Password}, 0); + } + + $client->create_services(); + $monitor->{onvif_client} = $client; + + $new_monitors{$monitor->{Id}} = $monitor; + } # end foreach monitor + $self->set_monitors(%new_monitors); + } # end foreach db monitor + + sub freeMonitors { + my ($self) = @_; + my %monitors = $self->monitors(); + foreach my $monitor ( values %monitors ) { + # Free up any used memory handle + zmMemInvalidate($monitor); + } + } + + sub eventOn { + my ($self, $monitorId, $score, $cause, $text, $showtext) = @_; + # Info( "Trigger '$trigger'\n" ); + Info("On: $monitorId, $score, $cause, $text, $showtext"); + my %monitors = $self->monitors(); + my $monitor = $monitors{$monitorId}; + if ( defined $script ) { + # eval { + system($script, 'On', $monitor->{Name}, $monitor->{Path}, $cause); + # this goes to "stopped" in ffmpeg when executed from shell - why? + # } + } else { + # encode() ensures that no utf-8 is written to mmap'ed memory. + zmTriggerEventOn($monitor, $score, encode('utf-8', $cause), encode('utf-8', $text)); + zmTriggerShowtext($monitor, encode('utf-8', $showtext)) if defined($showtext); + # main::dump_mapped($monitor); + } + } + + sub eventOff { + my ($self, $monitorId, $score, $cause, $text, $showtext) = @_; + Info("Off: $monitorId, $score, $cause, $text, $showtext"); + my %monitors = $self->monitors(); + my $monitor = $monitors{$monitorId}; + if ( defined $script ) { + # eval { + system($script, 'Off', $monitor->{Name}, $monitor->{Path}, $cause); + # } + } else { + my $last_event = zmGetLastEvent($monitor); + zmTriggerEventOff($monitor); + # encode() ensures that no utf-8 is written to mmap'ed memory. + zmTriggerShowtext($monitor, encode('utf-8', $showtext) ) if defined($showtext); + # Info( "Trigger '$trigger'\n" ); + # Wait til it's finished + while ( zmInAlarm($monitor) && ($last_event == zmGetLastEvent($monitor)) ) { + # Tenth of a second + usleep(100000); + } + zmTriggerEventCancel($monitor); + # main::dump_mapped($monitor); + } + } +} # end package _ZoneMinder +# ========================================================================= +### (experimental) send email + +sub send_picture_email { + # 'ffmpeg -i "rtsp://admin:admin123@192.168.0.70:554/Streaming/Channels/1?transportmode=mcast&profile=Profile_1" -y -frames 1 -vf scale=1024:-1 /tmp/pic2.jpg' +} + +# ========================================================================= +### Consumer for Notify messages + +$SOAP::Constants::DO_NOT_CHECK_MUSTUNDERSTAND = 1; + +## make this a singleton ? +{ + package _Consumer; + use strict; + use bytes; + use base qw(Class::Std::Fast SOAP::Server::Parameters); + + use ZoneMinder; + + my $zm; + + sub BUILD { + my ($self, $ident, $arg_ref) = @_; + # $zm_of{$ident} = check_name( $arg_ref->{zm} ); + $zm = $arg_ref->{zm}; + } + + # + # called on http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify + # + sub Notify { + my ($self, $unknown, $som) = @_; + Debug('### Notify'); + my $req = $som->context->request; + # Data::Dump::dump($req); + my $id = 0; + if ( $req->uri->path =~ m|/ref_(.*)/| ) { + $id = $1; + } else { + Warning('Unknown URL '.$req->uri->path.' called by event'); + return (); + } + # Data::Dump::dump($som); + my $action = $som->valueof('/Envelope/Header/Action'); + Debug(' Action = '.$action); + my $msg = $som->match('/Envelope/Body/Notify/NotificationMessage'); + my $topic = $msg->valueof('Topic'); + my $msg2 = $msg->match('Message/Message'); + # Data::Dump::dump($msg2->current()); + my $time = $msg2->dataof()->attr->{'UtcTime'}; + + my (%source, %data); + foreach my $item ($msg2->dataof('Source/SimpleItem')) { + $source{$item->attr->{Name}} = $item->attr->{Value}; + # print $item->attr->{Name} ."=>". $item->attr->{Value} ."\n"; + } + foreach my $item ($msg2->dataof('Data/SimpleItem')) { + $data{$item->attr->{Name}} = $item->attr->{Value}; + } + Debug("Ref=$id, Topic=$topic, $time, Rule=$source{Rule}, isMotion=$data{IsMotion}"); + if ( lc($data{IsMotion}) eq 'true' ) { + $zm->eventOn($id, 100, $source{Rule}, $time); + } elsif ( lc($data{IsMotion}) eq 'false' ) { + $zm->eventOff($id, 100, $source{Rule}, $time); + } + return (); + } +} # end Consumer + +# ========================================================================= + +sub daemon_main { + my ($daemon) = @_; + + # $daemon->handle(); + + # improve responsiveness with multiple clients (cameras) + my $d = $daemon->{_daemon}; + my $select = IO::Select->new(); + $select->add($d); + while ($select->count() ) { + my @ready = $select->can_read(); # blocks + foreach my $connection (@ready) { + if ( $connection == $d ) { + # on the daemon accept and add the connection + my $client = $connection->accept(); + $select->add($client); + } else { + # it's a client connection + my $request = $connection->get_request(); + if ( $request ) { + # process the request (taken from SOAP::Transport::HTTP::Daemon->handle() ) + $daemon->request($request); + $daemon->SOAP::Transport::HTTP::Server::handle(); + eval { + local $SIG{PIPE} = sub { print("SIGPIPE\n") }; # die? + $connection->send_response( $daemon->response ); + }; + if ( $@ && $@ !~ /^SIGPIPE/ ) { + print($@); # die? + } + } else { + # connection was closed by the client + $select->remove($connection); + $connection->close(); # is this necessary? + } + } # end if new connection or existing + } # end foreach connection + } # end while select->count +} # end sub daemon_main + +sub start_daemon { + my ($localip, $localport, $zm) = @_; + + ### daemon + my $daemon = SOAP::Transport::HTTP::Daemon->new( + LocalAddr => $localip, + LocalPort => $localport, + # 'deserializer' => $deserializer, + @EXTRA_SOCK_OPTS + ); + + ## handling + + # we only handle one method + $daemon->on_dispatch( sub { + return ( 'http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer', 'Notify' ); + }); + + $daemon_pid = fork(); + die "fork() failed: $!" unless defined $daemon_pid; + if ( $daemon_pid ) { + + # this is a new process --> use new name and log file + $0 = $0.' [http-daemon]'; + logInit(id => 'zmonvif-trigger-httpd'); + logSetSignal(); + + # $zm is copied and the mmap'ed regions still exist + my $consumer = _Consumer->new({zm => $zm}); + $daemon->dispatch_with({ + # "http://docs.oasis-open.org/wsn/bw-2" => $consumer, + 'http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer' => $consumer, + }); + daemon_main($daemon); + } else { + return $daemon; + } +} # end sub start_daemon + +require WSNotification::Elements::Subscribe; +require WSNotification::Types::EndpointReferenceType; +#require WSNotification::Types::ReferenceParametersType; +#require WSNotification::Elements::Metadata; +require WSNotification::Types::FilterType; +require WSNotification::Elements::TopicExpression; +require WSNotification::Elements::MessageContent; +require WSNotification::Types::AbsoluteOrRelativeTimeType; +require WSNotification::Types::AttributedURIType; + +sub subscribe { + my ($client, $localaddr, $topic_str, $duration, $ref_id) = @_; + + # for debugging: + # $client->get_endpoint('events')->no_dispatch(1); + + my $result = $client->get_endpoint('events')->Subscribe( { + ConsumerReference => { # WSNotification::Types::EndpointReferenceType + Address => { value => 'http://' . $localaddr . '/ref_'. $ref_id . '/' }, + # ReferenceParameters => { # WSNotification::Types::ReferenceParametersType + # }, + # Metadata => { # WSNotification::Types::MetadataType + # }, + }, + Filter => { # WSNotification::Types::FilterType + TopicExpression => { # WSNotification::Types::TopicExpressionType + xmlattr => { + Dialect => "http://www.onvif.org/ver10/tev/topicExpression/ConcreteSet", + }, + value => $topic_str, + }, + # MessageContent => { # WSNotification::Types::QueryExpressionType + # }, + }, + InitialTerminationTime => xs_duration($duration), # AbsoluteOrRelativeTimeType + # SubscriptionPolicy => { + # }, + },, + ); + + die $result if not $result; + # print $result . "\n"; + + ### build Subscription Manager + my $submgr_addr = $result->get_SubscriptionReference()->get_Address()->get_value(); + Info("Subscription Manager at $submgr_addr"); + + my $serializer = $client->service('device', 'ep')->get_serializer(); + + my $submgr_svc = WSNotification::Interfaces::WSBaseNotificationSender::SubscriptionManagerPort->new({ + serializer => $serializer, + proxy => $submgr_addr, + }); + + return $submgr_svc; +} # end sub subscribe + +sub unsubscribe { + my ($submgr_svc) = @_; + + $submgr_svc->Unsubscribe( { },, ); +} + +sub renew { + my ($submgr_svc, $duration) = @_; + + my $result = $submgr_svc->Renew( { + TerminationTime => xs_duration($duration), # AbsoluteOrRelativeTimeType + },, + ); + die $result if not $result; +} + +sub events { + my ($localip, $localport) = @_; + + my $zm = _ZoneMinder->new(); + $zm->init(); + $zm->loadMonitors(); # call before fork() + + my %monitors = $zm->monitors(); + my $monitor_count = scalar keys(%monitors); + if ( $monitor_count == 0 ) { + Warning('No active ONVIF monitors found. Exiting'); + return; + } + Debug("Found $monitor_count active ONVIF monitors"); + Info('ONVIF Trigger daemon starting'); + + if ( !defined $localip ) { + #$localip = '192.168.0.2'; + #$localport = '0'; + } + + # re-use local address/port + # @LWP::Protocol::http::EXTRA_SOCK_OPTS = + *LWP::Protocol::http::_extra_sock_opts = sub { + # print "### extra_sock_opts ########################################\n"; + @EXTRA_SOCK_OPTS; + }; + + #*LWP::Protocol::http::_check_sock = sub + #{ + # my($self, $req, $sock) = @_; + # print "### check_sock ########################################\n"; + # dump($sock); + #}; + + my $daemon = start_daemon($localip, $localport, $zm); + my $port = $daemon->url; + $port =~ s|^.*:||; + $port =~ s|/.*$||; + my $localaddr = $localip . ':' . $port; + + Info('Daemon uses local address '.$localaddr); + + # This value is passed as the LocalAddr argument to IO::Socket::INET. + my $transport = SOAP::Transport::HTTP::Client->new( + # 'local_address' => $localaddr ); ## REUSE port + local_address => $localip ); + + foreach my $monitor (values(%monitors)) { + + my $client = $monitor->{onvif_client}; + my $event_svc = $client->get_endpoint('events'); + $event_svc->set_transport($transport); + # print "Sending from local address " . + # $event_svc->get_transport()->local_address . "\n"; + + my $submgr_svc = subscribe( + $client, $localaddr, 'tns1:RuleEngine//.', + SUBSCRIPTION_RENEW_INTERVAL, $monitor->{Id}); + + if ( !$submgr_svc ) { + Warning('Subscription failed for monitor #'.$monitor->{Id}); + next; + } + + $monitor->{submgr_svc} = $submgr_svc; + } # end foreach monitor + + while (1) { + Info('Sleeping for ' . (SUBSCRIPTION_RENEW_INTERVAL - SUBSCRIPTION_RENEW_EARLY).' seconds'); + sleep(SUBSCRIPTION_RENEW_INTERVAL - SUBSCRIPTION_RENEW_EARLY); + Info('Renewal'); + my %monitors = $zm->monitors(); + foreach my $monitor (values(%monitors)) { + if ( defined $monitor->{submgr_svc} ) { + renew($monitor->{submgr_svc}, SUBSCRIPTION_RENEW_INTERVAL + SUBSCRIPTION_RENEW_EARLY); + } + } + }; + + Info('ONVIF Trigger daemon exited'); + + %monitors = $zm->monitors(); + foreach my $monitor (values(%monitors)) { + if ( defined $monitor->{submgr_svc} ) { + unsubscribe($monitor->{submgr_svc}); + } + } +} # end sub events + +# ======================================================================== +# options processing + +sub HELP_MESSAGE { + my ($fh, $pkg, $ver, $opts) = @_; + print $fh "Usage: " . __FILE__ . " \n"; + print $fh <'zm_onvif-trigger'); +logSetSignal(); + +if ( !GetOptions( + 'local-addr|l=s' => \$localaddr, + 'script|s=s' => \$script, + 'verbose|v=s' => \$verbose, + )) { + HELP_MESSAGE(\*STDOUT); + exit(1); +} + +if ( defined $localaddr ) { + if ( $localaddr =~ /(.*):(.*)/ ) { + ($localip, $localport) = ($1, $2); + } else { + $localip = $localaddr; + $localport = '0'; + } +} + +events($localip, $localport); + +1; +__END__ + +=head1 NAME + +zmonvif-trigger.pl - ZoneMinder ONVIF trigger daemon + +=head1 SYNOPSIS + + zmonfig-trigger.pl [-v] [-s] [-l=] + + +=head1 DESCRIPTION + + +=head1 OPTIONS + + local-addr - local address to bind to + script|s=s - script to run + verbose|v=s - increase verbosity + +=cut + diff --git a/scripts/zmupdate.pl.in b/scripts/zmupdate.pl.in index 3662b6655..895e8bd64 100644 --- a/scripts/zmupdate.pl.in +++ b/scripts/zmupdate.pl.in @@ -121,6 +121,8 @@ GetOptions( my $dbh = zmDbConnect(undef, { mysql_multi_statements=>1 } ); $Config{ZM_DB_USER} = $dbUser; $Config{ZM_DB_PASS} = $dbPass; +# we escape dbpass with single quotes so that $ in the password has no effect, but dbpass could have a ' in it. +$dbPass =~ s/'/\\'/g; if ( ! ($check || $freshen || $rename || $zoneFix || $migrateEvents || $version) ) { if ( $Config{ZM_DYN_DB_VERSION} ) { @@ -384,21 +386,22 @@ if ( $version ) { my $command = 'mysqldump'; if ( defined($portOrSocket) ) { if ( $portOrSocket =~ /^\// ) { - $command .= " -S".$portOrSocket; + $command .= ' -S'.$portOrSocket; } else { - $command .= " -h".$host." -P".$portOrSocket; + $command .= ' -h'.$host.' -P'.$portOrSocket; } } else { - $command .= " -h".$host; + $command .= ' -h'.$host; } if ( $dbUser ) { $command .= ' -u'.$dbUser; - $command .= ' -p"'.$dbPass.'"' if $dbPass; + $command .= ' -p\''.$dbPass.'\'' if $dbPass; } - my $backup = "@ZM_TMPDIR@/".$Config{ZM_DB_NAME}."-".$version.".dump"; - $command .= " --add-drop-table --databases ".$Config{ZM_DB_NAME}." > ".$backup; - print( "Creating backup to $backup. This may take several minutes.\n" ); - print( "Executing '$command'\n" ) if ( logDebugging() ); + my $backup = '@ZM_TMPDIR@/'.$Config{ZM_DB_NAME}.'-'.$version.'.dump'; + $command .= ' --add-drop-table --databases '.$Config{ZM_DB_NAME}.' > '.$backup; + print("Creating backup to $backup. This may take several minutes.\n"); + ($command) = $command =~ /(.*)/; # detaint + print("Executing '$command'\n") if logDebugging(); my $output = qx($command); my $status = $? >> 8; if ( $status || logDebugging() ) { @@ -969,7 +972,7 @@ sub patchDB { my $dbh = shift; my $version = shift; - my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); + my ( $host, $portOrSocket ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ) if $Config{ZM_DB_HOST}; my $command = 'mysql'; if ( defined($portOrSocket) ) { if ( $portOrSocket =~ /^\// ) { @@ -977,12 +980,12 @@ sub patchDB { } else { $command .= ' -h'.$host.' -P'.$portOrSocket; } - } else { + } elsif ( $host ) { $command .= ' -h'.$host; } if ( $dbUser ) { $command .= ' -u'.$dbUser; - $command .= ' -p"'.$dbPass.'"' if $dbPass; + $command .= ' -p\''.$dbPass.'\'' if $dbPass; } $command .= ' '.$Config{ZM_DB_NAME}.' < '; if ( $updateDir ) { @@ -993,6 +996,7 @@ sub patchDB { $command .= '/zm_update-'.$version.'.sql'; print("Executing '$command'\n") if logDebugging(); + ($command) = $command =~ /(.*)/; # detaint my $output = qx($command); my $status = $? >> 8; if ( $status || logDebugging() ) { diff --git a/src/zm.h b/src/zm.h index ad0f89584..60fa67711 100644 --- a/src/zm.h +++ b/src/zm.h @@ -22,6 +22,7 @@ #define ZM_H #include "zm_config.h" +#include "zm_signal.h" #ifdef SOLARIS #undef DEFAULT_TYPE // pthread defines this which breaks StreamType DEFAULT_TYPE #include // define strerror() and friends diff --git a/src/zm_db.cpp b/src/zm_db.cpp index 8e6258b0b..35982ce50 100644 --- a/src/zm_db.cpp +++ b/src/zm_db.cpp @@ -81,10 +81,11 @@ bool zmDbConnect() { void zmDbClose() { if ( zmDbConnected ) { db_mutex.lock(); - mysql_close( &dbconn ); + mysql_close(&dbconn); // mysql_init() call implicitly mysql_library_init() but // mysql_close() does not call mysql_library_end() - mysql_library_end(); + // We get segfaults and a hang when we call this. So just don't. + //mysql_library_end(); zmDbConnected = false; db_mutex.unlock(); } @@ -96,6 +97,12 @@ MYSQL_RES * zmDbFetch(const char * query) { return NULL; } db_mutex.lock(); + // Might have been disconnected while we waited for the lock + if ( !zmDbConnected ) { + db_mutex.unlock(); + Error("Not connected."); + return NULL; + } if ( mysql_query(&dbconn, query) ) { db_mutex.unlock(); diff --git a/src/zm_event.cpp b/src/zm_event.cpp index 7605f1ca9..69d430d86 100644 --- a/src/zm_event.cpp +++ b/src/zm_event.cpp @@ -671,8 +671,9 @@ void Event::AddFrame(Image *image, struct timeval timestamp, int score, Image *a if ( db_frame ) { static char sql[ZM_SQL_MED_BUFSIZ]; + // The idea is to write out 1/sec frame_data.push(new Frame(id, frames, frame_type, timestamp, delta_time, score)); - if ( write_to_db || ( frame_data.size() > 20 ) ) { + if ( write_to_db || (frame_data.size() > (int)monitor->get_fps()) ) { Debug(1, "Adding %d frames to DB", frame_data.size()); WriteDbFrames(); last_db_frame = frames; diff --git a/src/zm_eventstream.cpp b/src/zm_eventstream.cpp index c65bf7445..3bcce223e 100644 --- a/src/zm_eventstream.cpp +++ b/src/zm_eventstream.cpp @@ -714,11 +714,9 @@ bool EventStream::sendFrame(int delta_us) { Image *image = NULL; if ( filepath[0] ) { -Debug(1, "Loading image"); image = new Image(filepath); } else if ( ffmpeg_input ) { // Get the frame from the mp4 input - Debug(1,"Getting frame from ffmpeg"); FrameData *frame_data = &event_data->frames[curr_frame_id-1]; AVFrame *frame = ffmpeg_input->get_frame( ffmpeg_input->get_video_stream_id(), @@ -767,7 +765,11 @@ Debug(1, "Loading image"); switch ( type ) { case STREAM_JPEG : - send_image->EncodeJpeg(img_buffer, &img_buffer_size); + if ( send_image->EncodeJpeg(img_buffer, &img_buffer_size) ) { + Debug(1, "encoded JPEG"); + } else { + // Failed + } break; case STREAM_ZIP : #if HAVE_ZLIB_H @@ -787,10 +789,6 @@ Debug(1, "Loading image"); Fatal("Unexpected frame type %d", type); break; } - if ( send_image != image ) { - delete send_image; - send_image = NULL; - } delete image; image = NULL; } // end if send_raw or not @@ -815,7 +813,7 @@ Debug(1, "Loading image"); fprintf(stdout, "Content-Length: %d\r\n\r\n", (int)filestat.st_size); if ( zm_sendfile(fileno(stdout), fileno(fdj), 0, (int)filestat.st_size) != (int)filestat.st_size ) { /* sendfile() failed, use standard way instead */ - img_buffer_size = fread( img_buffer, 1, sizeof(temp_img_buffer), fdj ); + img_buffer_size = fread(img_buffer, 1, sizeof(temp_img_buffer), fdj); if ( fwrite(img_buffer, img_buffer_size, 1, stdout) != 1 ) { fclose(fdj); /* Close the file handle */ Error("Unable to send raw frame %u: %s", curr_frame_id, strerror(errno)); diff --git a/src/zm_ffmpeg.cpp b/src/zm_ffmpeg.cpp index 1631749fb..a92f38652 100644 --- a/src/zm_ffmpeg.cpp +++ b/src/zm_ffmpeg.cpp @@ -468,7 +468,7 @@ void av_packet_rescale_ts( } #endif -bool is_video_stream( AVStream * stream ) { +bool is_video_stream(const AVStream * stream) { #if LIBAVCODEC_VERSION_CHECK(57, 64, 0, 64, 0) if ( stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ) { #else @@ -480,10 +480,14 @@ bool is_video_stream( AVStream * stream ) { #endif return true; } + #if LIBAVCODEC_VERSION_CHECK(57, 64, 0, 64, 0) + Debug(2, "Not a video type %d != %d", stream->codecpar->codec_type, AVMEDIA_TYPE_VIDEO); + #endif + return false; } -bool is_video_context( AVCodecContext *codec_context ) { +bool is_video_context(const AVCodecContext *codec_context ) { return #if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) ( codec_context->codec_type == AVMEDIA_TYPE_VIDEO ); @@ -492,7 +496,7 @@ bool is_video_context( AVCodecContext *codec_context ) { #endif } -bool is_audio_stream( AVStream * stream ) { +bool is_audio_stream(const AVStream * stream ) { #if LIBAVCODEC_VERSION_CHECK(57, 64, 0, 64, 0) if ( stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO ) { #else @@ -507,7 +511,7 @@ bool is_audio_stream( AVStream * stream ) { return false; } -bool is_audio_context( AVCodecContext *codec_context ) { +bool is_audio_context(const AVCodecContext *codec_context ) { return #if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) ( codec_context->codec_type == AVMEDIA_TYPE_AUDIO ); diff --git a/src/zm_ffmpeg.h b/src/zm_ffmpeg.h index 73afff3e3..4705b707c 100644 --- a/src/zm_ffmpeg.h +++ b/src/zm_ffmpeg.h @@ -372,10 +372,10 @@ void zm_dump_codecpar(const AVCodecParameters *par); int check_sample_fmt(AVCodec *codec, enum AVSampleFormat sample_fmt); -bool is_video_stream(AVStream *); -bool is_audio_stream(AVStream *); -bool is_video_context(AVCodec *); -bool is_audio_context(AVCodec *); +bool is_video_stream(const AVStream *); +bool is_audio_stream(const AVStream *); +bool is_video_context(const AVCodec *); +bool is_audio_context(const AVCodec *); int zm_receive_packet(AVCodecContext *context, AVPacket &packet); diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index ea13f9382..11c25addc 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -148,6 +148,7 @@ FfmpegCamera::FfmpegCamera( have_video_keyframe = false; packetqueue = NULL; error_count = 0; + use_hwaccel = true; #if HAVE_LIBAVUTIL_HWCONTEXT_H hwFrame = NULL; hw_device_ctx = NULL; @@ -471,7 +472,7 @@ int FfmpegCamera::OpenFfmpeg() { zm_dump_stream_format(mFormatContext, mVideoStreamId, 0, 0); - if ( hwaccel_name != "" ) { + if ( use_hwaccel && (hwaccel_name != "") ) { #if HAVE_LIBAVUTIL_HWCONTEXT_H // 3.2 doesn't seem to have all the bits in place, so let's require 3.3 and up #if LIBAVCODEC_VERSION_CHECK(57, 89, 0, 89, 0) @@ -503,8 +504,9 @@ int FfmpegCamera::OpenFfmpeg() { hw_pix_fmt = config->pix_fmt; break; } else { - Debug(1, "decoder %s hwConfig doesn't match our type: %s, pix_fmt %s.", + Debug(1, "decoder %s hwConfig doesn't match our type: %s != %s, pix_fmt %s.", mVideoCodec->name, + av_hwdevice_get_type_name(type), av_hwdevice_get_type_name(config->device_type), av_get_pix_fmt_name(config->pix_fmt) ); @@ -973,6 +975,12 @@ int FfmpegCamera::CaptureAndRecord( Error("Error count over 100, going to close and re-open stream"); return -1; } +#if HAVE_LIBAVUTIL_HWCONTEXT_H + if ( (ret == AVERROR_INVALIDDATA ) && (hw_pix_fmt != AV_PIX_FMT_NONE) ) { + use_hwaccel = false; + return -1; + } +#endif } zm_av_packet_unref(&packet); continue; diff --git a/src/zm_ffmpeg_camera.h b/src/zm_ffmpeg_camera.h index 7a6439ee4..badf90834 100644 --- a/src/zm_ffmpeg_camera.h +++ b/src/zm_ffmpeg_camera.h @@ -60,6 +60,7 @@ class FfmpegCamera : public Camera { AVFrame *input_frame; // Use to point to mRawFrame or hwFrame; AVFrame *hwFrame; // Will also be used to indicate if hwaccel is in use + bool use_hwaccel; //will default to on if hwaccel specified, will get turned off if there is a failure #if HAVE_LIBAVUTIL_HWCONTEXT_H AVBufferRef *hw_device_ctx = NULL; #endif diff --git a/src/zm_image.cpp b/src/zm_image.cpp index 31c71037f..02cdd1ad8 100644 --- a/src/zm_image.cpp +++ b/src/zm_image.cpp @@ -1905,11 +1905,11 @@ void Image::MaskPrivacy( const unsigned char *p_bitmask, const Rgb pixel_colour /* RGB32 compatible: complete */ void Image::Annotate( const char *p_text, const Coord &coord, const unsigned int size, const Rgb fg_colour, const Rgb bg_colour ) { - strncpy( text, p_text, sizeof(text)-1 ); + strncpy(text, p_text, sizeof(text)-1); unsigned int index = 0; unsigned int line_no = 0; - unsigned int text_len = strlen( text ); + unsigned int text_len = strlen(text); unsigned int line_len = 0; const char *line = text; @@ -1928,10 +1928,10 @@ void Image::Annotate( const char *p_text, const Coord &coord, const unsigned int const bool bg_trans = (bg_colour == RGB_TRANSPARENT); int zm_text_bitmask = 0x80; - if (size == 2) + if ( size == 2 ) zm_text_bitmask = 0x8000; - while ( (index < text_len) && (line_len = strcspn( line, "\n" )) ) { + while ( (index < text_len) && (line_len = strcspn(line, "\n")) ) { unsigned int line_width = line_len * ZM_CHAR_WIDTH * size; @@ -1967,10 +1967,19 @@ void Image::Annotate( const char *p_text, const Coord &coord, const unsigned int unsigned char *temp_ptr = ptr; for ( unsigned int x = lo_line_x, c = 0; x < hi_line_x && c < line_len; c++ ) { int f; - if (size == 2) + if ( size == 2 ) { + if ( (line[c] * ZM_CHAR_HEIGHT * size) + r > sizeof(bigfontdata) ) { + Warning("Unsupported character %c in %s", line[c], line); + continue; + } f = bigfontdata[(line[c] * ZM_CHAR_HEIGHT * size) + r]; - else + } else { + if ( (line[c] * ZM_CHAR_HEIGHT) + r > sizeof(fontdata) ) { + Warning("Unsupported character %c in %s", line[c], line); + continue; + } f = fontdata[(line[c] * ZM_CHAR_HEIGHT) + r]; + } for ( unsigned int i = 0; i < (ZM_CHAR_WIDTH * size) && x < hi_line_x; i++, x++, temp_ptr++ ) { if ( f & (zm_text_bitmask >> i) ) { if ( !fg_trans ) @@ -1989,10 +1998,19 @@ void Image::Annotate( const char *p_text, const Coord &coord, const unsigned int unsigned char *temp_ptr = ptr; for ( unsigned int x = lo_line_x, c = 0; x < hi_line_x && c < line_len; c++ ) { int f; - if (size == 2) + if ( size == 2 ) { + if ( (line[c] * ZM_CHAR_HEIGHT * size) + r > sizeof(bigfontdata) ) { + Warning("Unsupported character %c in %s", line[c], line); + continue; + } f = bigfontdata[(line[c] * ZM_CHAR_HEIGHT * size) + r]; - else + } else { + if ( (line[c] * ZM_CHAR_HEIGHT) + r > sizeof(fontdata) ) { + Warning("Unsupported character %c in %s", line[c], line); + continue; + } f = fontdata[(line[c] * ZM_CHAR_HEIGHT) + r]; + } for ( unsigned int i = 0; i < (ZM_CHAR_WIDTH * size) && x < hi_line_x; i++, x++, temp_ptr += colours ) { if ( f & (zm_text_bitmask >> i) ) { if ( !fg_trans ) { @@ -2016,10 +2034,19 @@ void Image::Annotate( const char *p_text, const Coord &coord, const unsigned int Rgb* temp_ptr = (Rgb*)ptr; for ( unsigned int x = lo_line_x, c = 0; x < hi_line_x && c < line_len; c++ ) { int f; - if (size == 2) + if ( size == 2 ) { + if ( (line[c] * ZM_CHAR_HEIGHT * size) + r > sizeof(bigfontdata) ) { + Warning("Unsupported character %c in %s", line[c], line); + continue; + } f = bigfontdata[(line[c] * ZM_CHAR_HEIGHT * size) + r]; - else + } else { + if ( (line[c] * ZM_CHAR_HEIGHT) + r > sizeof(fontdata) ) { + Warning("Unsupported character %c in %s", line[c], line); + continue; + } f = fontdata[(line[c] * ZM_CHAR_HEIGHT) + r]; + } for ( unsigned int i = 0; i < (ZM_CHAR_WIDTH * size) && x < hi_line_x; i++, x++, temp_ptr++ ) { if ( f & (zm_text_bitmask >> i) ) { if ( !fg_trans ) { diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index ec5e9ac97..d995d4f06 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -552,14 +552,18 @@ bool Monitor::connect() { snprintf(mem_file, sizeof(mem_file), "%s/zm.mmap.%d", staticConfig.PATH_MAP.c_str(), id); map_fd = open(mem_file, O_RDWR|O_CREAT, (mode_t)0600); if ( map_fd < 0 ) { - Fatal("Can't open memory map file %s, probably not enough space free: %s", mem_file, strerror(errno)); + Error("Can't open memory map file %s, probably not enough space free: %s", mem_file, strerror(errno)); + return false; } else { Debug(3, "Success opening mmap file at (%s)", mem_file); } struct stat map_stat; - if ( fstat(map_fd, &map_stat) < 0 ) - Fatal("Can't stat memory map file %s: %s, is the zmc process for this monitor running?", mem_file, strerror(errno)); + if ( fstat(map_fd, &map_stat) < 0 ) { + Error("Can't stat memory map file %s: %s, is the zmc process for this monitor running?", mem_file, strerror(errno)); + close(map_fd); + return false; + } if ( map_stat.st_size != mem_size ) { if ( purpose == CAPTURE ) { diff --git a/src/zm_monitor.h b/src/zm_monitor.h index e1d66950c..13fe34619 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -547,6 +547,9 @@ public: #if HAVE_LIBAVCODEC //void StreamMpeg( const char *format, int scale=100, int maxfps=10, int bitrate=100000 ); #endif // HAVE_LIBAVCODEC + double get_fps( ) const { + return fps; + } }; #define MOD_ADD( var, delta, limit ) (((var)+(limit)+(delta))%(limit)) diff --git a/src/zm_remote_camera_rtsp.cpp b/src/zm_remote_camera_rtsp.cpp index ee308c30e..b011c742d 100644 --- a/src/zm_remote_camera_rtsp.cpp +++ b/src/zm_remote_camera_rtsp.cpp @@ -151,11 +151,13 @@ int RemoteCameraRtsp::Disconnect() { int RemoteCameraRtsp::PrimeCapture() { Debug(2, "Waiting for sources"); - for ( int i = 0; i < 100 && !rtspThread->hasSources(); i++ ) { + for ( int i = 0; (i < 100) && !rtspThread->hasSources(); i++ ) { usleep(100000); } - if ( !rtspThread->hasSources() ) - Fatal("No RTSP sources"); + if ( !rtspThread->hasSources() ) { + Error("No RTSP sources"); + return -1; + } Debug(2, "Got sources"); @@ -167,38 +169,21 @@ int RemoteCameraRtsp::PrimeCapture() { // Find the first video stream. for ( unsigned int i = 0; i < mFormatContext->nb_streams; i++ ) { -#if LIBAVCODEC_VERSION_CHECK(57, 64, 0, 64, 0) - AVMediaType codec_type = mFormatContext->streams[i]->codecpar->codec_type; -#else - AVMediaType codec_type = mFormatContext->streams[i]->codec->codec_type; -#endif - -#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) - if ( codec_type == AVMEDIA_TYPE_VIDEO ) -#else - if ( codec_type == CODEC_TYPE_VIDEO ) -#endif - { + if ( is_video_stream(mFormatContext->streams[i]) ) { if ( mVideoStreamId == -1 ) { mVideoStreamId = i; continue; } else { Debug(2, "Have another video stream."); } - } else -#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) - if ( codec_type == AVMEDIA_TYPE_AUDIO ) -#else - if ( codec_type == CODEC_TYPE_AUDIO ) -#endif - { + } else if ( is_audio_stream(mFormatContext->streams[i]) ) { if ( mAudioStreamId == -1 ) { mAudioStreamId = i; } else { Debug(2, "Have another audio stream."); } } else { - Debug(1, "Have unknown codec type in stream %d : %d", i, codec_type); + Debug(1, "Have unknown codec type in stream %d", i); } } // end foreach stream @@ -288,7 +273,6 @@ int RemoteCameraRtsp::Capture( Image &image ) { if ( rtspThread->getFrame(buffer) ) { Debug(3, "Read frame %d bytes", buffer.size()); - Debug(4, "Address %p", buffer.head()); Hexdump(4, buffer.head(), 16); if ( !buffer.size() ) @@ -310,14 +294,15 @@ int RemoteCameraRtsp::Capture( Image &image ) { // IDR buffer += lastSps; buffer += lastPps; + } else { + Debug(2, "Unknown nalType %d", nalType); } } else { Debug(3, "Not an h264 packet"); } av_init_packet(&packet); - - while ( !frameComplete && (buffer.size() > 0) ) { + while ( (!frameComplete) && (buffer.size() > 0) ) { packet.data = buffer.head(); packet.size = buffer.size(); bytes += packet.size; @@ -330,6 +315,7 @@ int RemoteCameraRtsp::Capture( Image &image ) { buffer.clear(); continue; } + frameComplete = true; Debug(2, "Frame: %d - %d/%d", frameCount, len, buffer.size()); //if ( buffer.size() < 400 ) //Hexdump( 0, buffer.head(), buffer.size() ); diff --git a/src/zm_rtp_data.cpp b/src/zm_rtp_data.cpp index 4fbf0cd04..de7c732d3 100644 --- a/src/zm_rtp_data.cpp +++ b/src/zm_rtp_data.cpp @@ -27,98 +27,81 @@ #include -RtpDataThread::RtpDataThread( RtspThread &rtspThread, RtpSource &rtpSource ) : mRtspThread( rtspThread ), mRtpSource( rtpSource ), mStop( false ) +RtpDataThread::RtpDataThread(RtspThread &rtspThread, RtpSource &rtpSource) : + mRtspThread(rtspThread), mRtpSource(rtpSource), mStop(false) { } -bool RtpDataThread::recvPacket( const unsigned char *packet, size_t packetLen ) -{ +bool RtpDataThread::recvPacket(const unsigned char *packet, size_t packetLen) { const RtpDataHeader *rtpHeader; rtpHeader = (RtpDataHeader *)packet; - //printf( "D: " ); - //for ( int i = 0; i < 32; i++ ) - //printf( "%02x ", (unsigned char)packet[i] ); - //printf( "\n" ); - - Debug( 5, "Ver: %d", rtpHeader->version ); - Debug( 5, "P: %d", rtpHeader->p ); - Debug( 5, "Pt: %d", rtpHeader->pt ); - Debug( 5, "Mk: %d", rtpHeader->m ); - Debug( 5, "Seq: %d", ntohs(rtpHeader->seqN) ); - Debug( 5, "T/S: %x", ntohl(rtpHeader->timestampN) ); - Debug( 5, "SSRC: %x", ntohl(rtpHeader->ssrcN) ); + Debug(5, "Ver: %d P: %d Pt: %d Mk: %d Seq: %d T/S: %x SSRC: %x", + rtpHeader->version, + rtpHeader->p, + rtpHeader->pt, + rtpHeader->m, + ntohs(rtpHeader->seqN), + ntohl(rtpHeader->timestampN), + ntohl(rtpHeader->ssrcN)); //unsigned short seq = ntohs(rtpHeader->seqN); unsigned long ssrc = ntohl(rtpHeader->ssrcN); - if ( mRtpSource.getSsrc() && (ssrc != mRtpSource.getSsrc()) ) - { - Warning( "Discarding packet for unrecognised ssrc %lx", ssrc ); - return( false ); + if ( mRtpSource.getSsrc() && (ssrc != mRtpSource.getSsrc()) ) { + Warning("Discarding packet for unrecognised ssrc %lx", ssrc); + return false; } - return( mRtpSource.handlePacket( packet, packetLen ) ); + return mRtpSource.handlePacket(packet, packetLen); } -int RtpDataThread::run() -{ - Debug( 2, "Starting data thread %d on port %d", mRtpSource.getSsrc(), mRtpSource.getLocalDataPort() ); +int RtpDataThread::run() { + Debug(2, "Starting data thread %d on port %d", + mRtpSource.getSsrc(), mRtpSource.getLocalDataPort()); SockAddrInet localAddr; UdpInetServer rtpDataSocket; if ( mRtpSource.getLocalHost() != "" ) { - if ( !rtpDataSocket.bind( mRtpSource.getLocalHost().c_str(), mRtpSource.getLocalDataPort() ) ) - Fatal( "Failed to bind RTP server" ); - Debug( 3, "Bound to %s:%d", mRtpSource.getLocalHost().c_str(), mRtpSource.getLocalDataPort() ); - } - else - { - if ( !rtpDataSocket.bind( mRtspThread.getAddressFamily() == AF_INET6 ? "::" : "0.0.0.0", mRtpSource.getLocalDataPort() ) ) - Fatal( "Failed to bind RTP server" ); - Debug( 3, "Bound to %s:%d", mRtpSource.getLocalHost().c_str(), mRtpSource.getLocalDataPort() ); + if ( !rtpDataSocket.bind(mRtpSource.getLocalHost().c_str(), mRtpSource.getLocalDataPort()) ) + Fatal("Failed to bind RTP server"); + } else { + if ( !rtpDataSocket.bind( + mRtspThread.getAddressFamily() == AF_INET6 ? "::" : "0.0.0.0", + mRtpSource.getLocalDataPort() ) ) + Fatal("Failed to bind RTP server"); } + Debug(3, "Bound to %s:%d", mRtpSource.getLocalHost().c_str(), mRtpSource.getLocalDataPort()); - Select select( 3 ); - select.addReader( &rtpDataSocket ); + Select select(3); + select.addReader(&rtpDataSocket); unsigned char buffer[ZM_NETWORK_BUFSIZ]; - while ( !mStop && select.wait() >= 0 ) - { - if ( mStop ) - break; + while ( !zm_terminate && !mStop && (select.wait() >= 0) ) { Select::CommsList readable = select.getReadable(); - if ( readable.size() == 0 ) - { - Error( "RTP timed out" ); + if ( readable.size() == 0 ) { + Error("RTP timed out"); mStop = true; break; } - for ( Select::CommsList::iterator iter = readable.begin(); iter != readable.end(); ++iter ) - { - if ( UdpInetServer *socket = dynamic_cast(*iter) ) - { - int nBytes = socket->recv( buffer, sizeof(buffer) ); - Debug( 4, "Got %d bytes on sd %d", nBytes, socket->getReadDesc() ); - if ( nBytes ) - { - recvPacket( buffer, nBytes ); - } - else - { + for ( Select::CommsList::iterator iter = readable.begin(); iter != readable.end(); ++iter ) { + if ( UdpInetServer *socket = dynamic_cast(*iter) ) { + int nBytes = socket->recv(buffer, sizeof(buffer)); + Debug(4, "Got %d bytes on sd %d", nBytes, socket->getReadDesc()); + if ( nBytes ) { + recvPacket(buffer, nBytes); + } else { mStop = true; break; } + } else { + Panic("Barfed"); } - else - { - Panic( "Barfed" ); - } - } + } // end foreach commsList } rtpDataSocket.close(); mRtspThread.stop(); - return( 0 ); + return 0; } #endif // HAVE_LIBAVFORMAT diff --git a/src/zm_rtp_source.cpp b/src/zm_rtp_source.cpp index 131d32d7e..0ac963947 100644 --- a/src/zm_rtp_source.cpp +++ b/src/zm_rtp_source.cpp @@ -37,25 +37,25 @@ RtpSource::RtpSource( uint32_t rtpClock, uint32_t rtpTime, _AVCODECID codecId ) : - mId( id ), - mSsrc( ssrc ), - mLocalHost( localHost ), - mRemoteHost( remoteHost ), - mRtpClock( rtpClock ), - mCodecId( codecId ), - mFrame( 65536 ), - mFrameCount( 0 ), - mFrameGood( true ), - mFrameReady( false ), - mFrameProcessed( false ) + mId(id), + mSsrc(ssrc), + mLocalHost(localHost), + mRemoteHost(remoteHost), + mRtpClock(rtpClock), + mCodecId(codecId), + mFrame(65536), + mFrameCount(0), + mFrameGood(true), + mFrameReady(false), + mFrameProcessed(false) { char hostname[256] = ""; - gethostname( hostname, sizeof(hostname) ); + gethostname(hostname, sizeof(hostname)); - mCname = stringtf( "zm-%d@%s", mId, hostname ); - Debug( 3, "RTP CName = %s", mCname.c_str() ); + mCname = stringtf("zm-%d@%s", mId, hostname); + Debug(3, "RTP CName = %s", mCname.c_str()); - init( seq ); + init(seq); mMaxSeq = seq - 1; mProbation = MIN_SEQUENTIAL; @@ -79,7 +79,7 @@ RtpSource::RtpSource( Warning("The device is using a codec (%d) that may not be supported. Do not be surprised if things don't work.", mCodecId); } -void RtpSource::init( uint16_t seq ) { +void RtpSource::init(uint16_t seq) { Debug(3, "Initialising sequence"); mBaseSeq = seq; mMaxSeq = seq; @@ -93,36 +93,36 @@ void RtpSource::init( uint16_t seq ) { mTransit = 0; } -bool RtpSource::updateSeq( uint16_t seq ) { +bool RtpSource::updateSeq(uint16_t seq) { uint16_t uDelta = seq - mMaxSeq; // Source is not valid until MIN_SEQUENTIAL packets with // sequential sequence numbers have been received. - Debug( 5, "Seq: %d", seq ); + Debug(5, "Seq: %d", seq); if ( mProbation) { // packet is in sequence - if ( seq == mMaxSeq + 1) { - Debug( 3, "Sequence in probation %d, in sequence", mProbation ); + if ( seq == mMaxSeq + 1 ) { + Debug(3, "Sequence in probation %d, in sequence", mProbation); mProbation--; mMaxSeq = seq; if ( mProbation == 0 ) { - init( seq ); + init(seq); mReceivedPackets++; - return( true ); + return true; } } else { - Warning( "Sequence in probation %d, out of sequence", mProbation ); + Warning("Sequence in probation %d, out of sequence", mProbation); mProbation = MIN_SEQUENTIAL - 1; mMaxSeq = seq; - return( false ); + return false; } - return( true ); + return true; } else if ( uDelta < MAX_DROPOUT ) { if ( uDelta == 1 ) { - Debug( 4, "Packet in sequence, gap %d", uDelta ); + Debug(4, "Packet in sequence, gap %d", uDelta); } else { - Warning( "Packet in sequence, gap %d", uDelta ); + Warning("Packet in sequence, gap %d", uDelta); } // in order, with permissible gap @@ -132,22 +132,22 @@ bool RtpSource::updateSeq( uint16_t seq ) { } mMaxSeq = seq; } else if ( uDelta <= RTP_SEQ_MOD - MAX_MISORDER ) { - Warning( "Packet out of sequence, gap %d", uDelta ); + Warning("Packet out of sequence, gap %d", uDelta); // the sequence number made a very large jump if ( seq == mBadSeq ) { - Debug( 3, "Restarting sequence" ); + Debug(3, "Restarting sequence"); // Two sequential packets -- assume that the other side // restarted without telling us so just re-sync // (i.e., pretend this was the first packet). - init( seq ); + init(seq); } else { mBadSeq = (seq + 1) & (RTP_SEQ_MOD-1); - return( false ); + return false; } } else { - Warning( "Packet duplicate or reordered, gap %d", uDelta ); + Warning("Packet duplicate or reordered, gap %d", uDelta); // duplicate or reordered packet - return( false ); + return false; } mReceivedPackets++; return( uDelta==1?true:false ); @@ -155,17 +155,22 @@ bool RtpSource::updateSeq( uint16_t seq ) { void RtpSource::updateJitter( const RtpDataHeader *header ) { if ( mRtpFactor > 0 ) { - Debug( 5, "Delta rtp = %.6f", tvDiffSec( mBaseTimeReal ) ); - uint32_t localTimeRtp = mBaseTimeRtp + uint32_t( tvDiffSec( mBaseTimeReal ) * mRtpFactor ); - Debug( 5, "Local RTP time = %x", localTimeRtp ); - Debug( 5, "Packet RTP time = %x", ntohl(header->timestampN) ); + uint32_t localTimeRtp = mBaseTimeRtp + uint32_t(tvDiffSec(mBaseTimeReal) * mRtpFactor); uint32_t packetTransit = localTimeRtp - ntohl(header->timestampN); - Debug( 5, "Packet transit RTP time = %x", packetTransit ); + + Debug(5, "Delta rtp = %.6f\n" + "Local RTP time = %x", + "Packet RTP time = %x", + "Packet transit RTP time = %x", + tvDiffSec(mBaseTimeReal), + localTimeRtp, + ntohl(header->timestampN), + packetTransit); if ( mTransit > 0 ) { // Jitter int d = packetTransit - mTransit; - Debug( 5, "Jitter D = %d", d ); + Debug(5, "Jitter D = %d", d); if ( d < 0 ) d = -d; //mJitter += (1./16.) * ((double)d - mJitter); @@ -175,32 +180,33 @@ void RtpSource::updateJitter( const RtpDataHeader *header ) { } else { mJitter = 0; } - Debug( 5, "RTP Jitter: %d", mJitter ); + Debug(5, "RTP Jitter: %d", mJitter); } -void RtpSource::updateRtcpData( uint32_t ntpTimeSecs, uint32_t ntpTimeFrac, uint32_t rtpTime ) { - struct timeval ntpTime = tvMake( ntpTimeSecs, suseconds_t((USEC_PER_SEC*(ntpTimeFrac>>16))/(1<<16)) ); +void RtpSource::updateRtcpData( + uint32_t ntpTimeSecs, + uint32_t ntpTimeFrac, + uint32_t rtpTime) { + struct timeval ntpTime = tvMake(ntpTimeSecs, suseconds_t((USEC_PER_SEC*(ntpTimeFrac>>16))/(1<<16))); - Debug( 5, "ntpTime: %ld.%06ld, rtpTime: %x", ntpTime.tv_sec, ntpTime.tv_usec, rtpTime ); + Debug(5, "ntpTime: %ld.%06ld, rtpTime: %x", ntpTime.tv_sec, ntpTime.tv_usec, rtpTime); if ( mBaseTimeNtp.tv_sec == 0 ) { mBaseTimeReal = tvNow(); mBaseTimeNtp = ntpTime; mBaseTimeRtp = rtpTime; } else if ( !mRtpClock ) { - Debug( 5, "lastSrNtpTime: %ld.%06ld, rtpTime: %x", mLastSrTimeNtp.tv_sec, mLastSrTimeNtp.tv_usec, rtpTime ); - Debug( 5, "ntpTime: %ld.%06ld, rtpTime: %x", ntpTime.tv_sec, ntpTime.tv_usec, rtpTime ); + Debug(5, "lastSrNtpTime: %ld.%06ld, rtpTime: %x" + "ntpTime: %ld.%06ld, rtpTime: %x", + mLastSrTimeNtp.tv_sec, mLastSrTimeNtp.tv_usec, rtpTime, + ntpTime.tv_sec, ntpTime.tv_usec, rtpTime); double diffNtpTime = tvDiffSec( mBaseTimeNtp, ntpTime ); uint32_t diffRtpTime = rtpTime - mBaseTimeRtp; - - //Debug( 5, "Real-diff: %.6f", diffRealTime ); - Debug( 5, "NTP-diff: %.6f", diffNtpTime ); - Debug( 5, "RTP-diff: %d", diffRtpTime ); - mRtpFactor = (uint32_t)(diffRtpTime / diffNtpTime); - Debug( 5, "RTPfactor: %d", mRtpFactor ); + Debug( 5, "NTP-diff: %.6f RTP-diff: %d RTPfactor: %d", + diffNtpTime, diffRtpTime, mRtpFactor); } mLastSrTimeNtpSecs = ntpTimeSecs; mLastSrTimeNtpFrac = ntpTimeFrac; @@ -211,31 +217,37 @@ void RtpSource::updateRtcpData( uint32_t ntpTimeSecs, uint32_t ntpTimeFrac, uint void RtpSource::updateRtcpStats() { uint32_t extendedMax = mCycles + mMaxSeq; mExpectedPackets = extendedMax - mBaseSeq + 1; - - Debug( 5, "Expected packets = %d", mExpectedPackets ); - // The number of packets lost is defined to be the number of packets // expected less the number of packets actually received: mLostPackets = mExpectedPackets - mReceivedPackets; - Debug( 5, "Lost packets = %d", mLostPackets ); - uint32_t expectedInterval = mExpectedPackets - mExpectedPrior; - Debug( 5, "Expected interval = %d", expectedInterval ); mExpectedPrior = mExpectedPackets; uint32_t receivedInterval = mReceivedPackets - mReceivedPrior; - Debug( 5, "Received interval = %d", receivedInterval ); mReceivedPrior = mReceivedPackets; uint32_t lostInterval = expectedInterval - receivedInterval; - Debug( 5, "Lost interval = %d", lostInterval ); if ( expectedInterval == 0 || lostInterval <= 0 ) mLostFraction = 0; else mLostFraction = (lostInterval << 8) / expectedInterval; - Debug( 5, "Lost fraction = %d", mLostFraction ); + + Debug(5, + "Expected packets = %d\n", + "Lost packets = %d\n", + "Expected interval = %d\n", + "Received interval = %d\n", + "Lost interval = %d\n", + "Lost fraction = %d\n", + + mExpectedPackets, + mLostPackets, + expectedInterval, + receivedInterval, + lostInterval, + mLostFraction); } -bool RtpSource::handlePacket( const unsigned char *packet, size_t packetLen ) { +bool RtpSource::handlePacket(const unsigned char *packet, size_t packetLen) { const RtpDataHeader *rtpHeader; rtpHeader = (RtpDataHeader *)packet; int rtpHeaderSize = 12 + rtpHeader->cc * 4; @@ -248,15 +260,15 @@ bool RtpSource::handlePacket( const unsigned char *packet, size_t packetLen ) { // that there is no marker bit by changing the number of bits in the payload type field. bool thisM = rtpHeader->m || h264FragmentEnd; - if ( updateSeq( ntohs(rtpHeader->seqN) ) ) { - Hexdump( 4, packet+rtpHeaderSize, 16 ); + if ( updateSeq(ntohs(rtpHeader->seqN)) ) { + Hexdump(4, packet+rtpHeaderSize, 16); if ( mFrameGood ) { int extraHeader = 0; if ( mCodecId == AV_CODEC_ID_H264 ) { int nalType = (packet[rtpHeaderSize] & 0x1f); - Debug( 3, "Have H264 frame: nal type is %d", nalType ); + Debug(3, "Have H264 frame: nal type is %d", nalType); switch (nalType) { case 24: // STAP-A @@ -281,45 +293,46 @@ bool RtpSource::handlePacket( const unsigned char *packet, size_t packetLen ) { extraHeader = 2; break; default: - Debug(3, "Unhandled nalType %d", nalType ); + Debug(3, "Unhandled nalType %d", nalType); } // Append NAL frame start code if ( !mFrame.size() ) - mFrame.append( "\x0\x0\x1", 3 ); + mFrame.append("\x0\x0\x1", 3); } // end if H264 - mFrame.append( packet+rtpHeaderSize+extraHeader, packetLen-rtpHeaderSize-extraHeader ); + mFrame.append(packet+rtpHeaderSize+extraHeader, + packetLen-rtpHeaderSize-extraHeader); } else { - Debug( 3, "NOT H264 frame: type is %d", mCodecId ); + Debug(3, "NOT H264 frame: type is %d", mCodecId); } - Hexdump( 4, mFrame.head(), 16 ); + Hexdump(4, mFrame.head(), 16); if ( thisM ) { if ( mFrameGood ) { - Debug( 3, "Got new frame %d, %d bytes", mFrameCount, mFrame.size() ); + Debug(3, "Got new frame %d, %d bytes", mFrameCount, mFrame.size()); - mFrameProcessed.setValueImmediate( false ); - mFrameReady.updateValueSignal( true ); + mFrameProcessed.setValueImmediate(false); + mFrameReady.updateValueSignal(true); if ( !mFrameProcessed.getValueImmediate() ) { // What is the point of this for loop? Is it just me, or will it call getUpdatedValue once or twice? Could it not be better written as // if ( ! mFrameProcessed.getUpdatedValue( 1 ) && mFrameProcessed.getUpdatedValue( 1 ) ) return false; for ( int count = 0; !mFrameProcessed.getUpdatedValue( 1 ); count++ ) - if( count > 1 ) - return( false ); + if ( count > 1 ) + return false; } mFrameCount++; } else { - Warning( "Discarding incomplete frame %d, %d bytes", mFrameCount, mFrame.size() ); + Warning("Discarding incomplete frame %d, %d bytes", mFrameCount, mFrame.size()); } mFrame.clear(); } } else { if ( mFrame.size() ) { - Warning( "Discarding partial frame %d, %d bytes", mFrameCount, mFrame.size() ); + Warning("Discarding partial frame %d, %d bytes", mFrameCount, mFrame.size()); } else { - Warning( "Discarding frame %d", mFrameCount ); + Warning("Discarding frame %d", mFrameCount); } mFrameGood = false; mFrame.clear(); @@ -335,7 +348,7 @@ bool RtpSource::handlePacket( const unsigned char *packet, size_t packetLen ) { return true; } -bool RtpSource::getFrame( Buffer &buffer ) { +bool RtpSource::getFrame(Buffer &buffer) { if ( !mFrameReady.getValueImmediate() ) { Debug(3, "Getting frame but not ready"); // Allow for a couple of spurious returns diff --git a/src/zm_rtp_source.h b/src/zm_rtp_source.h index b53fb975b..f91ba20f7 100644 --- a/src/zm_rtp_source.h +++ b/src/zm_rtp_source.h @@ -94,7 +94,7 @@ private: ThreadData mFrameProcessed; private: - void init( uint16_t seq ); + void init(uint16_t seq); public: RtpSource( int id, const std::string &localHost, int localPortBase, const std::string &remoteHost, int remotePortBase, uint32_t ssrc, uint16_t seq, uint32_t rtpClock, uint32_t rtpTime, _AVCODECID codecId ); diff --git a/src/zm_rtsp.cpp b/src/zm_rtsp.cpp index 5e2858e4f..59d8ab171 100644 --- a/src/zm_rtsp.cpp +++ b/src/zm_rtsp.cpp @@ -34,17 +34,17 @@ int RtspThread::smMinDataPort = 0; int RtspThread::smMaxDataPort = 0; -RtspThread::PortSet RtspThread::smAssignedPorts; +RtspThread::PortSet RtspThread::smAssignedPorts; -bool RtspThread::sendCommand( std::string message ) { +bool RtspThread::sendCommand(std::string message) { if ( mNeedAuth ) { - StringVector parts = split( message, " " ); - if (parts.size() > 1) + StringVector parts = split(message, " "); + if ( parts.size() > 1 ) message += mAuthenticator->getAuthHeader(parts[0], parts[1]); } - message += stringtf( "User-Agent: ZoneMinder/%s\r\n", ZM_VERSION ); - message += stringtf( "CSeq: %d\r\n\r\n", ++mSeq ); - Debug( 2, "Sending RTSP message: %s", message.c_str() ); + message += stringtf("User-Agent: ZoneMinder/%s\r\n", ZM_VERSION); + message += stringtf("CSeq: %d\r\n\r\n", ++mSeq); + Debug(2, "Sending RTSP message: %s", message.c_str()); if ( mMethod == RTP_RTSP_HTTP ) { message = base64Encode(message); Debug(2, "Sending encoded RTSP message: %s", message.c_str()); @@ -61,8 +61,8 @@ bool RtspThread::sendCommand( std::string message ) { return true; } -bool RtspThread::recvResponse( std::string &response ) { - if ( mRtspSocket.recv( response ) < 0 ) +bool RtspThread::recvResponse(std::string &response) { + if ( mRtspSocket.recv(response) < 0 ) Error("Recv failed; %s", strerror(errno)); Debug(2, "Received RTSP response: %s (%zd bytes)", response.c_str(), response.size()); float respVer = 0; @@ -74,12 +74,12 @@ bool RtspThread::recvResponse( std::string &response ) { } else { Error("Response parse failure, %zd bytes follow", response.size()); if ( response.size() ) - Hexdump( Logger::ERROR, response.data(), min(response.size(),16) ); + Hexdump(Logger::ERROR, response.data(), min(response.size(),16)); } return false; } if ( respCode == 401 ) { - Debug( 2, "Got 401 access denied response code, check WWW-Authenticate header and retry"); + Debug(2, "Got 401 access denied response code, check WWW-Authenticate header and retry"); mAuthenticator->checkAuthResponse(response); mNeedAuth = true; return false; @@ -88,24 +88,24 @@ bool RtspThread::recvResponse( std::string &response ) { return false; } return true; -} // end RtspThread::recResponse +} // end RtspThread::recvResponse int RtspThread::requestPorts() { if ( !smMinDataPort ) { char sql[ZM_SQL_SML_BUFSIZ]; //FIXME Why not load specifically by Id? This will get ineffeicient with a lot of monitors - strncpy( sql, "select Id from Monitors where Function != 'None' and Type = 'Remote' and Protocol = 'rtsp' and Method = 'rtpUni' order by Id asc", sizeof(sql) ); - if ( mysql_query( &dbconn, sql ) ) { - Error( "Can't run query: %s", mysql_error( &dbconn ) ); - exit( mysql_errno( &dbconn ) ); + strncpy(sql, "SELECT `Id` FROM `Monitors` WHERE `Function` != 'None' AND `Type` = 'Remote' AND `Protocol` = 'rtsp' AND `Method` = 'rtpUni' ORDER BY `Id` ASC", sizeof(sql)); + if ( mysql_query(&dbconn, sql) ) { + Error("Can't run query: %s", mysql_error(&dbconn)); + exit(mysql_errno(&dbconn)); } - MYSQL_RES *result = mysql_store_result( &dbconn ); + MYSQL_RES *result = mysql_store_result(&dbconn); if ( !result ) { - Error( "Can't use query result: %s", mysql_error( &dbconn ) ); - exit( mysql_errno( &dbconn ) ); + Error("Can't use query result: %s", mysql_error(&dbconn)); + exit(mysql_errno(&dbconn)); } - int nMonitors = mysql_num_rows( result ); + int nMonitors = mysql_num_rows(result); int position = 0; if ( nMonitors ) { for ( int i = 0; MYSQL_ROW dbrow = mysql_fetch_row(result); i++ ) { @@ -124,7 +124,7 @@ int RtspThread::requestPorts() { int portRange = int(((config.max_rtp_port-config.min_rtp_port)+1)/nMonitors); smMinDataPort = config.min_rtp_port + (position * portRange); smMaxDataPort = smMinDataPort + portRange - 1; - Debug( 2, "Assigned RTP port range is %d-%d", smMinDataPort, smMaxDataPort ); + Debug(2, "Assigned RTP port range is %d-%d", smMinDataPort, smMaxDataPort); } for ( int i = smMinDataPort; i <= smMaxDataPort; i++ ) { PortSet::const_iterator iter = smAssignedPorts.find(i); @@ -137,7 +137,7 @@ int RtspThread::requestPorts() { return -1; } -void RtspThread::releasePorts( int port ) { +void RtspThread::releasePorts(int port) { if ( port > 0 ) smAssignedPorts.erase(port); } @@ -151,21 +151,21 @@ RtspThread::RtspThread( const std::string &path, const std::string &auth, bool rtsp_describe) : - mId( id ), - mMethod( method ), - mProtocol( protocol ), - mHost( host ), - mPort( port ), - mPath( path ), - mRtspDescribe( rtsp_describe ), - mSessDesc( 0 ), - mFormatContext( 0 ), - mSeq( 0 ), - mSession( 0 ), - mSsrc( 0 ), - mDist( UNDEFINED ), - mRtpTime( 0 ), - mStop( false ) + mId(id), + mMethod(method), + mProtocol(protocol), + mHost(host), + mPort(port), + mPath(path), + mRtspDescribe(rtsp_describe), + mSessDesc(0), + mFormatContext(0), + mSeq(0), + mSession(0), + mSsrc(0), + mDist(UNDEFINED), + mRtpTime(0), + mStop(false) { mUrl = mProtocol+"://"+mHost+":"+mPort; if ( !mPath.empty() ) { @@ -177,14 +177,15 @@ RtspThread::RtspThread( mSsrc = rand(); - Debug(2, "RTSP Local SSRC is %x", mSsrc); + Debug(2, "RTSP Local SSRC is %x, url is %s", mSsrc, mUrl.c_str()); if ( mMethod == RTP_RTSP_HTTP ) mHttpSession = stringtf("%d", rand()); mNeedAuth = false; - StringVector parts = split(auth,":"); - if (parts.size() > 1) + StringVector parts = split(auth, ":"); + Debug(2, "# of auth parts %d", parts.size()); + if ( parts.size() > 1 ) mAuthenticator = new zm::Authenticator(parts[0], parts[1]); else mAuthenticator = new zm::Authenticator(parts[0], ""); @@ -193,9 +194,9 @@ RtspThread::RtspThread( RtspThread::~RtspThread() { if ( mFormatContext ) { #if LIBAVFORMAT_VERSION_CHECK(52, 96, 0, 96, 0) - avformat_free_context( mFormatContext ); + avformat_free_context(mFormatContext); #else - av_free_format_context( mFormatContext ); + av_free_format_context(mFormatContext); #endif mFormatContext = NULL; } @@ -204,16 +205,17 @@ RtspThread::~RtspThread() { mSessDesc = NULL; } delete mAuthenticator; + mAuthenticator = NULL; } int RtspThread::run() { std::string message; std::string response; - response.reserve( ZM_NETWORK_BUFSIZ ); + response.reserve(ZM_NETWORK_BUFSIZ); - if ( !mRtspSocket.connect( mHost.c_str(), mPort.c_str() ) ) - Fatal( "Unable to connect RTSP socket" ); + if ( !mRtspSocket.connect(mHost.c_str(), mPort.c_str()) ) + Fatal("Unable to connect RTSP socket"); //Select select( 0.25 ); //select.addReader( &mRtspSocket ); //while ( select.wait() ) @@ -221,7 +223,6 @@ int RtspThread::run() { //mRtspSocket.recv( response ); //Debug( 4, "Drained %d bytes from RTSP socket", response.size() ); //} - bool authTried = false; if ( mMethod == RTP_RTSP_HTTP ) { @@ -245,14 +246,13 @@ int RtspThread::run() { message += mAuthenticator->getAuthHeader("GET", mPath); authTried = true; } - message += "Accept: application/x-rtsp-tunnelled\r\n"; - message += "\r\n"; - Debug( 2, "Sending HTTP message: %s", message.c_str() ); - if ( mRtspSocket.send( message.c_str(), message.size() ) != (int)message.length() ) { + message += "Accept: application/x-rtsp-tunnelled\r\n\r\n"; + Debug(2, "Sending HTTP message: %s", message.c_str()); + if ( mRtspSocket.send(message.c_str(), message.size()) != (int)message.length() ) { Error("Unable to send message '%s': %s", message.c_str(), strerror(errno)); return -1; } - if ( mRtspSocket.recv( response ) < 0 ) { + if ( mRtspSocket.recv(response) < 0 ) { Error("Recv failed; %s", strerror(errno)); return -1; } @@ -260,13 +260,13 @@ int RtspThread::run() { Debug(2, "Received HTTP response: %s (%zd bytes)", response.c_str(), response.size()); float respVer = 0; respCode = -1; - if ( sscanf( response.c_str(), "HTTP/%f %3d %[^\r\n]\r\n", &respVer, &respCode, respText ) != 3 ) { + if ( sscanf(response.c_str(), "HTTP/%f %3d %[^\r\n]\r\n", &respVer, &respCode, respText) != 3 ) { if ( isalnum(response[0]) ) { - Error( "Response parse failure in '%s'", response.c_str() ); + Error("Response parse failure in '%s'", response.c_str()); } else { - Error( "Response parse failure, %zd bytes follow", response.size() ); + Error("Response parse failure, %zd bytes follow", response.size()); if ( response.size() ) - Hexdump( Logger::ERROR, response.data(), min(response.size(),16) ); + Hexdump(Logger::ERROR, response.data(), min(response.size(),16)); } return -1; } @@ -296,25 +296,25 @@ int RtspThread::run() { message += "Content-Length: 32767\r\n"; message += "Content-Type: application/x-rtsp-tunnelled\r\n"; message += "\r\n"; - Debug( 2, "Sending HTTP message: %s", message.c_str() ); - if ( mRtspSocket2.send( message.c_str(), message.size() ) != (int)message.length() ) { - Error( "Unable to send message '%s': %s", message.c_str(), strerror(errno) ); - return( -1 ); + Debug(2, "Sending HTTP message: %s", message.c_str()); + if ( mRtspSocket2.send(message.c_str(), message.size()) != (int)message.length() ) { + Error("Unable to send message '%s': %s", message.c_str(), strerror(errno)); + return -1; } - } + } // end if ( mMethod == RTP_RTSP_HTTP ) std::string localHost = ""; int localPorts[2] = { 0, 0 }; // Request supported RTSP commands by the server message = "OPTIONS "+mUrl+" RTSP/1.0\r\n"; - if ( !sendCommand( message ) ) + if ( !sendCommand(message) ) return -1; // A negative return here may indicate auth failure, but we will have setup the auth mechanisms so we need to retry. if ( !recvResponse(response) ) { if ( mNeedAuth ) { - Debug( 2, "Resending OPTIONS due to possible auth requirement" ); + Debug(2, "Resending OPTIONS due to possible auth requirement"); if ( !sendCommand(message) ) return -1; if ( !recvResponse(response) ) @@ -338,11 +338,11 @@ int RtspThread::run() { message = "DESCRIBE "+mUrl+" RTSP/1.0\r\n"; bool res; do { - if (mNeedAuth) + if ( mNeedAuth ) authTried = true; sendCommand(message); - // FIXME WHy sleep 1? - sleep(1); + // FIXME Why sleep 1? + usleep(10000); res = recvResponse(response); if ( !res && respCode==401 ) mNeedAuth = true; @@ -600,7 +600,8 @@ int RtspThread::run() { while( !mStop ) { now = time(NULL); // Send a keepalive message if the server supports this feature and we are close to the timeout expiration -Debug(5, "sendkeepalive %d, timeout %d, now: %d last: %d since: %d", sendKeepalive, timeout, now, lastKeepalive, (now-lastKeepalive) ); + Debug(5, "sendkeepalive %d, timeout %d, now: %d last: %d since: %d", + sendKeepalive, timeout, now, lastKeepalive, (now-lastKeepalive) ); if ( sendKeepalive && (timeout > 0) && ((now-lastKeepalive) > (timeout-5)) ) { if ( !sendCommand( message ) ) return( -1 ); @@ -678,22 +679,21 @@ Debug(5, "sendkeepalive %d, timeout %d, now: %d last: %d since: %d", sendKeepali break; } if ( channel == remoteChannels[0] ) { - Debug( 4, "Got %d bytes on data channel %d, packet length is %d", buffer.size(), channel, len ); - Hexdump( 4, (char *)buffer, 16 ); - rtpDataThread.recvPacket( buffer+4, len ); - Debug( 4, "Received" ); + Debug(4, "Got %d bytes on data channel %d, packet length is %d", buffer.size(), channel, len); + Hexdump(4, (char *)buffer, 16); + rtpDataThread.recvPacket(buffer+4, len); } else if ( channel == remoteChannels[1] ) { // len = ntohs( *((unsigned short *)(buffer+2)) ); // Debug( 4, "Got %d bytes on control channel %d", nBytes, channel ); - Debug( 4, "Got %d bytes on control channel %d, packet length is %d", buffer.size(), channel, len ); - Hexdump( 4, (char *)buffer, 16 ); - rtpCtrlThread.recvPackets( buffer+4, len ); + Debug(4, "Got %d bytes on control channel %d, packet length is %d", buffer.size(), channel, len); + Hexdump(4, (char *)buffer, 16); + rtpCtrlThread.recvPackets(buffer+4, len); } else { - Error( "Unexpected channel selector %d in RTSP interleaved data", buffer[1] ); + Error("Unexpected channel selector %d in RTSP interleaved data", buffer[1]); buffer.clear(); break; } - buffer.consume( len+4 ); + buffer.consume(len+4); nBytes -= len+4; } else { if ( keepaliveResponse.compare( 0, keepaliveResponse.size(), (char *)buffer, keepaliveResponse.size() ) == 0 ) { diff --git a/src/zm_rtsp_auth.cpp b/src/zm_rtsp_auth.cpp index 2f8b2c3ce..5cd05063c 100644 --- a/src/zm_rtsp_auth.cpp +++ b/src/zm_rtsp_auth.cpp @@ -56,21 +56,20 @@ void Authenticator::reset() { fAuthMethod = AUTH_UNDEFINED; } -void Authenticator::authHandleHeader(std::string headerData) -{ +void Authenticator::authHandleHeader(std::string headerData) { const char* basic_match = "Basic "; const char* digest_match = "Digest "; size_t digest_match_len = strlen(digest_match); // Check if basic auth - if ( strncasecmp(headerData.c_str(),basic_match,strlen(basic_match)) == 0 ) { + if ( strncasecmp(headerData.c_str(), basic_match, strlen(basic_match)) == 0 ) { fAuthMethod = AUTH_BASIC; Debug(2, "Set authMethod to Basic"); } // Check if digest auth - else if (strncasecmp( headerData.c_str(),digest_match,digest_match_len ) == 0) { + else if ( strncasecmp(headerData.c_str(), digest_match, digest_match_len) == 0) { fAuthMethod = AUTH_DIGEST; - Debug( 2, "Set authMethod to Digest"); + Debug(2, "Set authMethod to Digest"); StringVector subparts = split(headerData.substr(digest_match_len, headerData.length() - digest_match_len), ","); // subparts are key="value" for ( size_t i = 0; i < subparts.size(); i++ ) { @@ -92,7 +91,7 @@ void Authenticator::authHandleHeader(std::string headerData) Debug(2, "Auth data completed. User: %s, realm: %s, nonce: %s, qop: %s", username().c_str(), fRealm.c_str(), fNonce.c_str(), fQop.c_str()); } -} +} // end void Authenticator::authHandleHeader(std::string headerData) std::string Authenticator::quote( const std::string &src ) { return replaceAll(replaceAll(src, "\\", "\\\\"), "\"", "\\\""); @@ -100,13 +99,13 @@ std::string Authenticator::quote( const std::string &src ) { std::string Authenticator::getAuthHeader(std::string method, std::string uri) { std::string result = "Authorization: "; - if (fAuthMethod == AUTH_BASIC) { - result += "Basic " + base64Encode( username() + ":" + password() ); - } else if (fAuthMethod == AUTH_DIGEST) { + if ( fAuthMethod == AUTH_BASIC ) { + result += "Basic " + base64Encode(username() + ":" + password()); + } else if ( fAuthMethod == AUTH_DIGEST ) { result += std::string("Digest ") + "username=\"" + quote(username()) + "\", realm=\"" + quote(realm()) + "\", " + "nonce=\"" + quote(nonce()) + "\", uri=\"" + quote(uri) + "\""; - if ( ! fQop.empty() ) { + if ( !fQop.empty() ) { result += ", qop=" + fQop; result += ", nc=" + stringtf("%08x",nc); result += ", cnonce=\"" + fCnonce + "\""; @@ -203,21 +202,21 @@ void Authenticator::checkAuthResponse(std::string &response) { for ( size_t i = 0; i < lines.size(); i++ ) { // stop at end of headers - if (lines[i].length()==0) + if ( lines[i].length() == 0 ) break; - if (strncasecmp(lines[i].c_str(),authenticate_match,authenticate_match_len) == 0) { + if ( strncasecmp(lines[i].c_str(), authenticate_match, authenticate_match_len) == 0 ) { authLine = lines[i]; - Debug( 2, "Found auth line at %d", i); - break; + Debug(2, "Found auth line at %d:", i); + //break; } } - if (!authLine.empty()) { - Debug( 2, "Analyze auth line %s", authLine.c_str()); - authHandleHeader( trimSpaces(authLine.substr(authenticate_match_len,authLine.length()-authenticate_match_len)) ); + if ( !authLine.empty() ) { + Debug(2, "Analyze auth line %s", authLine.c_str()); + authHandleHeader(trimSpaces(authLine.substr(authenticate_match_len, authLine.length()-authenticate_match_len))); } else { - Debug( 2, "Didn't find auth line in %s", authLine.c_str()); + Debug(2, "Didn't find auth line in %s", authLine.c_str()); } -} +} // end void Authenticator::checkAuthResponse(std::string &response) } // namespace zm diff --git a/src/zm_sdp.cpp b/src/zm_sdp.cpp index c7bf1b578..15f6ad5e3 100644 --- a/src/zm_sdp.cpp +++ b/src/zm_sdp.cpp @@ -376,6 +376,9 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const { #endif else Warning("Unknown media_type %s", type.c_str()); +#if LIBAVCODEC_VERSION_CHECK(57, 64, 0, 64, 0) + stream->codecpar->codec_type = codec_context->codec_type; +#endif #if LIBAVCODEC_VERSION_CHECK(55, 50, 3, 60, 103) std::string codec_name; diff --git a/src/zm_thread.cpp b/src/zm_thread.cpp index 03d048bea..ac493a3fe 100644 --- a/src/zm_thread.cpp +++ b/src/zm_thread.cpp @@ -116,25 +116,32 @@ Condition::~Condition() { void Condition::wait() { // Locking done outside of this function - if ( pthread_cond_wait( &mCondition, mMutex.getMutex() ) < 0 ) - throw ThreadException( stringtf( "Unable to wait pthread condition: %s", strerror(errno) ) ); + if ( pthread_cond_wait(&mCondition, mMutex.getMutex()) < 0 ) + throw ThreadException(stringtf("Unable to wait pthread condition: %s", strerror(errno))); } -bool Condition::wait( int secs ) { +bool Condition::wait(int secs) { // Locking done outside of this function - Debug( 8, "Waiting for %d seconds", secs ); - struct timespec timeout = getTimeout( secs ); - if ( pthread_cond_timedwait( &mCondition, mMutex.getMutex(), &timeout ) < 0 && errno != ETIMEDOUT ) - throw ThreadException( stringtf( "Unable to timedwait pthread condition: %s", strerror(errno) ) ); - return( errno != ETIMEDOUT ); + Debug(8, "Waiting for %d seconds", secs); + struct timespec timeout = getTimeout(secs); + if ( + ( pthread_cond_timedwait(&mCondition, mMutex.getMutex(), &timeout) < 0 ) + && + ( errno != ETIMEDOUT ) + ) + throw ThreadException(stringtf("Unable to timedwait pthread condition: %s", strerror(errno))); + return errno != ETIMEDOUT; } bool Condition::wait( double secs ) { // Locking done outside of this function struct timespec timeout = getTimeout( secs ); - if ( pthread_cond_timedwait( &mCondition, mMutex.getMutex(), &timeout ) < 0 && errno != ETIMEDOUT ) + if ( + (pthread_cond_timedwait( &mCondition, mMutex.getMutex(), &timeout ) < 0) + && + (errno != ETIMEDOUT) ) throw ThreadException( stringtf( "Unable to timedwait pthread condition: %s", strerror(errno) ) ); - return( errno != ETIMEDOUT ); + return errno != ETIMEDOUT; } void Condition::signal() { @@ -177,11 +184,11 @@ template const T ThreadData::getUpdatedValue(double secs) const { mMutex.lock(); mChanged = false; //do { - mCondition.wait( secs ); + mCondition.wait(secs); //} while ( !mChanged ); const T valueCopy = mValue; mMutex.unlock(); - Debug(9, "Got value update, %p", this ); + Debug(9, "Got value update, %p", this); return valueCopy; } diff --git a/src/zm_thread.h b/src/zm_thread.h index 8cdfb892c..3f3e8c6b9 100644 --- a/src/zm_thread.h +++ b/src/zm_thread.h @@ -57,7 +57,9 @@ private: pthread_t pid() { return( pthread_self() ); } #endif public: - explicit ThreadException( const std::string &message ) : Exception( stringtf("(%d) ", (long int)pid())+message ) { + explicit ThreadException(const std::string &message) : + Exception(stringtf("(%d) ", (long int)pid())+message) + { } }; @@ -169,38 +171,36 @@ private: mutable Condition mCondition; public: - __attribute__((used)) ThreadData() : mValue(0), mCondition( mMutex ) { + __attribute__((used)) ThreadData() : + mValue(0), mCondition(mMutex) + { mChanged = false; } - explicit __attribute__((used)) ThreadData( T value ) : mValue( value ), mCondition( mMutex ) { + explicit __attribute__((used)) ThreadData(T value) : + mValue(value), mCondition(mMutex) { mChanged = false; } - //~ThreadData() {} - __attribute__((used)) operator T() const - { - return( getValue() ); + __attribute__((used)) operator T() const { + return getValue(); } - __attribute__((used)) const T operator=( const T value ) - { - return( setValue( value ) ); + __attribute__((used)) const T operator=( const T value ) { + return setValue(value); } - __attribute__((used)) const T getValueImmediate() const - { - return( mValue ); + __attribute__((used)) const T getValueImmediate() const { + return mValue; } - __attribute__((used)) T setValueImmediate( const T value ) - { - return( mValue = value ); + __attribute__((used)) T setValueImmediate( const T value ) { + return mValue = value; } __attribute__((used)) const T getValue() const; __attribute__((used)) T setValue( const T value ); __attribute__((used)) const T getUpdatedValue() const; - __attribute__((used)) const T getUpdatedValue( double secs ) const; - __attribute__((used)) const T getUpdatedValue( int secs ) const; - __attribute__((used)) void updateValueSignal( const T value ); - __attribute__((used)) void updateValueBroadcast( const T value ); + __attribute__((used)) const T getUpdatedValue(double secs) const; + __attribute__((used)) const T getUpdatedValue(int secs) const; + __attribute__((used)) void updateValueSignal(const T value); + __attribute__((used)) void updateValueBroadcast(const T value); }; class Thread { diff --git a/src/zmu.cpp b/src/zmu.cpp index 12f8f9338..412bc816c 100644 --- a/src/zmu.cpp +++ b/src/zmu.cpp @@ -196,12 +196,11 @@ bool ValidateAccess(User *user, int mon_id, int function) { return allowed; } -int exit_zmu(int exit_code) { +void exit_zmu(int exit_code) { logTerm(); zmDbClose(); exit(exit_code); - return exit_code; } int main(int argc, char *argv[]) { @@ -477,228 +476,233 @@ int main(int argc, char *argv[]) { if ( mon_id > 0 ) { Monitor *monitor = Monitor::Load(mon_id, function&(ZMU_QUERY|ZMU_ZONES), Monitor::QUERY); - if ( monitor ) { - if ( verbose ) { - printf("Monitor %d(%s)\n", monitor->Id(), monitor->Name()); - } - if ( !monitor->connect() ) { - Error("Can't connect to capture daemon: %d %s", monitor->Id(), monitor->Name()); - exit_zmu(-1); - } + if ( !monitor ) { + Error("Unable to load monitor %d", mon_id); + exit_zmu(-1); + } // end if ! MONITOR - char separator = ' '; - bool have_output = false; - if ( function & ZMU_STATE ) { - Monitor::State state = monitor->GetState(); - if ( verbose ) { - printf("Current state: %s\n", state==Monitor::ALARM?"Alarm":(state==Monitor::ALERT?"Alert":"Idle")); - } else { - if ( have_output ) fputc(separator, stdout); - printf("%d", state); - have_output = true; - } - } - if ( function & ZMU_TIME ) { - struct timeval timestamp = monitor->GetTimestamp(image_idx); - if ( verbose ) { - char timestamp_str[64] = "None"; - if ( timestamp.tv_sec ) - strftime(timestamp_str, sizeof(timestamp_str), "%Y-%m-%d %H:%M:%S", localtime(×tamp.tv_sec)); - if ( image_idx == -1 ) - printf("Time of last image capture: %s.%02ld\n", timestamp_str, timestamp.tv_usec/10000); - else - printf("Time of image %d capture: %s.%02ld\n", image_idx, timestamp_str, timestamp.tv_usec/10000); - } else { - if ( have_output ) fputc(separator, stdout); - printf("%ld.%02ld", timestamp.tv_sec, timestamp.tv_usec/10000); - have_output = true; - } - } - if ( function & ZMU_READ_IDX ) { - if ( verbose ) - printf("Last read index: %d\n", monitor->GetLastReadIndex()); - else { - if ( have_output ) fputc(separator, stdout); - printf("%d", monitor->GetLastReadIndex()); - have_output = true; - } - } - if ( function & ZMU_WRITE_IDX ) { - if ( verbose ) { - printf("Last write index: %d\n", monitor->GetLastWriteIndex()); - } else { - if ( have_output ) fputc(separator, stdout); - printf("%d", monitor->GetLastWriteIndex()); - have_output = true; - } - } - if ( function & ZMU_EVENT ) { - if ( verbose ) { - printf("Last event id: %" PRIu64 "\n", monitor->GetLastEventId()); - } else { - if ( have_output ) fputc(separator, stdout); - printf("%" PRIu64, monitor->GetLastEventId()); - have_output = true; - } - } - if ( function & ZMU_FPS ) { - if ( verbose ) { - printf("Current capture rate: %.2f frames per second\n", monitor->GetFPS()); - } else { - if ( have_output ) fputc(separator, stdout); - printf("%.2f", monitor->GetFPS()); - have_output = true; - } - } - if ( function & ZMU_IMAGE ) { - if ( verbose ) { - if ( image_idx == -1 ) - printf("Dumping last image captured to Monitor%d.jpg", monitor->Id()); - else - printf("Dumping buffer image %d to Monitor%d.jpg", image_idx, monitor->Id()); - if ( scale != -1 ) - printf(", scaling by %d%%", scale); - printf("\n"); - } - monitor->GetImage(image_idx, scale>0?scale:100); - } - if ( function & ZMU_ZONES ) { - if ( verbose ) - printf("Dumping zone image to Zones%d.jpg\n", monitor->Id()); - monitor->DumpZoneImage(zoneString); - } - if ( function & ZMU_ALARM ) { - if ( monitor->GetFunction() == Monitor::Function::MONITOR ) { - printf("A Monitor in monitor mode cannot handle alarms. Please use NoDect\n"); - } else { - Monitor::State state = monitor->GetState(); - - if ( verbose ) { - printf("Forcing alarm on current state: %s, event %" PRIu64 "\n", - state==Monitor::ALARM?"Alarm":(state==Monitor::ALERT?"Alert":"Idle"), - monitor->GetLastEventId() - ); - } - monitor->ForceAlarmOn(config.forced_alarm_score, "Forced Web"); - while ( ((state = monitor->GetState()) != Monitor::ALARM) && !zm_terminate ) { - // Wait for monitor to notice. - usleep(1000); - } - printf("Alarmed event id: %" PRIu64 "\n", monitor->GetLastEventId()); - } // end if ! MONITOR - } - if ( function & ZMU_NOALARM ) { - if ( verbose ) - printf("Forcing alarm off\n"); - monitor->ForceAlarmOff(); - } - if ( function & ZMU_CANCEL ) { - if ( verbose ) - printf("Cancelling forced alarm on/off\n"); - monitor->CancelForced(); - } - if ( function & ZMU_RELOAD ) { - if ( verbose ) - printf("Reloading monitor settings\n"); - monitor->actionReload(); - } - if ( function & ZMU_ENABLE ) { - if ( verbose ) - printf("Enabling event generation\n"); - monitor->actionEnable(); - } - if ( function & ZMU_DISABLE ) { - if ( verbose ) - printf("Disabling event generation\n"); - monitor->actionDisable(); - } - if ( function & ZMU_SUSPEND ) { - if ( verbose ) - printf("Suspending event generation\n"); - monitor->actionSuspend(); - } - if ( function & ZMU_RESUME ) { - if ( verbose ) - printf("Resuming event generation\n"); - monitor->actionResume(); - } - if ( function & ZMU_QUERY ) { - char monString[16382] = ""; - monitor->DumpSettings(monString, verbose); - printf("%s\n", monString); - } - if ( function & ZMU_BRIGHTNESS ) { - if ( verbose ) { - if ( brightness >= 0 ) - printf("New brightness: %d\n", monitor->actionBrightness(brightness)); - else - printf("Current brightness: %d\n", monitor->actionBrightness()); - } else { - if ( have_output ) fputc(separator, stdout); - if ( brightness >= 0 ) - printf("%d", monitor->actionBrightness(brightness)); - else - printf("%d", monitor->actionBrightness()); - have_output = true; - } - } - if ( function & ZMU_CONTRAST ) { - if ( verbose ) { - if ( contrast >= 0 ) - printf("New brightness: %d\n", monitor->actionContrast(contrast)); - else - printf("Current contrast: %d\n", monitor->actionContrast()); - } else { - if ( have_output ) fputc(separator, stdout); - if ( contrast >= 0 ) - printf("%d", monitor->actionContrast(contrast)); - else - printf("%d", monitor->actionContrast()); - have_output = true; - } - } - if ( function & ZMU_HUE ) { - if ( verbose ) { - if ( hue >= 0 ) - printf("New hue: %d\n", monitor->actionHue(hue)); - else - printf("Current hue: %d\n", monitor->actionHue()); - } else { - if ( have_output ) fputc(separator, stdout); - if ( hue >= 0 ) - printf("%d", monitor->actionHue(hue)); - else - printf("%d", monitor->actionHue()); - have_output = true; - } - } - if ( function & ZMU_COLOUR ) { - if ( verbose ) { - if ( colour >= 0 ) - printf("New colour: %d\n", monitor->actionColour(colour)); - else - printf("Current colour: %d\n", monitor->actionColour()); - } else { - if ( have_output ) fputc(separator, stdout); - if ( colour >= 0 ) - printf("%d", monitor->actionColour(colour)); - else - printf("%d", monitor->actionColour()); - have_output = true; - } - } - if ( have_output ) { - printf("\n"); - } - if ( !function ) { - Usage(); - } + if ( verbose ) { + printf("Monitor %d(%s)\n", monitor->Id(), monitor->Name()); + } + if ( !monitor->connect() ) { + Error("Can't connect to capture daemon: %d %s", monitor->Id(), monitor->Name()); delete monitor; - } else { - Error("Invalid monitor id %d", mon_id); + monitor = NULL; exit_zmu(-1); } - } else { + + char separator = ' '; + bool have_output = false; + if ( function & ZMU_STATE ) { + Monitor::State state = monitor->GetState(); + if ( verbose ) { + printf("Current state: %s\n", state==Monitor::ALARM?"Alarm":(state==Monitor::ALERT?"Alert":"Idle")); + } else { + if ( have_output ) fputc(separator, stdout); + printf("%d", state); + have_output = true; + } + } + if ( function & ZMU_TIME ) { + struct timeval timestamp = monitor->GetTimestamp(image_idx); + if ( verbose ) { + char timestamp_str[64] = "None"; + if ( timestamp.tv_sec ) + strftime(timestamp_str, sizeof(timestamp_str), "%Y-%m-%d %H:%M:%S", localtime(×tamp.tv_sec)); + if ( image_idx == -1 ) + printf("Time of last image capture: %s.%02ld\n", timestamp_str, timestamp.tv_usec/10000); + else + printf("Time of image %d capture: %s.%02ld\n", image_idx, timestamp_str, timestamp.tv_usec/10000); + } else { + if ( have_output ) fputc(separator, stdout); + printf("%ld.%02ld", timestamp.tv_sec, timestamp.tv_usec/10000); + have_output = true; + } + } + if ( function & ZMU_READ_IDX ) { + if ( verbose ) + printf("Last read index: %d\n", monitor->GetLastReadIndex()); + else { + if ( have_output ) fputc(separator, stdout); + printf("%d", monitor->GetLastReadIndex()); + have_output = true; + } + } + if ( function & ZMU_WRITE_IDX ) { + if ( verbose ) { + printf("Last write index: %d\n", monitor->GetLastWriteIndex()); + } else { + if ( have_output ) fputc(separator, stdout); + printf("%d", monitor->GetLastWriteIndex()); + have_output = true; + } + } + if ( function & ZMU_EVENT ) { + if ( verbose ) { + printf("Last event id: %" PRIu64 "\n", monitor->GetLastEventId()); + } else { + if ( have_output ) fputc(separator, stdout); + printf("%" PRIu64, monitor->GetLastEventId()); + have_output = true; + } + } + if ( function & ZMU_FPS ) { + if ( verbose ) { + printf("Current capture rate: %.2f frames per second\n", monitor->GetFPS()); + } else { + if ( have_output ) fputc(separator, stdout); + printf("%.2f", monitor->GetFPS()); + have_output = true; + } + } + if ( function & ZMU_IMAGE ) { + if ( verbose ) { + if ( image_idx == -1 ) + printf("Dumping last image captured to Monitor%d.jpg", monitor->Id()); + else + printf("Dumping buffer image %d to Monitor%d.jpg", image_idx, monitor->Id()); + if ( scale != -1 ) + printf(", scaling by %d%%", scale); + printf("\n"); + } + monitor->GetImage(image_idx, scale>0?scale:100); + } + if ( function & ZMU_ZONES ) { + if ( verbose ) + printf("Dumping zone image to Zones%d.jpg\n", monitor->Id()); + monitor->DumpZoneImage(zoneString); + } + if ( function & ZMU_ALARM ) { + if ( monitor->GetFunction() == Monitor::Function::MONITOR ) { + printf("A Monitor in monitor mode cannot handle alarms. Please use NoDect\n"); + } else { + Monitor::State state = monitor->GetState(); + + if ( verbose ) { + printf("Forcing alarm on current state: %s, event %" PRIu64 "\n", + state==Monitor::ALARM?"Alarm":(state==Monitor::ALERT?"Alert":"Idle"), + monitor->GetLastEventId() + ); + } + monitor->ForceAlarmOn(config.forced_alarm_score, "Forced Web"); + while ( ((state = monitor->GetState()) != Monitor::ALARM) && !zm_terminate ) { + // Wait for monitor to notice. + usleep(1000); + } + printf("Alarmed event id: %" PRIu64 "\n", monitor->GetLastEventId()); + } + } // end if ZMU_ALARM + + if ( function & ZMU_NOALARM ) { + if ( verbose ) + printf("Forcing alarm off\n"); + monitor->ForceAlarmOff(); + } + if ( function & ZMU_CANCEL ) { + if ( verbose ) + printf("Cancelling forced alarm on/off\n"); + monitor->CancelForced(); + } + if ( function & ZMU_RELOAD ) { + if ( verbose ) + printf("Reloading monitor settings\n"); + monitor->actionReload(); + } + if ( function & ZMU_ENABLE ) { + if ( verbose ) + printf("Enabling event generation\n"); + monitor->actionEnable(); + } + if ( function & ZMU_DISABLE ) { + if ( verbose ) + printf("Disabling event generation\n"); + monitor->actionDisable(); + } + if ( function & ZMU_SUSPEND ) { + if ( verbose ) + printf("Suspending event generation\n"); + monitor->actionSuspend(); + } + if ( function & ZMU_RESUME ) { + if ( verbose ) + printf("Resuming event generation\n"); + monitor->actionResume(); + } + if ( function & ZMU_QUERY ) { + char monString[16382] = ""; + monitor->DumpSettings(monString, verbose); + printf("%s\n", monString); + } + if ( function & ZMU_BRIGHTNESS ) { + if ( verbose ) { + if ( brightness >= 0 ) + printf("New brightness: %d\n", monitor->actionBrightness(brightness)); + else + printf("Current brightness: %d\n", monitor->actionBrightness()); + } else { + if ( have_output ) fputc(separator, stdout); + if ( brightness >= 0 ) + printf("%d", monitor->actionBrightness(brightness)); + else + printf("%d", monitor->actionBrightness()); + have_output = true; + } + } + if ( function & ZMU_CONTRAST ) { + if ( verbose ) { + if ( contrast >= 0 ) + printf("New brightness: %d\n", monitor->actionContrast(contrast)); + else + printf("Current contrast: %d\n", monitor->actionContrast()); + } else { + if ( have_output ) fputc(separator, stdout); + if ( contrast >= 0 ) + printf("%d", monitor->actionContrast(contrast)); + else + printf("%d", monitor->actionContrast()); + have_output = true; + } + } + if ( function & ZMU_HUE ) { + if ( verbose ) { + if ( hue >= 0 ) + printf("New hue: %d\n", monitor->actionHue(hue)); + else + printf("Current hue: %d\n", monitor->actionHue()); + } else { + if ( have_output ) fputc(separator, stdout); + if ( hue >= 0 ) + printf("%d", monitor->actionHue(hue)); + else + printf("%d", monitor->actionHue()); + have_output = true; + } + } + if ( function & ZMU_COLOUR ) { + if ( verbose ) { + if ( colour >= 0 ) + printf("New colour: %d\n", monitor->actionColour(colour)); + else + printf("Current colour: %d\n", monitor->actionColour()); + } else { + if ( have_output ) fputc(separator, stdout); + if ( colour >= 0 ) + printf("%d", monitor->actionColour(colour)); + else + printf("%d", monitor->actionColour()); + have_output = true; + } + } + + if ( have_output ) { + printf("\n"); + } + if ( !function ) { + Usage(); + } + delete monitor; + monitor = NULL; + } else { // non monitor functions if ( function & ZMU_QUERY ) { #if ZM_HAS_V4L char vidString[0x10000] = ""; @@ -770,8 +774,9 @@ int main(int argc, char *argv[]) { } // end foreach row mysql_free_result(result); } // end if function && ZMU_LIST - } + } // end if monitor id or not delete user; - return exit_zmu(0); -} + exit_zmu(0); + return 0; +} // end int main() diff --git a/version b/version index 0035f2a76..f508d5bf0 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.35.2 +1.35.4 diff --git a/web/ajax/event.php b/web/ajax/event.php index fb9000cc6..1456bd192 100644 --- a/web/ajax/event.php +++ b/web/ajax/event.php @@ -1,5 +1,5 @@ $exportFile,'exportFormat'=>$exportFormat, 'connkey'=>(isset($_REQUEST['connkey'])?$_REQUEST['connkey']:''))); + ajaxResponse(array( + 'exportFile'=>$exportFile, + 'exportFormat'=>$exportFormat, + 'connkey'=>(isset($_REQUEST['connkey'])?$_REQUEST['connkey']:'') + )); } else { ajaxError('Export Failed'); } @@ -145,7 +149,7 @@ if ( canEdit('Events') ) { break; case 'delete' : $Event = new ZM\Event($_REQUEST['id']); - if ( ! $Event->Id() ) { + if ( !$Event->Id() ) { ajaxResponse(array('refreshEvent'=>false, 'refreshParent'=>true, 'message'=> 'Event not found.')); } else { $Event->delete(); diff --git a/web/ajax/status.php b/web/ajax/status.php index fea5943ca..3b4c225c9 100644 --- a/web/ajax/status.php +++ b/web/ajax/status.php @@ -19,7 +19,7 @@ $statusData = array( 'limit' => 1, 'elements' => array( 'MonitorCount' => array( 'sql' => 'count(*)' ), - 'ActiveMonitorCount' => array( 'sql' => 'count(if(Function != \'None\',1,NULL))' ), + 'ActiveMonitorCount' => array( 'sql' => 'count(if(`Function` != \'None\',1,NULL))' ), 'State' => array( 'func' => 'daemonCheck()?'.translate('Running').':'.translate('Stopped') ), 'Load' => array( 'func' => 'getLoad()' ), 'Disk' => array( 'func' => 'getDiskPercent()' ), @@ -211,17 +211,17 @@ function collectData() { $values = array(); $elements = &$entitySpec['elements']; - $lc_elements = array_change_key_case( $elements ); + $lc_elements = array_change_key_case($elements); $id = false; if ( isset($_REQUEST['id']) ) if ( !is_array($_REQUEST['id']) ) $id = array( validJsStr($_REQUEST['id']) ); else - $id = array_values( $_REQUEST['id'] ); + $id = array_values($_REQUEST['id']); if ( !isset($_REQUEST['element']) ) - $_REQUEST['element'] = array_keys( $elements ); + $_REQUEST['element'] = array_keys($elements); else if ( !is_array($_REQUEST['element']) ) $_REQUEST['element'] = array( validJsStr($_REQUEST['element']) ); @@ -235,13 +235,13 @@ function collectData() { foreach ( $_REQUEST['element'] as $element ) { if ( !($elementData = $lc_elements[strtolower($element)]) ) - ajaxError( 'Bad '.validJsStr($_REQUEST['entity']).' element '.$element ); + ajaxError('Bad '.validJsStr($_REQUEST['entity']).' element '.$element); if ( isset($elementData['func']) ) - $data[$element] = eval( 'return( '.$elementData['func'].' );' ); + $data[$element] = eval('return( '.$elementData['func'].' );'); else if ( isset($elementData['postFunc']) ) $postFuncs[$element] = $elementData['postFunc']; else if ( isset($elementData['zmu']) ) - $data[$element] = exec( escapeshellcmd( getZmuCommand( ' '.$elementData['zmu'] ) ) ); + $data[$element] = exec(escapeshellcmd(getZmuCommand(' '.$elementData['zmu']))); else { if ( isset($elementData['sql']) ) $fieldSql[] = $elementData['sql'].' as '.$element; @@ -258,14 +258,15 @@ function collectData() { if ( count($fieldSql) ) { $sql = 'SELECT '.join(', ', $fieldSql).' FROM '.$entitySpec['table']; + #$sql = 'SELECT '.join(', ', array_map($fieldSql, function($f){return '`'.$f.'`';})).' FROM '.$entitySpec['table']; if ( $joinSql ) $sql .= ' '.join(' ', array_unique($joinSql)); if ( $id && !empty($entitySpec['selector']) ) { $index = 0; $where = array(); - foreach( $entitySpec['selector'] as $selIndex => $selector ) { + foreach ( $entitySpec['selector'] as $selIndex => $selector ) { $selectorParamName = ':selector' . $selIndex; - if ( is_array( $selector ) ) { + if ( is_array($selector) ) { $where[] = $selector['selector'].' = '.$selectorParamName; $values[$selectorParamName] = validInt($id[$index]); } else { @@ -280,15 +281,15 @@ function collectData() { $sql .= ' GROUP BY '.join(',', array_unique($groupSql)); if ( !empty($_REQUEST['sort']) ) { $sql .= ' ORDER BY '; - $sort_fields = explode(',',$_REQUEST['sort']); + $sort_fields = explode(',', $_REQUEST['sort']); foreach ( $sort_fields as $sort_field ) { - preg_match('/^(\w+)\s*(ASC|DESC)?( NULLS FIRST)?$/i', $sort_field, $matches); + preg_match('/^`?(\w+)`?\s*(ASC|DESC)?( NULLS FIRST)?$/i', $sort_field, $matches); if ( count($matches) ) { if ( in_array($matches[1], $fieldSql) ) { $sql .= $matches[1]; } else { - ZM\Error('Sort field ' . $matches[1] . ' not in SQL Fields'); + ZM\Error('Sort field '.$matches[1].' from ' .$sort_field.' not in SQL Fields: '.join(',', $sort_field)); } if ( count($matches) > 2 ) { $sql .= ' '.strtoupper($matches[2]); @@ -296,7 +297,7 @@ function collectData() { $sql .= ' '.strtoupper($matches[3]); } } else { - ZM\Error("Sort field didn't match regexp $sort_field"); + ZM\Error('Sort field didn\'t match regexp '.$sort_field); } } # end foreach sort field } # end if has sort @@ -310,7 +311,7 @@ function collectData() { if ( !empty( $limit ) ) $sql .= ' limit '.$limit_offset.$limit; if ( isset($limit) && $limit == 1 ) { - if ( $sqlData = dbFetchOne( $sql, NULL, $values ) ) { + if ( $sqlData = dbFetchOne($sql, NULL, $values) ) { foreach ( $postFuncs as $element=>$func ) $sqlData[$element] = eval( 'return( '.$func.'( $sqlData ) );' ); $data = array_merge( $data, $sqlData ); diff --git a/web/api/app/Controller/GroupsController.php b/web/api/app/Controller/GroupsController.php index 5d19b5d98..f4185fe76 100644 --- a/web/api/app/Controller/GroupsController.php +++ b/web/api/app/Controller/GroupsController.php @@ -170,5 +170,23 @@ class GroupsController extends AppController { array('action' => 'index') ); } - } // end function delete + } // end function delete + + // returns monitor associations + public function associations() { + $this->Group->recursive = -1; + $groups = $this->Group->find('all', array( + 'contain'=> array( + 'Monitor' => array( + 'fields'=>array('Id','Name') + ) + ) + ) + ); + $this->set(array( + 'groups' => $groups, + '_serialize' => array('groups') + )); + } // end associations + } // end class GroupController diff --git a/web/includes/Group.php b/web/includes/Group.php index 3a34e0af4..f5a78f875 100644 --- a/web/includes/Group.php +++ b/web/includes/Group.php @@ -19,9 +19,9 @@ class Group extends ZM_Object { public function delete() { if ( property_exists($this, 'Id') ) { - dbQuery('DELETE FROM Groups_Monitors WHERE GroupId=?', array($this->{'Id'})); - dbQuery('UPDATE Groups SET ParentId=NULL WHERE ParentId=?', array($this->{'Id'})); - dbQuery('DELETE FROM Groups WHERE Id=?', array($this->{'Id'})); + dbQuery('DELETE FROM `Groups_Monitors` WHERE `GroupId`=?', array($this->{'Id'})); + dbQuery('UPDATE `Groups` SET `ParentId`=NULL WHERE `ParentId`=?', array($this->{'Id'})); + dbQuery('DELETE FROM `Groups` WHERE Id=?', array($this->{'Id'})); if ( isset($_COOKIE['zmGroup']) ) { if ( $this->{'Id'} == $_COOKIE['zmGroup'] ) { unset($_COOKIE['zmGroup']); @@ -47,7 +47,7 @@ class Group extends ZM_Object { public function MonitorIds( ) { if ( ! property_exists($this, 'MonitorIds') ) { - $this->{'MonitorIds'} = dbFetchAll('SELECT MonitorId FROM Groups_Monitors WHERE GroupId=?', 'MonitorId', array($this->{'Id'})); + $this->{'MonitorIds'} = dbFetchAll('SELECT `MonitorId` FROM `Groups_Monitors` WHERE `GroupId`=?', 'MonitorId', array($this->{'Id'})); } return $this->{'MonitorIds'}; } @@ -65,7 +65,7 @@ class Group extends ZM_Object { session_write_close(); } - return htmlSelect( 'GroupId[]', Group::get_dropdown_options(), isset($_SESSION['GroupId'])?$_SESSION['GroupId']:null, array( + return htmlSelect('GroupId[]', Group::get_dropdown_options(), isset($_SESSION['GroupId'])?$_SESSION['GroupId']:null, array( 'data-on-change' => 'submitThisForm', 'class'=>'chosen', 'multiple'=>'multiple', diff --git a/web/includes/Monitor.php b/web/includes/Monitor.php index 4d7aa4718..080b7d7c5 100644 --- a/web/includes/Monitor.php +++ b/web/includes/Monitor.php @@ -20,6 +20,10 @@ class Monitor extends ZM_Object { 'Enabled' => array('type'=>'boolean','default'=>1), 'LinkedMonitors' => array('type'=>'set', 'default'=>null), 'Triggers' => array('type'=>'set','default'=>''), + 'ONVIF_URL' => '', + 'ONVIF_Username' => '', + 'ONVIF_Password' => '', + 'ONVIF_Options' => '', 'Device' => '', 'Channel' => 0, 'Format' => '0', diff --git a/web/includes/Object.php b/web/includes/Object.php index 09be86a9e..1fd704ec9 100644 --- a/web/includes/Object.php +++ b/web/includes/Object.php @@ -306,7 +306,7 @@ class ZM_Object { $fields = array_keys($fields); if ( $this->Id() ) { - $sql = 'UPDATE '.$table.' SET '.implode(', ', array_map(function($field) {return '`'.$field.'`=?';}, $fields)).' WHERE Id=?'; + $sql = 'UPDATE `'.$table.'` SET '.implode(', ', array_map(function($field) {return '`'.$field.'`=?';}, $fields)).' WHERE Id=?'; $values = array_map(function($field){ return $this->{$field};}, $fields); $values[] = $this->{'Id'}; if ( dbQuery($sql, $values) ) @@ -314,8 +314,8 @@ class ZM_Object { } else { unset($fields['Id']); - $sql = 'INSERT INTO '.$table. - ' ('.implode(', ', array_map(function($field) {return '`'.$field.'`';}, $fields)). + $sql = 'INSERT INTO `'.$table. + '` ('.implode(', ', array_map(function($field) {return '`'.$field.'`';}, $fields)). ') VALUES ('. implode(', ', array_map(function($field){return '?';}, $fields)).')'; @@ -331,7 +331,7 @@ class ZM_Object { public function delete() { $class = get_class($this); $table = $class::$table; - dbQuery("DELETE FROM $table WHERE Id=?", array($this->{'Id'})); + dbQuery("DELETE FROM `$table` WHERE Id=?", array($this->{'Id'})); if ( isset($object_cache[$class]) and isset($object_cache[$class][$this->{'Id'}]) ) unset($object_cache[$class][$this->{'Id'}]); } diff --git a/web/includes/database.php b/web/includes/database.php index d0124656d..2fb2db108 100644 --- a/web/includes/database.php +++ b/web/includes/database.php @@ -25,20 +25,26 @@ define('DB_LOG_DEBUG', 2); $GLOBALS['dbLogLevel'] = DB_LOG_OFF; $GLOBALS['dbConn'] = false; +require_once('logger.php'); function dbConnect() { global $dbConn; - if ( strpos(ZM_DB_HOST, ':') ) { - // Host variable may carry a port or socket. - list($host, $portOrSocket) = explode(':', ZM_DB_HOST, 2); - if ( ctype_digit($portOrSocket) ) { - $socket = ':host='.$host . ';port='.$portOrSocket; + $socket = ''; + if ( ZM_DB_HOST ) { + if ( strpos(ZM_DB_HOST, ':') ) { + // Host variable may carry a port or socket. + list($host, $portOrSocket) = explode(':', ZM_DB_HOST, 2); + if ( ctype_digit($portOrSocket) ) { + $socket = ':host='.$host . ';port='.$portOrSocket.';'; + } else { + $socket = ':unix_socket='.$portOrSocket.';'; + } } else { - $socket = ':unix_socket='.$portOrSocket; + $socket = ':host='.ZM_DB_HOST.';'; } } else { - $socket = ':host='.ZM_DB_HOST; + $socket = ':host=localhost;'; } try { @@ -49,9 +55,9 @@ function dbConnect() { PDO::MYSQL_ATTR_SSL_KEY => ZM_DB_SSL_CLIENT_KEY, PDO::MYSQL_ATTR_SSL_CERT => ZM_DB_SSL_CLIENT_CERT, ); - $dbConn = new PDO(ZM_DB_TYPE . $socket . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS, $dbOptions); + $dbConn = new PDO(ZM_DB_TYPE.$socket.'dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS, $dbOptions); } else { - $dbConn = new PDO(ZM_DB_TYPE . $socket . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS); + $dbConn = new PDO(ZM_DB_TYPE.$socket.'dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS); } $dbConn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); @@ -61,9 +67,12 @@ function dbConnect() { error_log('Unable to connect to ZM DB ' . $ex->getMessage()); $dbConn = null; } -} + return $dbConn; +} // end function dbConnect -dbConnect(); +if ( !dbConnect() ) { + ZM\Fatal("Failed db connection to $socket"); +} function dbDisconnect() { global $dbConn; diff --git a/web/includes/functions.php b/web/includes/functions.php index f640569c3..d5c98cb3f 100644 --- a/web/includes/functions.php +++ b/web/includes/functions.php @@ -1499,15 +1499,15 @@ function getLoad() { function getDiskPercent($path = ZM_DIR_EVENTS) { $total = disk_total_space($path); if ( $total === false ) { - Error('disk_total_space returned false. Verify the web account user has access to ' . $path); + ZM\Error('disk_total_space returned false. Verify the web account user has access to ' . $path); return 0; } elseif ( $total == 0 ) { - Error('disk_total_space indicates the following path has a filesystem size of zero bytes ' . $path); + ZM\Error('disk_total_space indicates the following path has a filesystem size of zero bytes ' . $path); return 100; } $free = disk_free_space($path); if ( $free === false ) { - Error('disk_free_space returned false. Verify the web account user has access to ' . $path); + ZM\Error('disk_free_space returned false. Verify the web account user has access to ' . $path); } $space = round((($total - $free) / $total) * 100); return $space; @@ -2063,7 +2063,7 @@ function logState() { if ( $count['Level'] <= ZM\Logger::PANIC ) $count['Level'] = ZM\Logger::FATAL; if ( !($levelCount = $levelCounts[$count['Level']]) ) { - Error('Unexpected Log level '.$count['Level']); + ZM\Error('Unexpected Log level '.$count['Level']); next; } if ( $levelCount[1] && $count['LevelCount'] >= $levelCount[1] ) { diff --git a/web/includes/logger.php b/web/includes/logger.php index 2b5463dfb..c12ee3477 100644 --- a/web/includes/logger.php +++ b/web/includes/logger.php @@ -1,7 +1,7 @@ terminate(); } - public function initialise( $options=array() ) { + public function initialise($options=array()) { if ( !empty($options['id']) ) $this->id = $options['id']; @@ -215,7 +215,7 @@ class Logger { } } } - return( $this->id ); + return $this->id; } public function level( $level ) { @@ -237,31 +237,31 @@ class Logger { $this->effectiveLevel = $this->level; if ( !$this->hasTerm ) { if ( $lastLevel < self::DEBUG && $this->level >= self::DEBUG ) { - $this->savedErrorReporting = error_reporting( E_ALL ); - $this->savedDisplayErrors = ini_set( 'display_errors', true ); + $this->savedErrorReporting = error_reporting(E_ALL); + $this->savedDisplayErrors = ini_set('display_errors', true); } elseif ( $lastLevel >= self::DEBUG && $this->level < self::DEBUG ) { - error_reporting( $this->savedErrorReporting ); - ini_set( 'display_errors', $this->savedDisplayErrors ); + error_reporting($this->savedErrorReporting); + ini_set('display_errors', $this->savedDisplayErrors); } } } - return( $this->level ); + return $this->level; } public function debugOn() { return( $this->effectiveLevel >= self::DEBUG ); } - public function termLevel( $termLevel ) { + public function termLevel($termLevel) { if ( isset($termLevel) ) { $termLevel = $this->limit($termLevel); if ( $this->termLevel != $termLevel ) $this->termLevel = $termLevel; } - return( $this->termLevel ); + return $this->termLevel; } - public function databaseLevel( $databaseLevel=NULL ) { + public function databaseLevel($databaseLevel=NULL) { if ( !is_null($databaseLevel) ) { $databaseLevel = $this->limit($databaseLevel); if ( $this->databaseLevel != $databaseLevel ) { @@ -269,7 +269,7 @@ class Logger { if ( $this->databaseLevel > self::NOLOG ) { if ( (include_once 'database.php') === FALSE ) { $this->databaseLevel = self::NOLOG; - Warning( 'Unable to write log entries to DB, database.php not found' ); + Warning('Unable to write log entries to DB, database.php not found'); } } } @@ -277,7 +277,7 @@ class Logger { return $this->databaseLevel; } - public function fileLevel( $fileLevel ) { + public function fileLevel($fileLevel) { if ( isset($fileLevel) ) { $fileLevel = $this->limit($fileLevel); if ( $this->fileLevel != $fileLevel ) { @@ -291,14 +291,14 @@ class Logger { return $this->fileLevel; } - public function weblogLevel( $weblogLevel ) { + public function weblogLevel($weblogLevel) { if ( isset($weblogLevel) ) { $weblogLevel = $this->limit($weblogLevel); if ( $this->weblogLevel != $weblogLevel ) { if ( $weblogLevel > self::NOLOG && $this->weblogLevel <= self::NOLOG ) { - $this->savedLogErrors = ini_set( 'log_errors', true ); + $this->savedLogErrors = ini_set('log_errors', true); } elseif ( $weblogLevel <= self::NOLOG && $this->weblogLevel > self::NOLOG ) { - ini_set( 'log_errors', $this->savedLogErrors ); + ini_set('log_errors', $this->savedLogErrors); } $this->weblogLevel = $weblogLevel; } @@ -306,7 +306,7 @@ class Logger { return $this->weblogLevel; } - public function syslogLevel( $syslogLevel ) { + public function syslogLevel($syslogLevel) { if ( isset($syslogLevel) ) { $syslogLevel = $this->limit($syslogLevel); if ( $this->syslogLevel != $syslogLevel ) { @@ -353,7 +353,7 @@ class Logger { fclose($this->logFd); } - public function logPrint( $level, $string, $file=NULL, $line=NULL ) { + public function logPrint($level, $string, $file=NULL, $line=NULL) { if ( $level > $this->effectiveLevel ) { return; } @@ -375,21 +375,21 @@ class Logger { $rootPath = getcwd(); else $rootPath = $_SERVER['DOCUMENT_ROOT']; - $file = preg_replace('/^'.addcslashes($rootPath,'/').'\/?/', '', $file); + $file = preg_replace('/^'.addcslashes($rootPath, '/').'\/?/', '', $file); } } if ( $this->useErrorLog ) { $message .= ' at '.$file.' line '.$line; - } else { - $message = $message; } if ( $level <= $this->termLevel ) { - if ( $this->hasTerm ) + if ( $this->hasTerm ) { print($message."\n"); - else - print(preg_replace("/\n/", '
', htmlspecialchars($message)).'
'); + } else { + // Didn't we already replace all newlines with spaces above? + print(preg_replace('/\n/', '
', htmlspecialchars($message)).'
'); + } } if ( $level <= $this->fileLevel ) { @@ -402,6 +402,9 @@ class Logger { } } else if ( $this->logFd ) { fprintf($this->logFd, $message."\n"); + } else { + $this->fileLevel = self::NOLOG; + Error('No logFd but have fileLevel logging!?'); } } diff --git a/web/lang/en_gb.php b/web/lang/en_gb.php index 0d5c341ff..64e98eb68 100644 --- a/web/lang/en_gb.php +++ b/web/lang/en_gb.php @@ -255,7 +255,10 @@ $SLANG = array( 'Command' => 'Command', 'ConcurrentFilter' => 'Run filter concurrently', 'Config' => 'Config', + 'ConfigOptions' => 'ConfigOptions', + 'ConfigType' => 'Config Type', 'ConfiguredFor' => 'Configured for', + 'ConfigURL' => 'Config Base URL', 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', 'ConfirmPassword' => 'Confirm Password', 'ConjAnd' => 'and', @@ -384,6 +387,7 @@ $SLANG = array( 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnExtdect' => 'Extdect', // Added 2014.12.14. 'Focus' => 'Focus', 'ForceAlarm' => 'Force Alarm', 'Format' => 'Format', @@ -487,6 +491,7 @@ $SLANG = array( 'MaxZoomStep' => 'Max Zoom Step', 'MediumBW' => 'Medium B/W', 'Medium' => 'Medium', + 'MetaConfig' => 'Meta Config', 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', 'MinBlobAreaLtMax' => 'Minimum blob area should be less than maximum', @@ -815,7 +820,6 @@ $SLANG = array( 'ViewEvent' => 'View Event', 'ViewPaged' => 'View Paged', 'View' => 'View', - 'V4L' => 'V4L', 'V4LCapturesPerFrame' => 'Captures Per Frame', 'V4LMultiBuffer' => 'Multi Buffering', 'Wake' => 'Wake', diff --git a/web/skins/classic/includes/functions.php b/web/skins/classic/includes/functions.php index 51a4a0820..3d60fde3e 100644 --- a/web/skins/classic/includes/functions.php +++ b/web/skins/classic/includes/functions.php @@ -423,13 +423,16 @@ if ( (!ZM_OPT_USE_AUTH) or $user ) { if ( count($storage_areas) <= 4 ) echo implode(', ', array_map($func, $storage_areas)); $shm_percent = getDiskPercent(ZM_PATH_MAP); + $shm_total_space = disk_total_space(ZM_PATH_MAP); + $shm_used = $shm_total_space - disk_free_space(ZM_PATH_MAP); + $class = ''; if ( $shm_percent > 98 ) { $class = 'error'; } else if ( $shm_percent > 90 ) { $class = 'warning'; } - echo ' '.ZM_PATH_MAP.': '.$shm_percent.'%'; + echo ' '.ZM_PATH_MAP.': '.$shm_percent.'%'; ?> diff --git a/web/skins/classic/views/console.php b/web/skins/classic/views/console.php index 71c60b6f0..98420783b 100644 --- a/web/skins/classic/views/console.php +++ b/web/skins/classic/views/console.php @@ -205,6 +205,7 @@ getBodyTopHTML(); +
@@ -390,9 +391,10 @@ for( $monitor_i = 0; $monitor_i < count($displayMonitors); $monitor_i += 1 ) { - + -
+ +
diff --git a/web/skins/classic/views/control.php b/web/skins/classic/views/control.php index f2fe01f3f..9fad31c41 100644 --- a/web/skins/classic/views/control.php +++ b/web/skins/classic/views/control.php @@ -32,7 +32,7 @@ if ( !empty($_REQUEST['group']) ) { $mid = !empty($_REQUEST['mid']) ? validInt($_REQUEST['mid']) : 0; -$sql = "SELECT m.* FROM Monitors m WHERE m.Function != 'None' AND m.Controllable = 1$groupSql ORDER BY Sequence"; +$sql = "SELECT m.* FROM Monitors m WHERE m.`Function` != 'None' AND m.`Controllable` = 1$groupSql ORDER BY `Sequence`"; $mids = array(); foreach ( dbFetchAll($sql, false, $params) as $row ) { if ( !visibleMonitor($row['Id']) ) { diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js index 8b51e0cec..bddeaaee9 100644 --- a/web/skins/classic/views/js/event.js +++ b/web/skins/classic/views/js/event.js @@ -285,7 +285,7 @@ function getCmdResponse( respObj, respText ) { } } // end if haev a new auth hash - streamCmdTimer = streamQuery.delay( streamTimeout ); //Timeout is refresh rate for progressBox and time display + streamCmdTimer = streamQuery.delay(streamTimeout); //Timeout is refresh rate for progressBox and time display } var streamReq = new Request.JSON( { @@ -308,7 +308,7 @@ function pauseClicked() { streamPause(); } -function streamPause( ) { +function streamPause() { $j('#modeValue').html('Paused'); setButtonState( $('pauseBtn'), 'active' ); setButtonState( $('playBtn'), 'inactive' ); diff --git a/web/skins/classic/views/js/montage.js b/web/skins/classic/views/js/montage.js index 0a281dd01..56f1ac24a 100644 --- a/web/skins/classic/views/js/montage.js +++ b/web/skins/classic/views/js/montage.js @@ -212,7 +212,8 @@ function Monitor(monitorData) { * @param {*} element - the event data passed by onchange callback */ function selectLayout(element) { - layout = $j(element).val(); + var ddm = $j('#zmMontageLayout'); + layout = ddm.val(); if ( layout_id = parseInt(layout) ) { layout = layouts[layout]; @@ -231,6 +232,7 @@ function selectLayout(element) { if ( layout.Positions['default'] ) { styles = layout.Positions['default']; for ( style in styles ) { + console.log("Applying " + style + ' ' + styles[style]); monitor_frame.css(style, styles[style]); } } else { @@ -241,7 +243,6 @@ function selectLayout(element) { styles = layout.Positions['mId'+monitor.id]; for ( style in styles ) { monitor_frame.css(style, styles[style]); - console.log("Applying " + style + ' : ' + styles[style]); } } else { console.log("No Monitor styles to apply"); diff --git a/web/skins/classic/views/js/onvifprobe.js b/web/skins/classic/views/js/onvifprobe.js index 71cb5e16f..4f10e5c29 100644 --- a/web/skins/classic/views/js/onvifprobe.js +++ b/web/skins/classic/views/js/onvifprobe.js @@ -33,3 +33,7 @@ function configureButtons(element) { form.saveBtn.disabled = (form.probe.selectedIndex==0); } } + +function changeInterface(element) { + gotoStep1(element); +} diff --git a/web/skins/classic/views/js/timeline.js b/web/skins/classic/views/js/timeline.js index 8d3f01d4c..8742ac67b 100644 --- a/web/skins/classic/views/js/timeline.js +++ b/web/skins/classic/views/js/timeline.js @@ -36,14 +36,14 @@ function createEventHtml(zm_event, frame) { return eventHtml; } -function showEventDetail( eventHtml ) { - $('instruction').addClass( 'hidden' ); +function showEventDetail(eventHtml) { + $('instruction').addClass('hidden'); $('eventData').empty(); - $('eventData').adopt( eventHtml ); - $('eventData').removeClass( 'hidden' ); + $('eventData').adopt(eventHtml); + $('eventData').removeClass('hidden'); } -function eventDataResponse( respObj, respText ) { +function eventDataResponse(respObj, respText) { var zm_event = respObj.event; if ( !zm_event ) { console.log('Null event'); @@ -179,7 +179,10 @@ function loadEventImage( imagePath, eid, fid, width, height, fps, videoName, dur eventData.addEvent('click', showEvent.pass()); } -function tlZoomBounds( minTime, maxTime ) { +function tlZoomBounds(event) { + var target = event.target; + var minTime = target.getAttribute('data-zoom-min-time'); + var maxTime = target.getAttribute('data-zoom-max-time'); location.replace('?view='+currentView+filterQuery+'&minTime='+minTime+'&maxTime='+maxTime); } @@ -194,14 +197,20 @@ function tlPanRight() { location.replace('?view='+currentView+filterQuery+'&midTime='+maxTime+'&range='+range); } -window.addEventListener("DOMContentLoaded", function() { - document.querySelectorAll("div.event").forEach(function(el) { +window.addEventListener('DOMContentLoaded', function() { + // These look like the code in skin.js, but that code doesn't select for divs. + document.querySelectorAll('div.event').forEach(function(el) { el.onclick = window[el.getAttribute('data-on-click-this')].bind(el, el); el.onmouseover = window[el.getAttribute('data-on-mouseover-this')].bind(el, el); }); - document.querySelectorAll("div.activity").forEach(function(el) { + document.querySelectorAll('div.activity').forEach(function(el) { el.onclick = window[el.getAttribute('data-on-click-this')].bind(el, el); el.onmouseover = window[el.getAttribute('data-on-mouseover-this')].bind(el, el); }); + document.querySelectorAll('div.zoom').forEach(function(el) { + el.onclick = function(ev) { + window[el.getAttribute('data-on-click')](ev); + }; + }); }); diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js index 8a38afea4..d1af6082d 100644 --- a/web/skins/classic/views/js/watch.js +++ b/web/skins/classic/views/js/watch.js @@ -695,12 +695,11 @@ function getControlResponse(respObj, respText) { function controlCmd(event) { button = event.target; control = button.getAttribute('value'); - xtell = button.getAttribute('xtell'); - ytell = button.getAttribute('ytell'); + xtell = button.getAttribute('data-xtell'); + ytell = button.getAttribute('data-ytell'); var locParms = ''; if ( event && (xtell || ytell) ) { - console.log(event); var target = event.target; var coords = $(target).getCoordinates(); @@ -849,7 +848,7 @@ function initPage() { if ( refreshApplet && appletRefreshTime ) { appletRefresh.delay(appletRefreshTime*1000); } - if ( scale == 'auto' ) changeScale(); + if ( scale == '0' || scale == 'auto' ) changeScale(); if ( window.history.length == 1 ) { $j('#closeControl').html(''); } diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 9437cdde3..4e8c2da8d 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -321,31 +321,31 @@ $orientations = array( ); $deinterlaceopts = array( - 'Disabled' => 0x00000000, - 'Four field motion adaptive - Soft' => 0x00001E04, /* 30 change */ - 'Four field motion adaptive - Medium' => 0x00001404, /* 20 change */ - 'Four field motion adaptive - Hard' => 0x00000A04, /* 10 change */ - 'Discard' => 0x00000001, - 'Linear' => 0x00000002, - 'Blend' => 0x00000003, - 'Blend (25%)' => 0x00000205 - ); + 0x00000000 => 'Disabled', + 0x00001E04 => 'Four field motion adaptive - Soft', /* 30 change */ + 0x00001404 => 'Four field motion adaptive - Medium', /* 20 change */ + 0x00000A04 => 'Four field motion adaptive - Hard', /* 10 change */ + 0x00000001 => 'Discard', + 0x00000002 => 'Linear', + 0x00000003 => 'Blend', + 0x00000205 => 'Blend (25%)', +); $deinterlaceopts_v4l2 = array( - 'Disabled' => 0x00000000, - 'Four field motion adaptive - Soft' => 0x00001E04, /* 30 change */ - 'Four field motion adaptive - Medium' => 0x00001404, /* 20 change */ - 'Four field motion adaptive - Hard' => 0x00000A04, /* 10 change */ - 'Discard' => 0x00000001, - 'Linear' => 0x00000002, - 'Blend' => 0x00000003, - 'Blend (25%)' => 0x00000205, - 'V4L2: Capture top field only' => 0x02000000, - 'V4L2: Capture bottom field only' => 0x03000000, - 'V4L2: Alternate fields (Bob)' => 0x07000000, - 'V4L2: Progressive' => 0x01000000, - 'V4L2: Interlaced' => 0x04000000 - ); + 0x00000000 => 'Disabled', + 0x00001E04 => 'Four field motion adaptive - Soft', /* 30 change */ + 0x00001404 => 'Four field motion adaptive - Medium', /* 20 change */ + 0x00000A04 => 'Four field motion adaptive - Hard', /* 10 change */ + 0x00000001 => 'Discard', + 0x00000002 => 'Linear', + 0x00000003 => 'Blend', + 0x00000205 => 'Blend (25%)', + 0x02000000 => 'V4L2: Capture top field only', + 0x03000000 => 'V4L2: Capture bottom field only', + 0x07000000 => 'V4L2: Alternate fields (Bob)', + 0x01000000 => 'V4L2: Progressive', + 0x04000000 => 'V4L2: Interlaced', +); $fastblendopts = array( 'No blending' => 0, @@ -413,6 +413,7 @@ if ( canEdit('Monitors') ) { $tabs = array(); $tabs['general'] = translate('General'); $tabs['source'] = translate('Source'); +$tabs['onvif'] = translate('ONVIF'); if ( $monitor->Type() != 'WebSite' ) { $tabs['storage'] = translate('Storage'); $tabs['timestamp'] = translate('Timestamp'); @@ -488,6 +489,14 @@ if ( ZM_HAS_V4L && ($tab != 'source' || $monitor->Type() != 'Local') ) { + + + + +Type()!= 'Remote' ) { ?> @@ -730,8 +739,8 @@ switch ( $tab ) { continue; if ( $optCount && ($optCount%$breakCount == 0) ) echo '
'; - echo 'Triggers()) && in_array($optTrigger, $monitor->Triggers()) ) ? ' checked="checked"' : ''). '/> '. $optTrigger; + echo 'Triggers()) && in_array($optTrigger, $monitor->Triggers()) ) ? ' checked="checked"' : ''). '/> '. $optTrigger; $optCount ++; } # end foreach trigger option if ( !$optCount ) { @@ -743,7 +752,29 @@ switch ( $tab ) { } break; } - case 'source' : + case 'onvif' : + { +?> + + + + + + + + + + + + + + + + +Type() == 'Local' ) { ?> @@ -798,7 +829,7 @@ include('_monitor_source_nvsocket.php'); -Type() == 'Remote' ) { ?> Protocol(), "updateMethods( this );if(this.value=='rtsp'){\$('RTSPDescribe').setStyle('display','table-row');}else{\$('RTSPDescribe').hide();}" ); ?> @@ -807,7 +838,7 @@ include('_monitor_source_nvsocket.php'); -Protocol() || $monitor->Protocol() == 'http' ) { echo htmlSelect('newMonitor[Method]', $httpMethods, $monitor->Method() ); } else { @@ -1075,7 +1106,7 @@ include('_monitor_source_nvsocket.php'); - ControlId()); + ControlId()); if ( canEdit('Control') ) { echo ' '.makePopupLink('?view=controlcaps', 'zmControlCaps', 'controlcaps', translate('Edit')); } @@ -1103,7 +1134,7 @@ if ( canEdit('Control') ) { - translate('None'), '0' => translate('Home'), @@ -1205,7 +1236,7 @@ echo htmlSelect('newMonitor[ReturnLocation]', $return_options, $monitor->ReturnL      - sync + sync diff --git a/web/skins/classic/views/monitorprobe.php b/web/skins/classic/views/monitorprobe.php index 9cab32b3e..a76c67810 100644 --- a/web/skins/classic/views/monitorprobe.php +++ b/web/skins/classic/views/monitorprobe.php @@ -39,16 +39,18 @@ function probeV4L() { } $monitors = array(); - foreach ( dbFetchAll("SELECT Id, Name, Device,Channel FROM Monitors WHERE Type = 'Local' ORDER BY Device, Channel" ) as $monitor ) + foreach ( dbFetchAll("SELECT Id, Name, Device, Channel FROM Monitors WHERE Type = 'Local' ORDER BY Device, Channel" ) as $monitor ) $monitors[$monitor['Device'].':'.$monitor['Channel']] = $monitor; $devices = array(); $preferredStandards = array('PAL', 'NTSC'); $preferredFormats = array('BGR3', 'RGB3', 'YUYV', 'UYVY', 'JPEG', 'MJPG', '422P', 'YU12', 'GREY'); foreach ( $output as $line ) { - if ( !preg_match('/^d:([^|]+).*S:([^|]*).*F:([^|]+).*I:(\d+)\|(.+)$/', $line, $deviceMatches) ) - ZM\Fatal("Can't parse command output '$line'"); - $standards = explode('/',$deviceMatches[2]); + if ( !preg_match('/^d:([^|]+).*S:([^|]*).*F:([^|]+).*I:(\d+)\|(.+)$/', $line, $deviceMatches) ) { + ZM\Error("Can't parse command output '$line'"); + continue; + } + $standards = explode('/', $deviceMatches[2]); $preferredStandard = false; foreach ( $preferredStandards as $standard ) { if ( in_array( $standard, $standards ) ) { @@ -56,7 +58,7 @@ function probeV4L() { break; } } - $formats = explode('/',$deviceMatches[3]); + $formats = explode('/', $deviceMatches[3]); $preferredFormat = false; foreach ( $preferredFormats as $format ) { if ( in_array($format, $formats) ) { @@ -73,8 +75,10 @@ function probeV4L() { ); $inputs = array(); for ( $i = 0; $i < $deviceMatches[4]; $i++ ) { - if ( !preg_match('/i'.$i.':([^|]+)\|i'.$i.'T:([^|]+)\|/', $deviceMatches[5], $inputMatches) ) - ZM\Fatal("Can't parse input '".$deviceMatches[5]."'"); + if ( !preg_match('/i'.$i.':([^|]+)\|i'.$i.'T:([^|]+)\|/', $deviceMatches[5], $inputMatches) ) { + ZM\Error("Can't parse input '".$deviceMatches[5]."'"); + continue; + } if ( $inputMatches[2] == 'Camera' ) { $input = array( 'index' => $i, @@ -101,7 +105,7 @@ function probeV4L() { $inputMonitor['Colours'] = 1; $inputMonitor['SignalCheckColour'] = '#000023'; } - $inputDesc = base64_encode(serialize($inputMonitor)); + $inputDesc = base64_encode(json_encode($inputMonitor)); $inputString = $deviceMatches[1].', chan '.$i.($input['free']?(' - '.translate('Available')):(' ('.$monitors[$input['id']]['Name'].')')); $inputs[] = $input; $cameras[$inputDesc] = $inputString; @@ -288,7 +292,7 @@ function probeNetwork() { if ( isset($macBases[$macRoot]) ) { $macBase = $macBases[$macRoot]; $camera = call_user_func($macBase['probeFunc'], $ip); - $sourceDesc = base64_encode(serialize($camera['monitor'])); + $sourceDesc = base64_encode(json_encode($camera['monitor'])); $sourceString = $camera['model'].' @ '.$host; if ( isset($monitors[$ip]) ) { $monitor = $monitors[$ip]; @@ -330,7 +334,7 @@ xhtmlHeaders(__FILE__, translate('MonitorProbe') );

- + 'configureButtons(this)')); ?>

diff --git a/web/skins/classic/views/onvifprobe.php b/web/skins/classic/views/onvifprobe.php index 8c5feb50b..95e1abeba 100644 --- a/web/skins/classic/views/onvifprobe.php +++ b/web/skins/classic/views/onvifprobe.php @@ -29,16 +29,17 @@ $cameras[0] = translate('ChooseDetectedCamera'); $profiles = array(); $profiles[0] = translate('ChooseDetectedProfile'); -function execONVIF( $cmd ) { +function execONVIF($cmd) { $shell_command = escapeshellcmd(ZM_PATH_BIN . "/zmonvif-probe.pl $cmd"); - exec( $shell_command, $output, $status ); + exec($shell_command, $output, $status); if ( $status ) { - $html_output = implode( '
', $output ); - ZM\Fatal( "Unable to probe network cameras, status is '$status'. Output was:

- $html_output

- Please the following command from a command line for more information:

$shell_command" + $html_output = implode('
', $output); + ZM\Error("Unable to probe network cameras, status is '$status'. Output was: + $html_output + Please run the following command from a command line for more information: + $shell_command" ); } else { ZM\Logger::Debug('Results from probe: '.implode('
', $output)); @@ -49,7 +50,8 @@ function execONVIF( $cmd ) { function probeCameras($localIp) { $cameras = array(); - if ( $lines = @execONVIF('probe') ) { + $lines = @execONVIF('probe 1.1,1.2'.(isset($_REQUEST['interface']) ? ' '.isset($_REQUEST['interface']) : '' )); + if ( $lines ) { foreach ( $lines as $line ) { $line = rtrim($line); if ( preg_match('|^(.+),(.+),\s\((.*)\)$|', $line, $matches) ) { @@ -62,18 +64,23 @@ function probeCameras($localIp) { 'Type' => 'Ffmpeg', 'Host' => $device_ep, 'SOAP' => $soapversion, + 'ConfigURL' => $device_ep, + 'ConfigOptions' => 'SOAP' . $soapversion, + 'Notes' => '', ), ); foreach ( preg_split('|,\s*|', $matches[3]) as $attr_val ) { if ( preg_match('|(.+)=\'(.*)\'|', $attr_val, $tokens) ) { if ( $tokens[1] == 'hardware' ) { $camera['model'] = $tokens[2]; - } elseif ( $tokens[1] == 'name' ) { + } else if ( $tokens[1] == 'name' ) { $camera['monitor']['Name'] = $tokens[2]; - } elseif ( $tokens[1] == 'location' ) { - // $camera['location'] = $tokens[2]; + } else if ( $tokens[1] == 'type' ) { + } else if ( $tokens[1] == 'location' or $tokens[1] == 'location/city' or $tokens[1] == 'location/country' ) { + $camera['monitor']['Notes'] .= $tokens[1].'='.$tokens[2]."\n"; + // $camera['location'] = $tokens[2]; } else { - ZM\Logger::Debug('Unknown token ' . $tokens[1]); + ZM\Logger::Debug('Unknown token '.$tokens[1].' = '.$tokens[2]); } } } // end foreach token @@ -163,6 +170,48 @@ if ( !isset($_REQUEST['step']) || ($_REQUEST['step'] == '1') ) {

+

+ ', $output); + ZM\Error("Unable to list network interfaces, status is '$status'. Output was:

$html_output"); + } else { + foreach ( $output as $line ) { + if ( preg_match('/^\d+: ([[:alnum:]]+):/', $line, $matches ) ) { + if ( $matches[1] != 'lo' ) { + $interfaces[$matches[1]] = $matches[1]; + } else { + ZM\Logger::Debug("No match for $line"); + } + } + } + } + $routes = array(); + exec('ip route', $output, $status); + if ( $status ) { + $html_output = implode('
', $output); + ZM\Error("Unable to list network interfaces, status is '$status'. Output was:

$html_output"); + } else { + foreach ( $output as $line ) { + if ( preg_match('/^default via [.[:digit:]]+ dev ([[:alnum:]]+)/', $line, $matches) ) { + $default_interface = $matches[1]; + } else if ( preg_match('/^([.\/[:digit:]]+) dev ([[:alnum:]]+)/', $line, $matches) ) { + $interfaces[$matches[2]] .= ' ' . $matches[1]; + } + } # end foreach line of output + } + + echo htmlSelect('interface', $interfaces, + (isset($_REQUEST['interface']) ? $_REQUEST['interface'] : $default_interface), + array('data-on-change-this'=>'changeInterface') ); + +?> +

+

'configureButtons')); ?> @@ -178,6 +227,7 @@ if ( !isset($_REQUEST['step']) || ($_REQUEST['step'] == '1') ) {

+
diff --git a/web/skins/classic/views/timeline.php b/web/skins/classic/views/timeline.php index 794b99c20..cab313f52 100644 --- a/web/skins/classic/views/timeline.php +++ b/web/skins/classic/views/timeline.php @@ -154,7 +154,7 @@ if ( isset($_REQUEST['midTime']) ) if ( isset($_REQUEST['maxTime']) ) $maxTime = validHtmlStr($_REQUEST['maxTime']); -if ( isset($range) ) { +if ( isset($range) and validInt($range) ) { $halfRange = (int)($range/2); if ( isset($midTime) ) { $midTimeT = strtotime($midTime); @@ -616,7 +616,7 @@ function drawXGrid( $chart, $scale, $labelClass, $tickClass, $gridClass, $zoomCl $zoomMinTime = strftime( STRF_FMT_DATETIME_DB, (int)($chart['data']['x']['lo'] + ($lastTick * $chart['data']['x']['density'])) ); $zoomMaxTime = strftime( STRF_FMT_DATETIME_DB, (int)($chart['data']['x']['lo'] + ($i * $chart['data']['x']['density'])) ); ?> -
+
-
+
diff --git a/web/skins/classic/views/watch.php b/web/skins/classic/views/watch.php index e1f54e29d..70e5f410a 100644 --- a/web/skins/classic/views/watch.php +++ b/web/skins/classic/views/watch.php @@ -71,7 +71,7 @@ if ( canView('Control') && $monitor->Type() == 'Local' ) { -
:
+