onvif-python 0.2.4__py3-none-any.whl → 0.2.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- onvif/__init__.py +1 -2
- onvif/cli/interactive.py +2 -2
- onvif/cli/main.py +213 -5
- onvif/services/devicemgmt.py +3 -0
- onvif/services/media2.py +17 -0
- onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl +9 -9
- onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl +53 -0
- onvif/wsdl/ver10/schema/metadatastream.xsd +2 -0
- onvif/wsdl/ver10/schema/onvif.xsd +224 -0
- onvif/wsdl/ver20/media/wsdl/media.wsdl +148 -0
- {onvif_python-0.2.4.dist-info → onvif_python-0.2.6.dist-info}/METADATA +41 -24
- {onvif_python-0.2.4.dist-info → onvif_python-0.2.6.dist-info}/RECORD +16 -16
- {onvif_python-0.2.4.dist-info → onvif_python-0.2.6.dist-info}/WHEEL +0 -0
- {onvif_python-0.2.4.dist-info → onvif_python-0.2.6.dist-info}/entry_points.txt +0 -0
- {onvif_python-0.2.4.dist-info → onvif_python-0.2.6.dist-info}/licenses/LICENSE.md +0 -0
- {onvif_python-0.2.4.dist-info → onvif_python-0.2.6.dist-info}/top_level.txt +0 -0
onvif/__init__.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# onvif/__init__.py
|
|
2
2
|
|
|
3
3
|
from .client import ONVIFClient
|
|
4
|
-
from .operator import
|
|
4
|
+
from .operator import CacheMode
|
|
5
5
|
from .utils import (
|
|
6
6
|
ONVIFWSDL,
|
|
7
7
|
ONVIFOperationException,
|
|
@@ -14,7 +14,6 @@ from .cli import main as ONVIFCLI
|
|
|
14
14
|
|
|
15
15
|
__all__ = [
|
|
16
16
|
"ONVIFClient",
|
|
17
|
-
"ONVIFOperator",
|
|
18
17
|
"CacheMode",
|
|
19
18
|
"ONVIFWSDL",
|
|
20
19
|
"ONVIFOperationException",
|
onvif/cli/interactive.py
CHANGED
|
@@ -194,7 +194,7 @@ class InteractiveShell(cmd.Cmd):
|
|
|
194
194
|
" / __ \\/ | / / | / / _/ ____/",
|
|
195
195
|
" / / / / |/ /| | / // // /_ ",
|
|
196
196
|
"/ /_/ / /| / | |/ // // __/ ",
|
|
197
|
-
"\\____/_/ |_/ |___/___/_/ v0.2.
|
|
197
|
+
"\\____/_/ |_/ |___/___/_/ v0.2.6",
|
|
198
198
|
" ",
|
|
199
199
|
]
|
|
200
200
|
|
|
@@ -1400,7 +1400,7 @@ class InteractiveShell(cmd.Cmd):
|
|
|
1400
1400
|
super().do_help(line)
|
|
1401
1401
|
else:
|
|
1402
1402
|
help_text = f"""
|
|
1403
|
-
{colorize('ONVIF Interactive Shell — v0.2.
|
|
1403
|
+
{colorize('ONVIF Interactive Shell — v0.2.6', 'cyan')}\n{colorize('https://github.com/nirsimetri/onvif-python', 'white')}
|
|
1404
1404
|
|
|
1405
1405
|
{colorize('Basic Commands:', 'yellow')}
|
|
1406
1406
|
capabilities, caps - Show device capabilities
|
onvif/cli/main.py
CHANGED
|
@@ -7,6 +7,7 @@ import getpass
|
|
|
7
7
|
import sqlite3
|
|
8
8
|
import os
|
|
9
9
|
import shutil
|
|
10
|
+
import json
|
|
10
11
|
from datetime import datetime
|
|
11
12
|
from typing import Any, Optional, Tuple
|
|
12
13
|
|
|
@@ -21,7 +22,7 @@ def create_parser():
|
|
|
21
22
|
"""Create argument parser for ONVIF CLI"""
|
|
22
23
|
parser = argparse.ArgumentParser(
|
|
23
24
|
prog="onvif",
|
|
24
|
-
description=f"{colorize('ONVIF Terminal Client', 'yellow')} — v0.2.
|
|
25
|
+
description=f"{colorize('ONVIF Terminal Client', 'yellow')} — v0.2.6\nhttps://github.com/nirsimetri/onvif-python",
|
|
25
26
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
26
27
|
epilog=f"""
|
|
27
28
|
Examples:
|
|
@@ -42,7 +43,12 @@ Examples:
|
|
|
42
43
|
|
|
43
44
|
# Direct command execution
|
|
44
45
|
{colorize('onvif', 'yellow')} devicemgmt GetCapabilities Category=All --host 192.168.1.17 --port 8000 --username admin --password admin123
|
|
45
|
-
{colorize('onvif', 'yellow')} ptz ContinuousMove ProfileToken=Profile_1 Velocity={{
|
|
46
|
+
{colorize('onvif', 'yellow')} ptz ContinuousMove ProfileToken=Profile_1 Velocity={{'PanTilt': {{'x': -0.1, 'y': 0}}}} -H 192.168.1.17 -P 8000 -u admin -p admin123
|
|
47
|
+
|
|
48
|
+
# Save output to file
|
|
49
|
+
{colorize('onvif', 'yellow')} devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
|
|
50
|
+
{colorize('onvif', 'yellow')} media GetProfiles --host 192.168.1.17 --port 8000 --username admin --password admin123 --output profiles.xml
|
|
51
|
+
{colorize('onvif', 'yellow')} ptz GetConfigurations --host 192.168.1.17 --port 8000 --username admin --password admin123 --output ptz_config.txt --debug
|
|
46
52
|
|
|
47
53
|
# Interactive mode
|
|
48
54
|
{colorize('onvif', 'yellow')} --host 192.168.1.17 --port 8000 --username admin --password admin123 --interactive
|
|
@@ -139,6 +145,11 @@ Examples:
|
|
|
139
145
|
default=10,
|
|
140
146
|
help="Health check interval in seconds for interactive mode (default: 10)",
|
|
141
147
|
)
|
|
148
|
+
parser.add_argument(
|
|
149
|
+
"--output",
|
|
150
|
+
"-o",
|
|
151
|
+
help="Save command output to file. Supports .json, .xml extensions for format detection, or plain text. XML format automatically enables debug mode for SOAP capture.",
|
|
152
|
+
)
|
|
142
153
|
|
|
143
154
|
# Service and method (for direct command execution)
|
|
144
155
|
parser.add_argument(
|
|
@@ -177,7 +188,7 @@ def main():
|
|
|
177
188
|
|
|
178
189
|
# Show ONVIF CLI version
|
|
179
190
|
if args.version:
|
|
180
|
-
print(colorize("0.2.
|
|
191
|
+
print(colorize("0.2.6", "yellow"))
|
|
181
192
|
sys.exit(0)
|
|
182
193
|
|
|
183
194
|
# Handle product search
|
|
@@ -196,6 +207,12 @@ def main():
|
|
|
196
207
|
f"Either {colorize('--interactive', 'white')}/{colorize('-i', 'white')} mode or {colorize('service/method', 'white')} must be specified"
|
|
197
208
|
)
|
|
198
209
|
|
|
210
|
+
# Validate output argument
|
|
211
|
+
if args.output and args.interactive:
|
|
212
|
+
parser.error(
|
|
213
|
+
f"{colorize('--output', 'white')} cannot be used with {colorize('--interactive', 'white')} mode"
|
|
214
|
+
)
|
|
215
|
+
|
|
199
216
|
# Handle discovery mode
|
|
200
217
|
if args.discover:
|
|
201
218
|
if args.host:
|
|
@@ -260,6 +277,11 @@ def main():
|
|
|
260
277
|
|
|
261
278
|
try:
|
|
262
279
|
# Create ONVIF client
|
|
280
|
+
# Auto-enable debug mode if output format is XML
|
|
281
|
+
auto_debug = args.debug or (
|
|
282
|
+
args.output and args.output.lower().endswith(".xml")
|
|
283
|
+
)
|
|
284
|
+
|
|
263
285
|
client = ONVIFClient(
|
|
264
286
|
host=args.host,
|
|
265
287
|
port=args.port,
|
|
@@ -270,7 +292,7 @@ def main():
|
|
|
270
292
|
use_https=args.https,
|
|
271
293
|
verify_ssl=not args.no_verify,
|
|
272
294
|
apply_patch=not args.no_patch,
|
|
273
|
-
capture_xml=
|
|
295
|
+
capture_xml=auto_debug,
|
|
274
296
|
wsdl_dir=args.wsdl,
|
|
275
297
|
)
|
|
276
298
|
|
|
@@ -298,7 +320,17 @@ def main():
|
|
|
298
320
|
# Execute direct command
|
|
299
321
|
params_str = " ".join(args.params) if args.params else None
|
|
300
322
|
result = execute_command(client, args.service, args.method, params_str)
|
|
301
|
-
|
|
323
|
+
|
|
324
|
+
# Save output to file if specified
|
|
325
|
+
if args.output:
|
|
326
|
+
# Auto-enable debug mode for XML output
|
|
327
|
+
effective_debug = args.debug or args.output.lower().endswith(".xml")
|
|
328
|
+
save_output_to_file(result, args.output, effective_debug, client)
|
|
329
|
+
print(
|
|
330
|
+
f"{colorize('Output saved to:', 'green')} {colorize(args.output, 'white')}"
|
|
331
|
+
)
|
|
332
|
+
else:
|
|
333
|
+
print(str(result))
|
|
302
334
|
|
|
303
335
|
except KeyboardInterrupt:
|
|
304
336
|
print("\nOperation cancelled by user")
|
|
@@ -337,6 +369,182 @@ def execute_command(
|
|
|
337
369
|
return method(**params)
|
|
338
370
|
|
|
339
371
|
|
|
372
|
+
def save_output_to_file(
|
|
373
|
+
result: Any, output_path: str, debug_mode: bool, client: ONVIFClient
|
|
374
|
+
) -> None:
|
|
375
|
+
"""Save command output to file in appropriate format based on file extension.
|
|
376
|
+
|
|
377
|
+
Args:
|
|
378
|
+
result: The ONVIF command result
|
|
379
|
+
output_path: Path to output file
|
|
380
|
+
debug_mode: Whether debug mode is enabled (for XML capture)
|
|
381
|
+
client: ONVIFClient instance (for accessing XML plugin)
|
|
382
|
+
"""
|
|
383
|
+
try:
|
|
384
|
+
# Determine output format based on file extension
|
|
385
|
+
_, ext = os.path.splitext(output_path.lower())
|
|
386
|
+
|
|
387
|
+
if ext == ".json":
|
|
388
|
+
# Prepare output data
|
|
389
|
+
output_data = {}
|
|
390
|
+
|
|
391
|
+
# JSON format
|
|
392
|
+
output_data["result"] = _serialize_for_json(result)
|
|
393
|
+
output_data["timestamp"] = datetime.now().isoformat()
|
|
394
|
+
output_data["raw_result"] = str(result) # Add raw string as fallback
|
|
395
|
+
|
|
396
|
+
# Add XML data if debug mode is enabled and XML plugin is available
|
|
397
|
+
if debug_mode and client.xml_plugin:
|
|
398
|
+
output_data["debug"] = {
|
|
399
|
+
"last_request_xml": client.xml_plugin.last_sent_xml,
|
|
400
|
+
"last_response_xml": client.xml_plugin.last_received_xml,
|
|
401
|
+
"last_operation": client.xml_plugin.last_operation,
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
with open(output_path, "w", encoding="utf-8") as f:
|
|
405
|
+
json.dump(output_data, f, indent=2, ensure_ascii=False)
|
|
406
|
+
|
|
407
|
+
elif ext == ".xml":
|
|
408
|
+
# XML format - prioritize raw SOAP XML over parsed result
|
|
409
|
+
if client.xml_plugin and client.xml_plugin.last_received_xml:
|
|
410
|
+
# Save the raw SOAP response XML with minimal wrapper
|
|
411
|
+
content = f"""<?xml version="1.0" encoding="UTF-8"?>
|
|
412
|
+
<!-- ONVIF SOAP Response -->
|
|
413
|
+
<!-- Timestamp: {datetime.now().isoformat()} -->
|
|
414
|
+
<!-- Operation: {client.xml_plugin.last_operation or 'Unknown'} -->
|
|
415
|
+
|
|
416
|
+
{client.xml_plugin.last_received_xml}
|
|
417
|
+
"""
|
|
418
|
+
else:
|
|
419
|
+
# Fallback: Simple XML wrapper for the parsed result
|
|
420
|
+
content = f"""<?xml version="1.0" encoding="UTF-8"?>
|
|
421
|
+
<!-- ONVIF Command Output (Parsed Result) -->
|
|
422
|
+
<!-- Timestamp: {datetime.now().isoformat()} -->
|
|
423
|
+
<!-- Note: Raw SOAP XML not available. Enable --debug for full SOAP capture. -->
|
|
424
|
+
<onvif_result>
|
|
425
|
+
<![CDATA[
|
|
426
|
+
{str(result)}
|
|
427
|
+
]]>
|
|
428
|
+
</onvif_result>
|
|
429
|
+
"""
|
|
430
|
+
|
|
431
|
+
with open(output_path, "w", encoding="utf-8") as f:
|
|
432
|
+
f.write(content)
|
|
433
|
+
|
|
434
|
+
else:
|
|
435
|
+
# Plain text format (default)
|
|
436
|
+
content = "ONVIF Command Output\n"
|
|
437
|
+
content += f"Timestamp: {datetime.now().isoformat()}\n"
|
|
438
|
+
content += f"{'='*50}\n\n"
|
|
439
|
+
content += str(result)
|
|
440
|
+
|
|
441
|
+
# Add debug information if available
|
|
442
|
+
if debug_mode and client.xml_plugin:
|
|
443
|
+
content += f"\n\n{'='*50}\n"
|
|
444
|
+
content += "DEBUG INFORMATION\n"
|
|
445
|
+
content += f"{'='*50}\n"
|
|
446
|
+
if client.xml_plugin.last_operation:
|
|
447
|
+
content += f"Operation: {client.xml_plugin.last_operation}\n\n"
|
|
448
|
+
if client.xml_plugin.last_sent_xml:
|
|
449
|
+
content += "SOAP Request:\n"
|
|
450
|
+
content += client.xml_plugin.last_sent_xml + "\n\n"
|
|
451
|
+
if client.xml_plugin.last_received_xml:
|
|
452
|
+
content += "SOAP Response:\n"
|
|
453
|
+
content += client.xml_plugin.last_received_xml + "\n"
|
|
454
|
+
|
|
455
|
+
with open(output_path, "w", encoding="utf-8") as f:
|
|
456
|
+
f.write(content)
|
|
457
|
+
|
|
458
|
+
except Exception as e:
|
|
459
|
+
print(f"{colorize('Error saving output:', 'red')} {e}", file=sys.stderr)
|
|
460
|
+
# Still print the result to console if file save fails
|
|
461
|
+
print(str(result))
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
def _serialize_for_json(obj: Any) -> Any:
|
|
465
|
+
"""Recursively serialize ONVIF objects for JSON output.
|
|
466
|
+
|
|
467
|
+
Args:
|
|
468
|
+
obj: Object to serialize
|
|
469
|
+
|
|
470
|
+
Returns:
|
|
471
|
+
JSON-serializable representation of the object
|
|
472
|
+
"""
|
|
473
|
+
if obj is None:
|
|
474
|
+
return None
|
|
475
|
+
elif isinstance(obj, (str, int, float, bool)):
|
|
476
|
+
return obj
|
|
477
|
+
elif isinstance(obj, datetime):
|
|
478
|
+
return obj.isoformat()
|
|
479
|
+
elif isinstance(obj, (list, tuple)):
|
|
480
|
+
return [_serialize_for_json(item) for item in obj]
|
|
481
|
+
elif isinstance(obj, dict):
|
|
482
|
+
return {key: _serialize_for_json(value) for key, value in obj.items()}
|
|
483
|
+
|
|
484
|
+
# Check if this is a Zeep object (has _xsd_type attribute)
|
|
485
|
+
elif hasattr(obj, "_xsd_type"):
|
|
486
|
+
result = {}
|
|
487
|
+
# Try to get all elements from XSD type
|
|
488
|
+
if hasattr(obj._xsd_type, "elements"):
|
|
489
|
+
for elem_name, elem_obj in obj._xsd_type.elements:
|
|
490
|
+
try:
|
|
491
|
+
value = getattr(obj, elem_name, None)
|
|
492
|
+
if value is not None:
|
|
493
|
+
result[elem_name] = _serialize_for_json(value)
|
|
494
|
+
except (AttributeError, TypeError):
|
|
495
|
+
# Skip elements that can't be accessed or have type issues
|
|
496
|
+
pass
|
|
497
|
+
|
|
498
|
+
# Also try regular attributes
|
|
499
|
+
for attr_name in dir(obj):
|
|
500
|
+
if not attr_name.startswith("_") and not callable(
|
|
501
|
+
getattr(obj, attr_name, None)
|
|
502
|
+
):
|
|
503
|
+
try:
|
|
504
|
+
attr_value = getattr(obj, attr_name)
|
|
505
|
+
if attr_value is not None and attr_name not in result:
|
|
506
|
+
result[attr_name] = _serialize_for_json(attr_value)
|
|
507
|
+
except (AttributeError, TypeError):
|
|
508
|
+
# Skip attributes that can't be accessed or have type issues
|
|
509
|
+
pass
|
|
510
|
+
|
|
511
|
+
return result
|
|
512
|
+
|
|
513
|
+
elif hasattr(obj, "__dict__"):
|
|
514
|
+
# Handle regular objects with attributes
|
|
515
|
+
result = {}
|
|
516
|
+
for key, value in obj.__dict__.items():
|
|
517
|
+
if not key.startswith("_"): # Skip private attributes
|
|
518
|
+
result[key] = _serialize_for_json(value)
|
|
519
|
+
|
|
520
|
+
# If result is empty, try to get attributes using dir()
|
|
521
|
+
if not result:
|
|
522
|
+
for attr_name in dir(obj):
|
|
523
|
+
if not attr_name.startswith("_") and not callable(
|
|
524
|
+
getattr(obj, attr_name, None)
|
|
525
|
+
):
|
|
526
|
+
try:
|
|
527
|
+
attr_value = getattr(obj, attr_name)
|
|
528
|
+
if attr_value is not None:
|
|
529
|
+
result[attr_name] = _serialize_for_json(attr_value)
|
|
530
|
+
except (AttributeError, TypeError):
|
|
531
|
+
# Skip attributes that can't be accessed or have type issues
|
|
532
|
+
pass
|
|
533
|
+
|
|
534
|
+
return result
|
|
535
|
+
elif hasattr(obj, "_value_1"):
|
|
536
|
+
# Handle zeep objects with special structure
|
|
537
|
+
return _serialize_for_json(obj._value_1)
|
|
538
|
+
else:
|
|
539
|
+
# Try to convert to dict using vars() if available
|
|
540
|
+
try:
|
|
541
|
+
obj_dict = vars(obj)
|
|
542
|
+
return _serialize_for_json(obj_dict)
|
|
543
|
+
except TypeError:
|
|
544
|
+
# Fallback to string representation
|
|
545
|
+
return str(obj)
|
|
546
|
+
|
|
547
|
+
|
|
340
548
|
def discover_devices(
|
|
341
549
|
timeout: int = 4, prefer_https: bool = False, filter_term: Optional[str] = None
|
|
342
550
|
) -> list:
|
onvif/services/devicemgmt.py
CHANGED
onvif/services/media2.py
CHANGED
|
@@ -313,3 +313,20 @@ class Media2(ONVIFService):
|
|
|
313
313
|
|
|
314
314
|
def GetPlayingAudioClips(self):
|
|
315
315
|
return self.operator.call("GetPlayingAudioClips")
|
|
316
|
+
|
|
317
|
+
def GetMulticastAudioDecoderConfigurationOptions(self, ConfigurationToken=None):
|
|
318
|
+
return self.operator.call(
|
|
319
|
+
"GetMulticastAudioDecoderConfigurationOptions",
|
|
320
|
+
ConfigurationToken=ConfigurationToken,
|
|
321
|
+
)
|
|
322
|
+
|
|
323
|
+
def GetMulticastAudioDecoderConfigurations(self, ConfigurationToken=None):
|
|
324
|
+
return self.operator.call(
|
|
325
|
+
"GetMulticastAudioDecoderConfigurations",
|
|
326
|
+
ConfigurationToken=ConfigurationToken,
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
def SetMulticastAudioDecoderConfiguration(self, Configuration):
|
|
330
|
+
return self.operator.call(
|
|
331
|
+
"SetMulticastAudioDecoderConfiguration", Configuration=Configuration
|
|
332
|
+
)
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
</xs:enumeration>
|
|
83
83
|
</xs:restriction>
|
|
84
84
|
</xs:simpleType>
|
|
85
|
-
<xs:simpleType name="
|
|
85
|
+
<xs:simpleType name="KeyPairAlgorithm">
|
|
86
86
|
<xs:restriction base="xs:string">
|
|
87
87
|
<xs:enumeration value="RSA"/>
|
|
88
88
|
<xs:enumeration value="ECC"/>
|
|
@@ -740,12 +740,12 @@
|
|
|
740
740
|
</xs:attribute>
|
|
741
741
|
<xs:attribute name="RSAKeyPairGeneration" type="xs:boolean">
|
|
742
742
|
<xs:annotation>
|
|
743
|
-
<xs:documentation>Indication that the device supports on-board
|
|
743
|
+
<xs:documentation>Deprecated - Indication that the device supports on-board ECC key pair generation.</xs:documentation>
|
|
744
744
|
</xs:annotation>
|
|
745
745
|
</xs:attribute>
|
|
746
746
|
<xs:attribute name="ECCKeyPairGeneration" type="xs:boolean">
|
|
747
747
|
<xs:annotation>
|
|
748
|
-
<xs:documentation>Indication that the device supports on-board ECC key pair generation.</xs:documentation>
|
|
748
|
+
<xs:documentation>Deprecated - Indication that the device supports on-board ECC key pair generation.</xs:documentation>
|
|
749
749
|
</xs:annotation>
|
|
750
750
|
</xs:attribute>
|
|
751
751
|
<xs:attribute name="KeyPairGeneration" type="tt:StringList">
|
|
@@ -760,12 +760,12 @@
|
|
|
760
760
|
</xs:attribute>
|
|
761
761
|
<xs:attribute name="EllipticCurves" type="tas:EllipticCurves">
|
|
762
762
|
<xs:annotation>
|
|
763
|
-
<xs:documentation>Indicates which elliptic curves are supported by the device.</xs:documentation>
|
|
763
|
+
<xs:documentation>Indicates which elliptic curves are supported by the device. Supported curve names can be found in the IANA TLS Supported Groups section, under the Description field.</xs:documentation>
|
|
764
764
|
</xs:annotation>
|
|
765
765
|
</xs:attribute>
|
|
766
766
|
<xs:attribute name="PKCS10ExternalCertificationWithRSA" type="xs:boolean">
|
|
767
767
|
<xs:annotation>
|
|
768
|
-
<xs:documentation>Indicates support for creating PKCS#10 requests for RSA keys and uploading the certificate obtained from a CA..</xs:documentation>
|
|
768
|
+
<xs:documentation>Deprecated - Indicates support for creating PKCS#10 requests for RSA keys and uploading the certificate obtained from a CA..</xs:documentation>
|
|
769
769
|
</xs:annotation>
|
|
770
770
|
</xs:attribute>
|
|
771
771
|
<xs:attribute name="PKCS10" type="xs:boolean">
|
|
@@ -775,7 +775,7 @@
|
|
|
775
775
|
</xs:attribute>
|
|
776
776
|
<xs:attribute name="SelfSignedCertificateCreationWithRSA" type="xs:boolean">
|
|
777
777
|
<xs:annotation>
|
|
778
|
-
<xs:documentation>Indicates support for creating self-signed certificates for RSA keys.</xs:documentation>
|
|
778
|
+
<xs:documentation>Deprecated - Indicates support for creating self-signed certificates for RSA keys.</xs:documentation>
|
|
779
779
|
</xs:annotation>
|
|
780
780
|
</xs:attribute>
|
|
781
781
|
<xs:attribute name="SelfSignedCertificateCreation" type="xs:boolean">
|
|
@@ -795,7 +795,7 @@
|
|
|
795
795
|
</xs:attribute>
|
|
796
796
|
<xs:attribute name="PKCS8RSAKeyPairUpload" type="xs:boolean">
|
|
797
797
|
<xs:annotation>
|
|
798
|
-
<xs:documentation>Indicates support for uploading an RSA key pair in a PKCS#8 data structure.</xs:documentation>
|
|
798
|
+
<xs:documentation>Deprecated - Indicates support for uploading an RSA key pair in a PKCS#8 data structure.</xs:documentation>
|
|
799
799
|
</xs:annotation>
|
|
800
800
|
</xs:attribute>
|
|
801
801
|
<xs:attribute name="PKCS8" type="xs:boolean">
|
|
@@ -805,7 +805,7 @@
|
|
|
805
805
|
</xs:attribute>
|
|
806
806
|
<xs:attribute name="PKCS12CertificateWithRSAPrivateKeyUpload" type="xs:boolean">
|
|
807
807
|
<xs:annotation>
|
|
808
|
-
<xs:documentation>Indicates support for uploading a certificate along with an RSA private key in a PKCS#12 data structure.</xs:documentation>
|
|
808
|
+
<xs:documentation>Deprecated - Indicates support for uploading a certificate along with an RSA private key in a PKCS#12 data structure.</xs:documentation>
|
|
809
809
|
</xs:annotation>
|
|
810
810
|
</xs:attribute>
|
|
811
811
|
<xs:attribute name="PKCS12" type="xs:boolean">
|
|
@@ -2967,7 +2967,7 @@
|
|
|
2967
2967
|
</wsdl:operation>
|
|
2968
2968
|
<wsdl:operation name="UploadKeyPairInPKCS8">
|
|
2969
2969
|
<wsdl:documentation>
|
|
2970
|
-
|
|
2970
|
+
Deprecated method for uploading a key pair in a PKCS#8 data structure as specified in [RFC 5958, RFC 5959].<br/>
|
|
2971
2971
|
If an encryption passphrase ID is supplied in the request, the device shall assume that the KeyPair parameter contains an EncryptedPrivateKeyInfo ASN.1
|
|
2972
2972
|
structure that is encrypted under the passphrase in the keystore that corresponds to the supplied ID, where the EncryptedPrivateKeyInfo structure contains
|
|
2973
2973
|
both the private key and the corresponding public key. If no encryption passphrase ID is supplied, the device shall assume that the KeyPair parameter contains a
|
|
@@ -306,6 +306,11 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
306
306
|
<xs:documentation>Indicates support for firmware upgrade through MTOM.</xs:documentation>
|
|
307
307
|
</xs:annotation>
|
|
308
308
|
</xs:attribute>
|
|
309
|
+
<xs:attribute name="CloudFirmwareUpgrade" type="xs:boolean">
|
|
310
|
+
<xs:annotation>
|
|
311
|
+
<xs:documentation>Indicates support for firmware upgrade through the cloud.</xs:documentation>
|
|
312
|
+
</xs:annotation>
|
|
313
|
+
</xs:attribute>
|
|
309
314
|
<xs:attribute name="HttpFirmwareUpgrade" type="xs:boolean">
|
|
310
315
|
<xs:annotation>
|
|
311
316
|
<xs:documentation>Indicates support for firmware upgrade through HTTP.</xs:documentation>
|
|
@@ -2118,6 +2123,21 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
2118
2123
|
</xs:complexType>
|
|
2119
2124
|
</xs:element>
|
|
2120
2125
|
<!--===============================-->
|
|
2126
|
+
<xs:element name="UpgradeFirmware">
|
|
2127
|
+
<xs:complexType>
|
|
2128
|
+
<xs:sequence>
|
|
2129
|
+
<xs:element name="Version" type="xs:string"/>
|
|
2130
|
+
</xs:sequence>
|
|
2131
|
+
</xs:complexType>
|
|
2132
|
+
</xs:element>
|
|
2133
|
+
<xs:element name="UpgradeFirmwareResponse">
|
|
2134
|
+
<xs:complexType>
|
|
2135
|
+
<xs:sequence>
|
|
2136
|
+
<xs:element name="ExpectedDownTime" type="xs:duration"/>
|
|
2137
|
+
</xs:sequence>
|
|
2138
|
+
</xs:complexType>
|
|
2139
|
+
</xs:element>
|
|
2140
|
+
<!--===============================-->
|
|
2121
2141
|
<xs:element name="StartSystemRestore">
|
|
2122
2142
|
<xs:complexType>
|
|
2123
2143
|
<xs:sequence/>
|
|
@@ -2959,6 +2979,12 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
2959
2979
|
<wsdl:message name="StartFirmwareUpgradeResponse">
|
|
2960
2980
|
<wsdl:part name="parameters" element="tds:StartFirmwareUpgradeResponse"/>
|
|
2961
2981
|
</wsdl:message>
|
|
2982
|
+
<wsdl:message name="UpgradeFirmwareRequest">
|
|
2983
|
+
<wsdl:part name="parameters" element="tds:UpgradeFirmware"/>
|
|
2984
|
+
</wsdl:message>
|
|
2985
|
+
<wsdl:message name="UpgradeFirmwareResponse">
|
|
2986
|
+
<wsdl:part name="parameters" element="tds:UpgradeFirmwareResponse"/>
|
|
2987
|
+
</wsdl:message>
|
|
2962
2988
|
<wsdl:message name="StartSystemRestoreRequest">
|
|
2963
2989
|
<wsdl:part name="parameters" element="tds:StartSystemRestore"/>
|
|
2964
2990
|
</wsdl:message>
|
|
@@ -3553,6 +3579,24 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
3553
3579
|
<wsdl:input message="tds:StartFirmwareUpgradeRequest"/>
|
|
3554
3580
|
<wsdl:output message="tds:StartFirmwareUpgradeResponse"/>
|
|
3555
3581
|
</wsdl:operation>
|
|
3582
|
+
<wsdl:operation name="UpgradeFirmware">
|
|
3583
|
+
<wsdl:documentation>This operation initiates a firmware upgrade using between the device
|
|
3584
|
+
and the MCS, without further actions from the client. Cloud firmware upgrade may be
|
|
3585
|
+
achieved using the following steps:
|
|
3586
|
+
<ol>
|
|
3587
|
+
<li>Client retrieves the list of available firmware versions from the MCS.</li>
|
|
3588
|
+
<li>Client calls UpgradeFirmware, selecting the desired FW version.</li>
|
|
3589
|
+
<li>Device service responds with a downtime value.</li>
|
|
3590
|
+
<li>Device and MCS perform the firmware upgrade procedure without further interaction from the Client</li>
|
|
3591
|
+
<li>Device notifies the Client of the result by emitting the appropriate CloudFirmwareUpgrade event</li>
|
|
3592
|
+
</ol>
|
|
3593
|
+
After applying a firmware upgrade the device shall keep the basic network configuration
|
|
3594
|
+
like IP address, subnet mask and gateway or DHCP settings, as well as all the parameters
|
|
3595
|
+
of the Uplink and Security service unchanged, so that it can connect to the cloud.
|
|
3596
|
+
Additionally a firmware upgrade shall not change user credentials.</wsdl:documentation>
|
|
3597
|
+
<wsdl:input message="tds:UpgradeFirmwareRequest"/>
|
|
3598
|
+
<wsdl:output message="tds:UpgradeFirmwareResponse"/>
|
|
3599
|
+
</wsdl:operation>
|
|
3556
3600
|
<wsdl:operation name="StartSystemRestore">
|
|
3557
3601
|
<wsdl:documentation>This operation initiates a system restore from backed up configuration data using the HTTP
|
|
3558
3602
|
POST mechanism. The response to the command includes an HTTP URL to which the backup
|
|
@@ -4523,6 +4567,15 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
4523
4567
|
<soap:body use="literal"/>
|
|
4524
4568
|
</wsdl:output>
|
|
4525
4569
|
</wsdl:operation>
|
|
4570
|
+
<wsdl:operation name="UpgradeFirmware">
|
|
4571
|
+
<soap:operation soapAction="http://www.onvif.org/ver10/device/wsdl/UpgradeFirmware"/>
|
|
4572
|
+
<wsdl:input>
|
|
4573
|
+
<soap:body use="literal"/>
|
|
4574
|
+
</wsdl:input>
|
|
4575
|
+
<wsdl:output>
|
|
4576
|
+
<soap:body use="literal"/>
|
|
4577
|
+
</wsdl:output>
|
|
4578
|
+
</wsdl:operation>
|
|
4526
4579
|
<wsdl:operation name="StartSystemRestore">
|
|
4527
4580
|
<soap:operation soapAction="http://www.onvif.org/ver10/device/wsdl/StartSystemRestore"/>
|
|
4528
4581
|
<wsdl:input>
|
|
@@ -194,6 +194,8 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
194
194
|
<xs:enumeration value="LicensePlate"/>
|
|
195
195
|
<xs:enumeration value="Bike"/> <!-- any of bicycle, motorcycle, motorbike -->
|
|
196
196
|
<xs:enumeration value="Barcode"/>
|
|
197
|
+
<xs:enumeration value="Fire"/>
|
|
198
|
+
<xs:enumeration value="Smoke"/>
|
|
197
199
|
</xs:restriction>
|
|
198
200
|
</xs:simpleType>
|
|
199
201
|
<xs:simpleType name="ClassType">
|
|
@@ -2042,6 +2042,230 @@ decoding .A decoder shall decode every data it receives (according to its capabi
|
|
|
2042
2042
|
</xs:sequence>
|
|
2043
2043
|
</xs:complexType>
|
|
2044
2044
|
<!--===============================-->
|
|
2045
|
+
<!-- MulticastAudioDecoder -->
|
|
2046
|
+
<!--===============================-->
|
|
2047
|
+
<xs:complexType name="MulticastAudioDecoderConfiguration">
|
|
2048
|
+
<xs:annotation>
|
|
2049
|
+
<xs:documentation>
|
|
2050
|
+
Configuration for the Multicast Audio Decoder.
|
|
2051
|
+
</xs:documentation>
|
|
2052
|
+
</xs:annotation>
|
|
2053
|
+
<xs:complexContent>
|
|
2054
|
+
<xs:extension base="tt:ConfigurationEntity">
|
|
2055
|
+
<xs:sequence>
|
|
2056
|
+
<xs:element name="Enable" type="xs:boolean">
|
|
2057
|
+
<xs:annotation>
|
|
2058
|
+
<xs:documentation>
|
|
2059
|
+
Indicates whether the Multicast Audio Decoder is enabled or disabled.
|
|
2060
|
+
</xs:documentation>
|
|
2061
|
+
</xs:annotation>
|
|
2062
|
+
</xs:element>
|
|
2063
|
+
<xs:element name="AudioOutputToken" type="tt:ReferenceToken" minOccurs="0" maxOccurs="unbounded">
|
|
2064
|
+
<xs:annotation>
|
|
2065
|
+
<xs:documentation>
|
|
2066
|
+
Token of the physical Audio output. This element is optional and can occur multiple times.
|
|
2067
|
+
</xs:documentation>
|
|
2068
|
+
</xs:annotation>
|
|
2069
|
+
</xs:element>
|
|
2070
|
+
<xs:element name="Encoding" type="xs:string">
|
|
2071
|
+
<xs:annotation>
|
|
2072
|
+
<xs:documentation>
|
|
2073
|
+
Specifies the encoding type according to IANA media types.
|
|
2074
|
+
</xs:documentation>
|
|
2075
|
+
</xs:annotation>
|
|
2076
|
+
</xs:element>
|
|
2077
|
+
<xs:element name="Bitrate" type="xs:int">
|
|
2078
|
+
<xs:annotation>
|
|
2079
|
+
<xs:documentation>
|
|
2080
|
+
The bitrate of the audio stream in bits per second.
|
|
2081
|
+
</xs:documentation>
|
|
2082
|
+
</xs:annotation>
|
|
2083
|
+
</xs:element>
|
|
2084
|
+
<xs:element name="SamplingRate" type="xs:int">
|
|
2085
|
+
<xs:annotation>
|
|
2086
|
+
<xs:documentation>
|
|
2087
|
+
The sampling rate of the audio stream in kHz.
|
|
2088
|
+
</xs:documentation>
|
|
2089
|
+
</xs:annotation>
|
|
2090
|
+
</xs:element>
|
|
2091
|
+
<xs:element name="Multicast" type="tt:MulticastReceiverConfiguration">
|
|
2092
|
+
<xs:annotation>
|
|
2093
|
+
<xs:documentation>
|
|
2094
|
+
Contains configuration details for multicast settings.
|
|
2095
|
+
</xs:documentation>
|
|
2096
|
+
</xs:annotation>
|
|
2097
|
+
</xs:element>
|
|
2098
|
+
<xs:element name="RTPPayloadType" type="xs:int">
|
|
2099
|
+
<xs:annotation>
|
|
2100
|
+
<xs:documentation>
|
|
2101
|
+
Defines the RTP payload type used for the audio stream.
|
|
2102
|
+
To ensure compatibility, it is recommended to use dynamic payload types (96 and above), as specified in RFC 3551.
|
|
2103
|
+
Standard payload types (0-95) should only be used for predefined audio formats matching the audio encoding as defined in
|
|
2104
|
+
<a href="https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml#rtp-parameters-1">IANA RTP Payload Types</a>,
|
|
2105
|
+
as using them for non-standard media may lead to unexpected errors or interoperability issues.
|
|
2106
|
+
</xs:documentation>
|
|
2107
|
+
</xs:annotation>
|
|
2108
|
+
</xs:element>
|
|
2109
|
+
<xs:element name="Priority" type="xs:int">
|
|
2110
|
+
<xs:annotation>
|
|
2111
|
+
<xs:documentation>
|
|
2112
|
+
Indicates the priority level when multiple configurations are active.
|
|
2113
|
+
A higher value signifies a higher priority. If several configurations have the same priority value the order between those configurations is undefined.
|
|
2114
|
+
</xs:documentation>
|
|
2115
|
+
</xs:annotation>
|
|
2116
|
+
</xs:element>
|
|
2117
|
+
<xs:element name="MediaFormatParameters" type="xs:string" minOccurs="0">
|
|
2118
|
+
<xs:annotation>
|
|
2119
|
+
<xs:documentation>
|
|
2120
|
+
Optional media format parameters as specified in SDP, such as:
|
|
2121
|
+
a=fmtp:101 stereo=1; sprop-stereo=1.
|
|
2122
|
+
</xs:documentation>
|
|
2123
|
+
</xs:annotation>
|
|
2124
|
+
</xs:element>
|
|
2125
|
+
<xs:element name="SRTPPreSharedParameters" type="tt:SRTPPreShared" minOccurs="0">
|
|
2126
|
+
<xs:annotation>
|
|
2127
|
+
<xs:documentation>
|
|
2128
|
+
Optional configuration parameters for SRTP pre-shared key usage, applicable when SRTP is supported. When this configuration is present, RTP packets shall be encrypted.
|
|
2129
|
+
</xs:documentation>
|
|
2130
|
+
</xs:annotation>
|
|
2131
|
+
</xs:element>
|
|
2132
|
+
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first Vendor then ONVIF -->
|
|
2133
|
+
</xs:sequence>
|
|
2134
|
+
<xs:anyAttribute processContents="lax"/>
|
|
2135
|
+
</xs:extension>
|
|
2136
|
+
</xs:complexContent>
|
|
2137
|
+
</xs:complexType>
|
|
2138
|
+
<!--===============================-->
|
|
2139
|
+
<xs:complexType name="SRTPPreShared">
|
|
2140
|
+
<xs:sequence>
|
|
2141
|
+
<xs:element name="SRTPPSK" type="xs:string">
|
|
2142
|
+
<xs:annotation>
|
|
2143
|
+
<xs:documentation>
|
|
2144
|
+
An optional SRTP Pre-Shared Key (PSK) represented as a hexadecimal string.
|
|
2145
|
+
This includes both the SRTP master key, followed by the master salt.
|
|
2146
|
+
The sizes of the key and salt depend on the specified SRTPCryptoPolicy.
|
|
2147
|
+
When this element is specified, RTP packets shall be encrypted.
|
|
2148
|
+
The SRTPPSK shall never be returned on a get method.
|
|
2149
|
+
</xs:documentation>
|
|
2150
|
+
</xs:annotation>
|
|
2151
|
+
</xs:element>
|
|
2152
|
+
<xs:element name="SecureStreamingProtocolAlgorithm" type="xs:string">
|
|
2153
|
+
<xs:annotation>
|
|
2154
|
+
<xs:documentation>
|
|
2155
|
+
Specifies the cryptographic algorithm when using SRTP,
|
|
2156
|
+
selecting from predefined values provided in the GetMulticastAudioDecoderConfigurationOptions response.
|
|
2157
|
+
</xs:documentation>
|
|
2158
|
+
</xs:annotation>
|
|
2159
|
+
</xs:element>
|
|
2160
|
+
<xs:element name="ROCExtMapID" type="xs:int">
|
|
2161
|
+
<xs:annotation>
|
|
2162
|
+
<xs:documentation>
|
|
2163
|
+
The RTP header extension ID (ExtMapID) used to identify the ROC extension, as defined in RFC 8285.
|
|
2164
|
+
Valid values are 1 to 14 for one-byte header extensions.
|
|
2165
|
+
</xs:documentation>
|
|
2166
|
+
</xs:annotation>
|
|
2167
|
+
</xs:element>
|
|
2168
|
+
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first Vendor then ONVIF -->
|
|
2169
|
+
</xs:sequence>
|
|
2170
|
+
<xs:anyAttribute processContents="lax"/>
|
|
2171
|
+
</xs:complexType>
|
|
2172
|
+
<!--===============================-->
|
|
2173
|
+
<xs:complexType name="MulticastReceiverConfiguration">
|
|
2174
|
+
<xs:sequence>
|
|
2175
|
+
<xs:element name="Address" type="tt:IPAddress">
|
|
2176
|
+
<xs:annotation>
|
|
2177
|
+
<xs:documentation>The multicast address (if this address is set to 0 no multicast streaming is enabled)</xs:documentation>
|
|
2178
|
+
</xs:annotation>
|
|
2179
|
+
</xs:element>
|
|
2180
|
+
<xs:element name="Port" type="xs:int">
|
|
2181
|
+
<xs:annotation>
|
|
2182
|
+
<xs:documentation>The RTP multicast 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.</xs:documentation>
|
|
2183
|
+
</xs:annotation>
|
|
2184
|
+
</xs:element>
|
|
2185
|
+
<xs:element name="TTL" type="xs:int">
|
|
2186
|
+
<xs:annotation>
|
|
2187
|
+
<xs:documentation>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.</xs:documentation>
|
|
2188
|
+
</xs:annotation>
|
|
2189
|
+
</xs:element>
|
|
2190
|
+
<xs:element name="InterfaceToken" type="tt:ReferenceToken" minOccurs="0" maxOccurs="unbounded">
|
|
2191
|
+
<xs:annotation>
|
|
2192
|
+
<xs:documentation>Unique identifier of the network interface on the device. If not specified, all available interfaces will be used for listening. </xs:documentation>
|
|
2193
|
+
</xs:annotation>
|
|
2194
|
+
</xs:element>
|
|
2195
|
+
<xs:element name="SourceSpecificMulticast" type="tt:IPAddress" minOccurs="0">
|
|
2196
|
+
<xs:annotation>
|
|
2197
|
+
<xs:documentation>When a source-specific multicast address is configured, the device will process multicast data only from the specified source, in accordance with SSM principles defined in RFC 4607.</xs:documentation>
|
|
2198
|
+
</xs:annotation>
|
|
2199
|
+
</xs:element>
|
|
2200
|
+
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first Vendor then ONVIF -->
|
|
2201
|
+
</xs:sequence>
|
|
2202
|
+
<xs:anyAttribute processContents="lax"/>
|
|
2203
|
+
</xs:complexType>
|
|
2204
|
+
<!--===============================-->
|
|
2205
|
+
<xs:complexType name="MulticastAudioDecoderConfigurationOptions">
|
|
2206
|
+
<xs:sequence>
|
|
2207
|
+
<xs:element name="EncodingOptions" type="tt:AudioDecoder2Options">
|
|
2208
|
+
<xs:annotation>
|
|
2209
|
+
<xs:documentation>Supported encoding options for the multicast audio decoder.</xs:documentation>
|
|
2210
|
+
</xs:annotation>
|
|
2211
|
+
</xs:element>
|
|
2212
|
+
<xs:element name="PriorityRange" type="tt:IntRange">
|
|
2213
|
+
<xs:annotation>
|
|
2214
|
+
<xs:documentation>
|
|
2215
|
+
Specifies the priority range as an integer. This indicates the priority level for audio configuration.
|
|
2216
|
+
</xs:documentation>
|
|
2217
|
+
</xs:annotation>
|
|
2218
|
+
</xs:element>
|
|
2219
|
+
<xs:element name="SecureStreamingProtocolAlgorithms" type="tt:StringList" minOccurs="0">
|
|
2220
|
+
<xs:annotation>
|
|
2221
|
+
<xs:documentation>
|
|
2222
|
+
An optional parameter specifies the list of supported cryptographic algorithms when SRTP support is signaled as 'true' in the GetServiceCapabilitiesResponse.
|
|
2223
|
+
Refer to tt:SrtpSecurityAlgorithms for the acceptable values.
|
|
2224
|
+
</xs:documentation>
|
|
2225
|
+
</xs:annotation>
|
|
2226
|
+
</xs:element>
|
|
2227
|
+
<xs:element name="AudioOutputTokens" type="tt:StringList" minOccurs="0">
|
|
2228
|
+
<xs:annotation>
|
|
2229
|
+
<xs:documentation>
|
|
2230
|
+
Optional list of physical Audio output tokens. This element is used when only certain audio outputs can be configured for this token.
|
|
2231
|
+
</xs:documentation>
|
|
2232
|
+
</xs:annotation>
|
|
2233
|
+
</xs:element>
|
|
2234
|
+
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->
|
|
2235
|
+
</xs:sequence>
|
|
2236
|
+
<xs:anyAttribute processContents="lax"/>
|
|
2237
|
+
</xs:complexType>
|
|
2238
|
+
<!--===============================-->
|
|
2239
|
+
<xs:complexType name="AudioDecoder2Options">
|
|
2240
|
+
<xs:sequence>
|
|
2241
|
+
<xs:element name="Encoding" type="xs:string">
|
|
2242
|
+
<xs:annotation>
|
|
2243
|
+
<xs:documentation>Audio Media Subtype for the audio format. For definitions see tt:AudioEncodingMimeNames and <a href="https://www.iana.org/assignments/media-types/media-types.xhtml#audio"> IANA Media Types</a>.</xs:documentation>
|
|
2244
|
+
</xs:annotation>
|
|
2245
|
+
</xs:element>
|
|
2246
|
+
<xs:element name="BitrateList" type="tt:IntItems">
|
|
2247
|
+
<xs:annotation>
|
|
2248
|
+
<xs:documentation>List of supported bitrates in kbps for the specified Encoding</xs:documentation>
|
|
2249
|
+
</xs:annotation>
|
|
2250
|
+
</xs:element>
|
|
2251
|
+
<xs:element name="SampleRateList" type="tt:IntItems">
|
|
2252
|
+
<xs:annotation>
|
|
2253
|
+
<xs:documentation>List of supported Sample Rates in kHz for the specified Encoding</xs:documentation>
|
|
2254
|
+
</xs:annotation>
|
|
2255
|
+
</xs:element>
|
|
2256
|
+
<xs:element name="RTPPayloadType" type="xs:int" minOccurs="0">
|
|
2257
|
+
<xs:annotation>
|
|
2258
|
+
<xs:documentation>
|
|
2259
|
+
Optional element for specifying the RTP payload type,
|
|
2260
|
+
particularly when it is fixed for a specific audio encoding as defined in <a href="https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml#rtp-parameters-1">IANA RTP Payload Types</a>.
|
|
2261
|
+
</xs:documentation>
|
|
2262
|
+
</xs:annotation>
|
|
2263
|
+
</xs:element>
|
|
2264
|
+
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->
|
|
2265
|
+
</xs:sequence>
|
|
2266
|
+
<xs:anyAttribute processContents="lax"/>
|
|
2267
|
+
</xs:complexType>
|
|
2268
|
+
<!--===============================-->
|
|
2045
2269
|
<!-- Streaming -->
|
|
2046
2270
|
<!--===============================-->
|
|
2047
2271
|
<xs:complexType name="MulticastConfiguration">
|
|
@@ -53,6 +53,11 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
53
53
|
<xs:documentation>Audio clip capabilities.</xs:documentation>
|
|
54
54
|
</xs:annotation>
|
|
55
55
|
</xs:element>
|
|
56
|
+
<xs:element name="MulticastAudioDecoderCapabilities" type="tr2:MulticastAudioDecoderCapabilities" minOccurs="0" >
|
|
57
|
+
<xs:annotation>
|
|
58
|
+
<xs:documentation>MulticastAudioDecoder capabilities.</xs:documentation>
|
|
59
|
+
</xs:annotation>
|
|
60
|
+
</xs:element>
|
|
56
61
|
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->
|
|
57
62
|
</xs:sequence>
|
|
58
63
|
<xs:attribute name="SnapshotUri" type="xs:boolean">
|
|
@@ -159,6 +164,29 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
159
164
|
</xs:attribute>
|
|
160
165
|
<xs:anyAttribute processContents="lax"/>
|
|
161
166
|
</xs:complexType>
|
|
167
|
+
|
|
168
|
+
<!--===============================-->
|
|
169
|
+
<xs:complexType name="MulticastAudioDecoderCapabilities">
|
|
170
|
+
<xs:sequence>
|
|
171
|
+
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->
|
|
172
|
+
</xs:sequence>
|
|
173
|
+
<xs:attribute name="MulticastAudioDecoder" type="xs:boolean">
|
|
174
|
+
<xs:annotation>
|
|
175
|
+
<xs:documentation>Indicates support for multicast audio decoder.</xs:documentation>
|
|
176
|
+
</xs:annotation>
|
|
177
|
+
</xs:attribute>
|
|
178
|
+
<xs:attribute name="SRTP" type="xs:boolean">
|
|
179
|
+
<xs:annotation>
|
|
180
|
+
<xs:documentation>Indicates whether the SRTP is supported in MulticastAudioDecoder or not.</xs:documentation>
|
|
181
|
+
</xs:annotation>
|
|
182
|
+
</xs:attribute>
|
|
183
|
+
<xs:attribute name="IPv6" type="xs:boolean">
|
|
184
|
+
<xs:annotation>
|
|
185
|
+
<xs:documentation>Indicates whether the IPv6 is supported in MulticastAudioDecoder or not.</xs:documentation>
|
|
186
|
+
</xs:annotation>
|
|
187
|
+
</xs:attribute>
|
|
188
|
+
<xs:anyAttribute processContents="lax"/>
|
|
189
|
+
</xs:complexType>
|
|
162
190
|
<!--===============================-->
|
|
163
191
|
<xs:complexType name="MediaSigningCapabilities">
|
|
164
192
|
<xs:sequence>
|
|
@@ -1621,6 +1649,62 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
1621
1649
|
</xs:complexType>
|
|
1622
1650
|
</xs:element>
|
|
1623
1651
|
<!--===============================-->
|
|
1652
|
+
|
|
1653
|
+
<xs:element name="GetMulticastAudioDecoderConfigurations">
|
|
1654
|
+
<xs:complexType>
|
|
1655
|
+
<xs:sequence>
|
|
1656
|
+
<xs:element name="ConfigurationToken" type="tt:ReferenceToken" minOccurs="0">
|
|
1657
|
+
<xs:annotation>
|
|
1658
|
+
<xs:documentation>Unique token of the multicast audio decoder configuration. If not passed, device shall respond with all configurations.</xs:documentation>
|
|
1659
|
+
</xs:annotation>
|
|
1660
|
+
</xs:element>
|
|
1661
|
+
</xs:sequence>
|
|
1662
|
+
</xs:complexType>
|
|
1663
|
+
</xs:element>
|
|
1664
|
+
<xs:element name="GetMulticastAudioDecoderConfigurationsResponse">
|
|
1665
|
+
<xs:complexType>
|
|
1666
|
+
<xs:sequence>
|
|
1667
|
+
<xs:element name="Configurations" type="tt:MulticastAudioDecoderConfiguration" minOccurs="0" maxOccurs="unbounded" >
|
|
1668
|
+
<xs:annotation>
|
|
1669
|
+
<xs:documentation>This message contains the list of multicast audio decoder configurations.</xs:documentation>
|
|
1670
|
+
</xs:annotation>
|
|
1671
|
+
</xs:element>
|
|
1672
|
+
</xs:sequence>
|
|
1673
|
+
</xs:complexType>
|
|
1674
|
+
</xs:element>
|
|
1675
|
+
|
|
1676
|
+
<xs:element name="GetMulticastAudioDecoderConfigurationOptions">
|
|
1677
|
+
<xs:complexType>
|
|
1678
|
+
<xs:sequence>
|
|
1679
|
+
<xs:element name="ConfigurationToken" type="tt:ReferenceToken" minOccurs="0">
|
|
1680
|
+
<xs:annotation>
|
|
1681
|
+
<xs:documentation>This response contains the available MulticastAudioDecoderConfigurationOptions. If a multicast audio decoder configuration is specified, the options shall concern that particular configuration.</xs:documentation>
|
|
1682
|
+
</xs:annotation>
|
|
1683
|
+
</xs:element>
|
|
1684
|
+
</xs:sequence>
|
|
1685
|
+
</xs:complexType>
|
|
1686
|
+
</xs:element>
|
|
1687
|
+
<xs:element name="GetMulticastAudioDecoderConfigurationOptionsResponse">
|
|
1688
|
+
<xs:complexType>
|
|
1689
|
+
<xs:sequence>
|
|
1690
|
+
<xs:element name="Options" type="tt:MulticastAudioDecoderConfigurationOptions" maxOccurs="unbounded"/>
|
|
1691
|
+
</xs:sequence>
|
|
1692
|
+
</xs:complexType>
|
|
1693
|
+
</xs:element>
|
|
1694
|
+
|
|
1695
|
+
<xs:element name="SetMulticastAudioDecoderConfiguration">
|
|
1696
|
+
<xs:complexType>
|
|
1697
|
+
<xs:sequence>
|
|
1698
|
+
<xs:element name="Configuration" type="tt:MulticastAudioDecoderConfiguration">
|
|
1699
|
+
<xs:annotation>
|
|
1700
|
+
<xs:documentation>Contains the modified multicast audio decoder configuration. The configuration shall exist in the device.</xs:documentation>
|
|
1701
|
+
</xs:annotation>
|
|
1702
|
+
</xs:element>
|
|
1703
|
+
</xs:sequence>
|
|
1704
|
+
</xs:complexType>
|
|
1705
|
+
</xs:element>
|
|
1706
|
+
<xs:element name="SetMulticastAudioDecoderConfigurationResponse" type="tr2:SetConfigurationResponse"/>
|
|
1707
|
+
|
|
1624
1708
|
<!--============ Schema End================-->
|
|
1625
1709
|
</xs:schema>
|
|
1626
1710
|
</wsdl:types>
|
|
@@ -1958,6 +2042,24 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
|
|
|
1958
2042
|
<wsdl:message name="GetPlayingAudioClipsResponse">
|
|
1959
2043
|
<wsdl:part name="parameters" element="tr2:GetPlayingAudioClipsResponse"/>
|
|
1960
2044
|
</wsdl:message>
|
|
2045
|
+
<wsdl:message name="GetMulticastAudioDecoderConfigurationsRequest">
|
|
2046
|
+
<wsdl:part name="parameters" element="tr2:GetMulticastAudioDecoderConfigurations"/>
|
|
2047
|
+
</wsdl:message>
|
|
2048
|
+
<wsdl:message name="GetMulticastAudioDecoderConfigurationsResponse">
|
|
2049
|
+
<wsdl:part name="parameters" element="tr2:GetMulticastAudioDecoderConfigurationsResponse"/>
|
|
2050
|
+
</wsdl:message>
|
|
2051
|
+
<wsdl:message name="GetMulticastAudioDecoderConfigurationOptionsRequest">
|
|
2052
|
+
<wsdl:part name="parameters" element="tr2:GetMulticastAudioDecoderConfigurationOptions"/>
|
|
2053
|
+
</wsdl:message>
|
|
2054
|
+
<wsdl:message name="GetMulticastAudioDecoderConfigurationOptionsResponse">
|
|
2055
|
+
<wsdl:part name="parameters" element="tr2:GetMulticastAudioDecoderConfigurationOptionsResponse"/>
|
|
2056
|
+
</wsdl:message>
|
|
2057
|
+
<wsdl:message name="SetMulticastAudioDecoderConfigurationRequest">
|
|
2058
|
+
<wsdl:part name="parameters" element="tr2:SetMulticastAudioDecoderConfiguration"/>
|
|
2059
|
+
</wsdl:message>
|
|
2060
|
+
<wsdl:message name="SetMulticastAudioDecoderConfigurationResponse">
|
|
2061
|
+
<wsdl:part name="parameters" element="tr2:SetMulticastAudioDecoderConfigurationResponse"/>
|
|
2062
|
+
</wsdl:message>
|
|
1961
2063
|
<wsdl:portType name="Media2">
|
|
1962
2064
|
<!--===============================-->
|
|
1963
2065
|
<!--===============================-->
|
|
@@ -2331,6 +2433,23 @@ image will be updated automatically and independent from calls to GetSnapshotUri
|
|
|
2331
2433
|
<wsdl:output message="tr2:GetPlayingAudioClipsResponse"/>
|
|
2332
2434
|
</wsdl:operation>
|
|
2333
2435
|
<!--==============AudioClipManagement Operation End=================-->
|
|
2436
|
+
<!--==============MulticastAudioDecoder Operation=================-->
|
|
2437
|
+
<wsdl:operation name="GetMulticastAudioDecoderConfigurations">
|
|
2438
|
+
<wsdl:documentation>This operation gets the list of multicast audio decoder configurations.</wsdl:documentation>
|
|
2439
|
+
<wsdl:input message="tr2:GetMulticastAudioDecoderConfigurationsRequest"/>
|
|
2440
|
+
<wsdl:output message="tr2:GetMulticastAudioDecoderConfigurationsResponse"/>
|
|
2441
|
+
</wsdl:operation>
|
|
2442
|
+
<wsdl:operation name="GetMulticastAudioDecoderConfigurationOptions">
|
|
2443
|
+
<wsdl:documentation>This operation gets the available options for the MulticastAudioDecoder configuration.</wsdl:documentation>
|
|
2444
|
+
<wsdl:input message="tr2:GetMulticastAudioDecoderConfigurationOptionsRequest"/>
|
|
2445
|
+
<wsdl:output message="tr2:GetMulticastAudioDecoderConfigurationOptionsResponse"/>
|
|
2446
|
+
</wsdl:operation>
|
|
2447
|
+
<wsdl:operation name="SetMulticastAudioDecoderConfiguration">
|
|
2448
|
+
<wsdl:documentation>This operation sets the MulticastAudioDecoderConfiguration.</wsdl:documentation>
|
|
2449
|
+
<wsdl:input message="tr2:SetMulticastAudioDecoderConfigurationRequest"/>
|
|
2450
|
+
<wsdl:output message="tr2:SetMulticastAudioDecoderConfigurationResponse"/>
|
|
2451
|
+
</wsdl:operation>
|
|
2452
|
+
<!--===========MulticastAudioDecoder Operation End ===============-->
|
|
2334
2453
|
</wsdl:portType>
|
|
2335
2454
|
<wsdl:binding name="Media2Binding" type="tr2:Media2">
|
|
2336
2455
|
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
|
|
@@ -2858,5 +2977,34 @@ image will be updated automatically and independent from calls to GetSnapshotUri
|
|
|
2858
2977
|
</wsdl:output>
|
|
2859
2978
|
</wsdl:operation>
|
|
2860
2979
|
<!--==============AudioClipManagement End=================-->
|
|
2980
|
+
<!--==============Multicast Audio Decoder Configuration =================-->
|
|
2981
|
+
<wsdl:operation name="GetMulticastAudioDecoderConfigurations">
|
|
2982
|
+
<soap:operation soapAction="http://www.onvif.org/ver20/media/wsdl/GetMulticastAudioDecoderConfigurations"/>
|
|
2983
|
+
<wsdl:input>
|
|
2984
|
+
<soap:body use="literal"/>
|
|
2985
|
+
</wsdl:input>
|
|
2986
|
+
<wsdl:output>
|
|
2987
|
+
<soap:body use="literal"/>
|
|
2988
|
+
</wsdl:output>
|
|
2989
|
+
</wsdl:operation>
|
|
2990
|
+
<wsdl:operation name="GetMulticastAudioDecoderConfigurationOptions">
|
|
2991
|
+
<soap:operation soapAction="http://www.onvif.org/ver20/media/wsdl/GetMulticastAudioDecoderConfigurationOptions"/>
|
|
2992
|
+
<wsdl:input>
|
|
2993
|
+
<soap:body use="literal"/>
|
|
2994
|
+
</wsdl:input>
|
|
2995
|
+
<wsdl:output>
|
|
2996
|
+
<soap:body use="literal"/>
|
|
2997
|
+
</wsdl:output>
|
|
2998
|
+
</wsdl:operation>
|
|
2999
|
+
<wsdl:operation name="SetMulticastAudioDecoderConfiguration">
|
|
3000
|
+
<soap:operation soapAction="http://www.onvif.org/ver20/media/wsdl/SetMulticastAudioDecoderConfiguration"/>
|
|
3001
|
+
<wsdl:input>
|
|
3002
|
+
<soap:body use="literal"/>
|
|
3003
|
+
</wsdl:input>
|
|
3004
|
+
<wsdl:output>
|
|
3005
|
+
<soap:body use="literal"/>
|
|
3006
|
+
</wsdl:output>
|
|
3007
|
+
</wsdl:operation>
|
|
3008
|
+
<!--==============Multicast Audio Decoder Configuration End =================-->
|
|
2861
3009
|
</wsdl:binding>
|
|
2862
3010
|
</wsdl:definitions>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: onvif-python
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: A modern Python library for ONVIF-compliant devices
|
|
5
5
|
Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
|
|
6
6
|
Maintainer: Kaburagi
|
|
@@ -44,13 +44,13 @@ Dynamic: license-file
|
|
|
44
44
|
<h1 align="center">ONVIF Python</h1>
|
|
45
45
|
|
|
46
46
|
<div align="center">
|
|
47
|
-
<
|
|
48
|
-
<img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg"
|
|
49
|
-
<img alt="PyPI Version" src="https://img.shields.io/badge/PyPI-0.2.
|
|
50
|
-
<img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/onvif-python?label=Downloads&color=red"
|
|
47
|
+
<a href="https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade"><img src="https://app.codacy.com/project/badge/Grade/bff08a94e4d447b690cea49c6594826d"/></a>
|
|
48
|
+
<a href="https://deepwiki.com/nirsimetri/onvif-python"><img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg"></a>
|
|
49
|
+
<a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/PyPI-0.2.6-orange?logo=archive&color=yellow"></a>
|
|
50
|
+
<a href="https://pepy.tech/projects/onvif-python"><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/onvif-python?label=Downloads&color=red"></a>
|
|
51
51
|
<br>
|
|
52
|
-
<
|
|
53
|
-
<
|
|
52
|
+
<a href="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml"><img alt="Build" src="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml/badge.svg?branch=main"></a>
|
|
53
|
+
<a href="https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml"><img alt="Upload Python Package" src="https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml/badge.svg"></a>
|
|
54
54
|
</div>
|
|
55
55
|
|
|
56
56
|
<h1 align="center">
|
|
@@ -64,15 +64,21 @@ Dynamic: license-file
|
|
|
64
64
|
|
|
65
65
|
Behind the scenes, ONVIF communication relies on **[SOAP](https://en.wikipedia.org/wiki/SOAP) (Simple Object Access Protocol)** — an [XML](https://en.wikipedia.org/wiki/XML)-based messaging protocol with strict schema definitions ([WSDL](https://en.wikipedia.org/wiki/Web_Services_Description_Language)/[XSD](https://en.wikipedia.org/wiki/XML_Schema_(W3C))). SOAP ensures interoperability, but when used directly it can be verbose, complex, and error-prone.
|
|
66
66
|
|
|
67
|
-
This library simplifies that process by wrapping SOAP communication into a clean, Pythonic API. You no longer need to handle low-level XML parsing, namespaces, or security tokens manually — the library takes care of it, letting you focus on building functionality.
|
|
67
|
+
This library simplifies that process by wrapping SOAP communication into a clean, Pythonic API. You no longer need to handle low-level XML parsing, namespaces, or security tokens manually — the library takes care of it, letting you focus on building functionality.
|
|
68
68
|
|
|
69
|
-
##
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
-
|
|
69
|
+
## Library Philosophy
|
|
70
|
+
> [!NOTE]
|
|
71
|
+
> This library will be continuously updated as ONVIF versions are updated. It uses a built-in WSDL that will always follow changes to the [ONVIF WSDL Specifications](https://github.com/onvif/specs). You can also use your own ONVIF WSDL file by adding the `wsdl_dir` argument; see [ONVIFClient Parameters](#onvifclient-parameters).
|
|
72
|
+
|
|
73
|
+
- **WYSIWYG (What You See is What You Get)**: Every ONVIF operation in the library mirrors the official ONVIF specification exactly. Method names, parameter structures, and response formats follow ONVIF standards without abstraction layers or renamed interfaces. What you see in the ONVIF documentation is exactly what you get in Python.
|
|
74
|
+
|
|
75
|
+
- **Device Variety Interoperability**: Built to handle the real-world diversity of ONVIF implementations across manufacturers. The library gracefully handles missing features, optional operations, and vendor-specific behaviors through comprehensive error handling and fallback mechanisms. Whether you're working with high-end enterprise cameras or budget IP cameras, the library adapts.
|
|
76
|
+
|
|
77
|
+
- **Official Specifications Accuracy**: All service implementations are generated and validated against official `ONVIF WSDL Specifications`. The library includes comprehensive test suites that verify compliance with ONVIF standards, ensuring that method signatures, parameter types, and behavior match the official specifications precisely.
|
|
78
|
+
|
|
79
|
+
- **Modern Python Approach**: Designed for excellent IDE support with full type hints, auto-completion, and immediate error detection. You'll get `TypeError` exceptions upfront when accessing ONVIF operations with wrong arguments, instead of cryptic `SOAP faults` later. Clean, Pythonic API that feels natural to Python developers while maintaining ONVIF compatibility.
|
|
80
|
+
|
|
81
|
+
- **Minimal Dependencies**: Only depends on essential, well-maintained libraries (`zeep` for SOAP, `requests` for HTTP). No bloated framework dependencies or custom XML parsers. The library stays lightweight while providing full ONVIF functionality, making it easy to integrate into any project without dependency conflicts.
|
|
76
82
|
|
|
77
83
|
## Who Is It For?
|
|
78
84
|
- **Individual developers** exploring ONVIF or building hobby projects
|
|
@@ -351,11 +357,12 @@ This library includes a powerful command-line interface (CLI) for interacting wi
|
|
|
351
357
|
<summary><b>1. Direct CLI</b></summary>
|
|
352
358
|
|
|
353
359
|
```bash
|
|
354
|
-
usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE]
|
|
355
|
-
[--
|
|
360
|
+
usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE]
|
|
361
|
+
[--per-page PER_PAGE] [--timeout TIMEOUT] [--https] [--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL]
|
|
362
|
+
[--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--output OUTPUT] [--version]
|
|
356
363
|
[service] [method] [params ...]
|
|
357
364
|
|
|
358
|
-
ONVIF Terminal Client — v0.2.
|
|
365
|
+
ONVIF Terminal Client — v0.2.6
|
|
359
366
|
https://github.com/nirsimetri/onvif-python
|
|
360
367
|
|
|
361
368
|
positional arguments:
|
|
@@ -389,6 +396,9 @@ options:
|
|
|
389
396
|
Caching mode for ONVIFClient (default: all). 'all': memory+disk, 'db': disk-only, 'mem': memory-only, 'none': disabled.
|
|
390
397
|
--health-check-interval HEALTH_CHECK_INTERVAL, -hci HEALTH_CHECK_INTERVAL
|
|
391
398
|
Health check interval in seconds for interactive mode (default: 10)
|
|
399
|
+
--output OUTPUT, -o OUTPUT
|
|
400
|
+
Save command output to file. Supports .json, .xml extensions for format detection, or plain text. XML format automatically enables
|
|
401
|
+
debug mode for SOAP capture.
|
|
392
402
|
--version, -v Show ONVIF CLI version and exit
|
|
393
403
|
|
|
394
404
|
Examples:
|
|
@@ -409,7 +419,12 @@ Examples:
|
|
|
409
419
|
|
|
410
420
|
# Direct command execution
|
|
411
421
|
onvif devicemgmt GetCapabilities Category=All --host 192.168.1.17 --port 8000 --username admin --password admin123
|
|
412
|
-
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity={
|
|
422
|
+
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity={'PanTilt': {'x': -0.1, 'y': 0}} -H 192.168.1.17 -P 8000 -u admin -p admin123
|
|
423
|
+
|
|
424
|
+
# Save output to file
|
|
425
|
+
onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
|
|
426
|
+
onvif media GetProfiles --host 192.168.1.17 --port 8000 --username admin --password admin123 --output profiles.xml
|
|
427
|
+
onvif ptz GetConfigurations --host 192.168.1.17 --port 8000 --username admin --password admin123 --output ptz_config.txt --debug
|
|
413
428
|
|
|
414
429
|
# Interactive mode
|
|
415
430
|
onvif --host 192.168.1.17 --port 8000 --username admin --password admin123 --interactive
|
|
@@ -428,7 +443,7 @@ Examples:
|
|
|
428
443
|
<summary><b>2. Interactive Shell</b></summary>
|
|
429
444
|
|
|
430
445
|
```bash
|
|
431
|
-
ONVIF Interactive Shell — v0.2.
|
|
446
|
+
ONVIF Interactive Shell — v0.2.6
|
|
432
447
|
https://github.com/nirsimetri/onvif-python
|
|
433
448
|
|
|
434
449
|
Basic Commands:
|
|
@@ -636,7 +651,11 @@ onvif <service> <method> [parameters...] -H <host> -P <port> -u <user> -p <pass>
|
|
|
636
651
|
onvif devicemgmt GetCapabilities Category=All -H 192.168.1.17 -P 8000 -u admin -p admin123
|
|
637
652
|
|
|
638
653
|
# Move a PTZ camera
|
|
639
|
-
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
|
|
654
|
+
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1, "y": 0}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
|
|
655
|
+
|
|
656
|
+
# Save output to file
|
|
657
|
+
onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
|
|
658
|
+
onvif media GetProfiles -H 192.168.1.17 -P 8000 -u admin -p admin123 -o profiles.xml
|
|
640
659
|
```
|
|
641
660
|
|
|
642
661
|
**4. ONVIF Product Search**
|
|
@@ -1152,13 +1171,11 @@ Some ONVIF services have multiple bindings in the same WSDL. These typically inc
|
|
|
1152
1171
|
- [ ] Add more usage examples for advanced features.
|
|
1153
1172
|
- [ ] Add benchmarking and performance metrics.
|
|
1154
1173
|
- [ ] Add community-contributed device configuration templates.
|
|
1155
|
-
- [ ] Implement missing or partial ONVIF services.
|
|
1156
|
-
- [ ] Add function to expose ONVIF devices (for debugging purposes by the community).
|
|
1157
1174
|
|
|
1158
1175
|
## Related Projects
|
|
1159
1176
|
|
|
1160
1177
|
- [onvif-products-directory](https://github.com/nirsimetri/onvif-products-directory):
|
|
1161
|
-
This project is a comprehensive ONVIF data aggregation and management suite, designed to help developers explore, analyze, and process ONVIF-compliant product information from hundreds of manufacturers worldwide.
|
|
1178
|
+
This project is a comprehensive ONVIF data aggregation and management suite, designed to help developers explore, analyze, and process ONVIF-compliant product information from hundreds of manufacturers worldwide.
|
|
1162
1179
|
|
|
1163
1180
|
- (soon) [onvif-rest-server](https://github.com/nirsimetri/onvif-rest-server):
|
|
1164
1181
|
A RESTful API server for ONVIF devices, enabling easy integration of ONVIF device management, media streaming, and other capabilities into web applications and services.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
onvif/__init__.py,sha256=
|
|
1
|
+
onvif/__init__.py,sha256=0wZNZnISPA9kZQ0J2UIDHCTvfHKDPgupHM32WTJeKLw,463
|
|
2
2
|
onvif/client.py,sha256=_G00dKSvRkLKq5tDGm4XS_3fhSE3WJtYckK9WVzNj9c,27703
|
|
3
3
|
onvif/operator.py,sha256=fBaoWYC3ZVFdgd2S_cmztWiLAA-HaWwSflq278YNlTs,13970
|
|
4
4
|
onvif/cli/__init__.py,sha256=y3hc-mo-Iwwxf8m5vo9P_0m2ISzGuOy-jaRPkdRY05A,68
|
|
5
5
|
onvif/cli/__main__.py,sha256=IZyZcevWVKE1BzdFY53a3MjOOfybncGVVXQ_7lZ3TOQ,165
|
|
6
|
-
onvif/cli/interactive.py,sha256=
|
|
7
|
-
onvif/cli/main.py,sha256=
|
|
6
|
+
onvif/cli/interactive.py,sha256=8_B-IQ-0Sf7c08gTxqMH1JAhcdCp2mOAq1Sdh7xP4iU,59756
|
|
7
|
+
onvif/cli/main.py,sha256=sxJz2IgACnqxh0l3fJDQ0W65Cu2Ju1EDusip87-CHW4,35751
|
|
8
8
|
onvif/cli/utils.py,sha256=o3lGeJ3yCgaINgXiq7wF0wB9KlR1qpvhNrW92onP4B4,60477
|
|
9
9
|
onvif/db/companies.db,sha256=yJ8bSHfGpxNnA5NRBhYOFS_1Pix-KgH8GnUFV3ytzPo,270336
|
|
10
10
|
onvif/db/products.db,sha256=4BVPfy6i6pLMLQyfue238uRp6_NIDodu4QXd9iCoooY,81559552
|
|
@@ -17,12 +17,12 @@ onvif/services/appmgmt.py,sha256=x4T5H0jJCScCuVCN8fyVdZyg1cnBKpRnVdo9eaPY2sg,155
|
|
|
17
17
|
onvif/services/authenticationbehavior.py,sha256=sxyy23VuVbyp6eIMQAqirVRzjszaZ6S8J7yHoD6IT6U,3560
|
|
18
18
|
onvif/services/credential.py,sha256=0FdumDUdF5ztlNYXRTLb4b8B1-82F2Hk98spm37igV8,5734
|
|
19
19
|
onvif/services/deviceio.py,sha256=BZd3mlGhApFuj8jSpsjCvKdN0V2dknYs7kVL6p5QR-A,6028
|
|
20
|
-
onvif/services/devicemgmt.py,sha256=
|
|
20
|
+
onvif/services/devicemgmt.py,sha256=71mrQ7V8I4Ysemg9cOGZdqALgLNS5rab7LYR1r5NRi0,14469
|
|
21
21
|
onvif/services/display.py,sha256=1XNTj1Gjq_9H7QWJqsilZNVaW4EIPdEAMmM4cXzh4bQ,2424
|
|
22
22
|
onvif/services/doorcontrol.py,sha256=krx5R_iS-YKTvTDilp-3IQExPo3y5WdcVe9k0AXLsLo,3171
|
|
23
23
|
onvif/services/imaging.py,sha256=LZcpDpDvVGQjYz14pcIfju2RIq23l3Fl-1C9OOYvubI,2519
|
|
24
24
|
onvif/services/media.py,sha256=uhY2jLvbh1ewYMAGRNv_jXS7Y-k7wHsEgHIKo1D0x2k,15513
|
|
25
|
-
onvif/services/media2.py,sha256=
|
|
25
|
+
onvif/services/media2.py,sha256=zHVWhyRMa2b56Ii4VLCQYtE5I-3FSmsZyC3d61rF_u0,11737
|
|
26
26
|
onvif/services/provisioning.py,sha256=SAK-TWBjhvQsadgN1ykt41UXU7fIXF2refcWOjVAjY4,2087
|
|
27
27
|
onvif/services/ptz.py,sha256=6TxdD-g0EKSczLoLK-y0GO5XZ4-ax03Q8lFolS9RH9w,6342
|
|
28
28
|
onvif/services/receiver.py,sha256=xyVmnPpGKHxenTcAGYkGm7bApP7hkVAc6JW-32mUQv8,1820
|
|
@@ -68,7 +68,7 @@ onvif/wsdl/ver10/search.wsdl,sha256=XryLMEVa4MwbDBbMDYcDkJ5HpSQe8HZAOo5XZ-FE1Qw,
|
|
|
68
68
|
onvif/wsdl/ver10/accesscontrol/wsdl/index.html,sha256=Z_UrJjF4N239VPl7waRb1eTGyk5i5-aFLbbKNjSYwd8,126
|
|
69
69
|
onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl,sha256=0S5zNwrYrVrzEDVwPjE6l1Uwt9ps1nOl2cOypocHpng,30010
|
|
70
70
|
onvif/wsdl/ver10/accessrules/wsdl/index.html,sha256=5lqKqf1y9W0B5zNuWsN1y8x_V2nAV8l5ytdDNfs56Do,113
|
|
71
|
-
onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl,sha256=
|
|
71
|
+
onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl,sha256=HuFCKCSAhflRTlWoZRlSpK2_GpQ8GwysFIAkxZfVfEc,197887
|
|
72
72
|
onvif/wsdl/ver10/advancedsecurity/wsdl/index.html,sha256=MA1CUtes6XUvYfsVGpmslKSENeSiEgqUHMwOsLt9fck,118
|
|
73
73
|
onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl,sha256=hFkm8zMgLBy3XpXNQM1R8wPecFoKSmW3sFncFlPyDHM,24676
|
|
74
74
|
onvif/wsdl/ver10/appmgmt/wsdl/index.html,sha256=TiH4sPOslNi2H-5XSmMWcNItjsevyhuTrQO-I_CC4WM,109
|
|
@@ -76,7 +76,7 @@ onvif/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl,sha256=
|
|
|
76
76
|
onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html,sha256=bJLmkfHuSuQHjIm3UIkMaJJ0tkT5ZsM8QBwhB6u57H0,124
|
|
77
77
|
onvif/wsdl/ver10/credential/wsdl/credential.wsdl,sha256=WGAjT4x6iNykOJyCqrAFzavmxBcCbSZsp0BnyP24tg8,85719
|
|
78
78
|
onvif/wsdl/ver10/credential/wsdl/index.html,sha256=idxTLpugvoWrJDS9B2tN27g66ZsdPoWaXYynlpql0EQ,112
|
|
79
|
-
onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl,sha256=
|
|
79
|
+
onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl,sha256=uOoJ9lKSW4z8NZ2zf4FOKr2w5NhkMKt3gmQDgg72bPc,190861
|
|
80
80
|
onvif/wsdl/ver10/display/display.wsdl,sha256=Ac4MKiBhskPVIh3HvaPA0wUcaZojyDuye62h9TdG0_M,20747
|
|
81
81
|
onvif/wsdl/ver10/display/wsdl/index.htm,sha256=Ac4MKiBhskPVIh3HvaPA0wUcaZojyDuye62h9TdG0_M,20747
|
|
82
82
|
onvif/wsdl/ver10/doorcontrol/wsdl/index.html,sha256=OBz9e4EiEJDDBri1bgppnxhREN1-Um7Q9QhdSGLdiJI,124
|
|
@@ -92,8 +92,8 @@ onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl,sha256=l5gElFQQp7nLPDZ9Zkjj
|
|
|
92
92
|
onvif/wsdl/ver10/schedule/wsdl/index.html,sha256=PoHypOFmhjvH8OkZUzWwl_IEBMCrVtXm-y_dKJ0cKog,110
|
|
93
93
|
onvif/wsdl/ver10/schedule/wsdl/schedule.wsdl,sha256=nAkZMKIImsUp6uK5_Vc53VC4sTrUsaU88BNNdQTaXR8,56036
|
|
94
94
|
onvif/wsdl/ver10/schema/common.xsd,sha256=4uMtegaEf6PGeG29C_Ifm3a3ef-scDJbXsh7ry0Nb9k,18659
|
|
95
|
-
onvif/wsdl/ver10/schema/metadatastream.xsd,sha256=
|
|
96
|
-
onvif/wsdl/ver10/schema/onvif.xsd,sha256=
|
|
95
|
+
onvif/wsdl/ver10/schema/metadatastream.xsd,sha256=jFVg0SNDHUBa48fLG0DpwcOo2SGf9Xf6u0JCfp_icuQ,25841
|
|
96
|
+
onvif/wsdl/ver10/schema/onvif.xsd,sha256=8MJRH1IdsfKtXs5G0qe-eVDzLlzeYxbgR1q3_EeIA6w,408061
|
|
97
97
|
onvif/wsdl/ver10/thermal/wsdl/index.html,sha256=_IdT_ariTD2VNurydgZw88LwB6pxLalZ6eU6yg0bYKU,109
|
|
98
98
|
onvif/wsdl/ver10/thermal/wsdl/thermal.wsdl,sha256=gGv4JTEYwtXW7RS2JEq2t73o26j-dvdfrRis_RlQBGE,33353
|
|
99
99
|
onvif/wsdl/ver10/topics/topicns.xml,sha256=W8fnvV5MgGUehItXxNbMAQnkzQfUdLMe79uF9FqEq9U,2008
|
|
@@ -108,15 +108,15 @@ onvif/wsdl/ver20/analytics/wsdl/analytics.wsdl,sha256=zAkRc3HJR5Gy0brmEJcPdqdkv3
|
|
|
108
108
|
onvif/wsdl/ver20/analytics/wsdl/index.html,sha256=1ylR91EUE7Rls3WsEZiJSVl7vQcu0N5rsrcHvS6B32E,111
|
|
109
109
|
onvif/wsdl/ver20/imaging/wsdl/imaging.wsdl,sha256=gbNeJbtLYzA0RAoNY0kr2T8G4rnPDsQA9LFFwRvZRKg,26153
|
|
110
110
|
onvif/wsdl/ver20/media/wsdl/index.html,sha256=Brecp_D7gpnotiLYNZeEb9mSHr9IXDFFNY2XY8Djefg,107
|
|
111
|
-
onvif/wsdl/ver20/media/wsdl/media.wsdl,sha256=
|
|
111
|
+
onvif/wsdl/ver20/media/wsdl/media.wsdl,sha256=DQItUaVekLRkrceB1jTsVo-Omqaz4QIYSbs0LaemKbM,142353
|
|
112
112
|
onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl,sha256=jkS0UPSv0znv2zcCV0QC73OPt3KHpoDKIcBSnd4snqQ,60601
|
|
113
113
|
onvif/wsdl/ver20/util/federated_search_documentation.html,sha256=GR6a4SPBsRDisaWRoajGLMJOd6LCjyyeghMyy7ebcyQ,86523
|
|
114
114
|
onvif/wsdl/ver20/util/fedsearch-docu-viewer.xsl,sha256=8eP-uMZgsTtuU5WaVyCzs_DJZqWIFD7iRz_5-3ComPg,325
|
|
115
115
|
onvif/wsdl/ver20/util/onvif-wsdl-viewer.xsl,sha256=Emauxs6rh69IxlxlU3k_LEH_i3SsRbwIKUk-VcMlVgk,94525
|
|
116
116
|
onvif/wsdl/ver20/util/operationIndex.html,sha256=mUsAGgNUFCIQjVV9Rx_O5YUNW3EdWNhUkAbBY-xVMhQ,39290
|
|
117
|
-
onvif_python-0.2.
|
|
118
|
-
onvif_python-0.2.
|
|
119
|
-
onvif_python-0.2.
|
|
120
|
-
onvif_python-0.2.
|
|
121
|
-
onvif_python-0.2.
|
|
122
|
-
onvif_python-0.2.
|
|
117
|
+
onvif_python-0.2.6.dist-info/licenses/LICENSE.md,sha256=ya8FumJeUkFWwCMkG9KdMxHWRWMNhtI3vHzzAWPQS8s,1091
|
|
118
|
+
onvif_python-0.2.6.dist-info/METADATA,sha256=xqtYGkn1MjrjEarbJaN8TH57rJDmfUNAnJuYpqfVfpg,62247
|
|
119
|
+
onvif_python-0.2.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
120
|
+
onvif_python-0.2.6.dist-info/entry_points.txt,sha256=7xUdI64yzWh7YfNPQDKCW9cT8XIgWuNCloikP9-yjqY,46
|
|
121
|
+
onvif_python-0.2.6.dist-info/top_level.txt,sha256=MqCi1uJmIvtVFJDz2IxLbpwq6FwDtWhqrWQtKwLaQg4,6
|
|
122
|
+
onvif_python-0.2.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|