onvif-python 0.0.1__tar.gz

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.
Files changed (117) hide show
  1. onvif_python-0.0.1/LICENSE.md +21 -0
  2. onvif_python-0.0.1/MANIFEST.in +3 -0
  3. onvif_python-0.0.1/PKG-INFO +381 -0
  4. onvif_python-0.0.1/README.md +342 -0
  5. onvif_python-0.0.1/onvif/__init__.py +13 -0
  6. onvif_python-0.0.1/onvif/client.py +485 -0
  7. onvif_python-0.0.1/onvif/operator.py +130 -0
  8. onvif_python-0.0.1/onvif/services/__init__.py +75 -0
  9. onvif_python-0.0.1/onvif/services/accesscontrol.py +105 -0
  10. onvif_python-0.0.1/onvif/services/accessrules.py +47 -0
  11. onvif_python-0.0.1/onvif/services/actionengine.py +46 -0
  12. onvif_python-0.0.1/onvif/services/analytics/analytics.py +60 -0
  13. onvif_python-0.0.1/onvif/services/analytics/ruleengine.py +44 -0
  14. onvif_python-0.0.1/onvif/services/analyticsdevice.py +122 -0
  15. onvif_python-0.0.1/onvif/services/appmgmt.py +40 -0
  16. onvif_python-0.0.1/onvif/services/authenticationbehavior.py +83 -0
  17. onvif_python-0.0.1/onvif/services/credential.py +159 -0
  18. onvif_python-0.0.1/onvif/services/deviceio.py +165 -0
  19. onvif_python-0.0.1/onvif/services/devicemgmt.py +410 -0
  20. onvif_python-0.0.1/onvif/services/display.py +62 -0
  21. onvif_python-0.0.1/onvif/services/doorcontrol.py +93 -0
  22. onvif_python-0.0.1/onvif/services/events/events.py +41 -0
  23. onvif_python-0.0.1/onvif/services/events/notification.py +34 -0
  24. onvif_python-0.0.1/onvif/services/events/pullpoint.py +29 -0
  25. onvif_python-0.0.1/onvif/services/events/subscription.py +21 -0
  26. onvif_python-0.0.1/onvif/services/imaging.py +62 -0
  27. onvif_python-0.0.1/onvif/services/media.py +424 -0
  28. onvif_python-0.0.1/onvif/services/media2.py +310 -0
  29. onvif_python-0.0.1/onvif/services/provisioning.py +50 -0
  30. onvif_python-0.0.1/onvif/services/ptz.py +187 -0
  31. onvif_python-0.0.1/onvif/services/receiver.py +46 -0
  32. onvif_python-0.0.1/onvif/services/recording.py +136 -0
  33. onvif_python-0.0.1/onvif/services/replay.py +30 -0
  34. onvif_python-0.0.1/onvif/services/schedule.py +82 -0
  35. onvif_python-0.0.1/onvif/services/search.py +149 -0
  36. onvif_python-0.0.1/onvif/services/security/advancedsecurity.py +19 -0
  37. onvif_python-0.0.1/onvif/services/security/authorizationserver.py +31 -0
  38. onvif_python-0.0.1/onvif/services/security/dot1x.py +42 -0
  39. onvif_python-0.0.1/onvif/services/security/jwt.py +21 -0
  40. onvif_python-0.0.1/onvif/services/security/keystore.py +208 -0
  41. onvif_python-0.0.1/onvif/services/security/mediasigning.py +30 -0
  42. onvif_python-0.0.1/onvif/services/security/tlsserver.py +82 -0
  43. onvif_python-0.0.1/onvif/services/thermal.py +54 -0
  44. onvif_python-0.0.1/onvif/services/uplink.py +28 -0
  45. onvif_python-0.0.1/onvif/utils/__init__.py +4 -0
  46. onvif_python-0.0.1/onvif/utils/exceptions.py +33 -0
  47. onvif_python-0.0.1/onvif/utils/wsdl.py +297 -0
  48. onvif_python-0.0.1/onvif/wsdl/ver10/accesscontrol/wsdl/index.html +7 -0
  49. onvif_python-0.0.1/onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl +702 -0
  50. onvif_python-0.0.1/onvif/wsdl/ver10/accessrules/wsdl/index.html +7 -0
  51. onvif_python-0.0.1/onvif/wsdl/ver10/actionengine.wsdl +1265 -0
  52. onvif_python-0.0.1/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl +4159 -0
  53. onvif_python-0.0.1/onvif/wsdl/ver10/advancedsecurity/wsdl/index.html +7 -0
  54. onvif_python-0.0.1/onvif/wsdl/ver10/analyticsdevice.wsdl +709 -0
  55. onvif_python-0.0.1/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl +502 -0
  56. onvif_python-0.0.1/onvif/wsdl/ver10/appmgmt/wsdl/index.html +7 -0
  57. onvif_python-0.0.1/onvif/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl +1382 -0
  58. onvif_python-0.0.1/onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html +7 -0
  59. onvif_python-0.0.1/onvif/wsdl/ver10/credential/wsdl/credential.wsdl +2018 -0
  60. onvif_python-0.0.1/onvif/wsdl/ver10/credential/wsdl/index.html +7 -0
  61. onvif_python-0.0.1/onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl +4623 -0
  62. onvif_python-0.0.1/onvif/wsdl/ver10/deviceio.wsdl +1414 -0
  63. onvif_python-0.0.1/onvif/wsdl/ver10/display/display.wsdl +383 -0
  64. onvif_python-0.0.1/onvif/wsdl/ver10/display/wsdl/index.htm +383 -0
  65. onvif_python-0.0.1/onvif/wsdl/ver10/display.wsdl +521 -0
  66. onvif_python-0.0.1/onvif/wsdl/ver10/doorcontrol/wsdl/index.html +7 -0
  67. onvif_python-0.0.1/onvif/wsdl/ver10/events/wsdl/bw-2-vs-mod.wsdl +449 -0
  68. onvif_python-0.0.1/onvif/wsdl/ver10/events/wsdl/event-vs.wsdl +947 -0
  69. onvif_python-0.0.1/onvif/wsdl/ver10/events/wsdl/event.wsdl +947 -0
  70. onvif_python-0.0.1/onvif/wsdl/ver10/events/wsdl/index.html +7 -0
  71. onvif_python-0.0.1/onvif/wsdl/ver10/federatedsearch.wsdl +344 -0
  72. onvif_python-0.0.1/onvif/wsdl/ver10/media/wsdl/media.wsdl +3684 -0
  73. onvif_python-0.0.1/onvif/wsdl/ver10/pacs/accesscontrol.wsdl +1942 -0
  74. onvif_python-0.0.1/onvif/wsdl/ver10/pacs/doorcontrol.wsdl +1792 -0
  75. onvif_python-0.0.1/onvif/wsdl/ver10/pacs/types.xsd +181 -0
  76. onvif_python-0.0.1/onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl +588 -0
  77. onvif_python-0.0.1/onvif/wsdl/ver10/receiver.wsdl +398 -0
  78. onvif_python-0.0.1/onvif/wsdl/ver10/recording.wsdl +1231 -0
  79. onvif_python-0.0.1/onvif/wsdl/ver10/replay.wsdl +221 -0
  80. onvif_python-0.0.1/onvif/wsdl/ver10/schedule/wsdl/index.html +7 -0
  81. onvif_python-0.0.1/onvif/wsdl/ver10/schedule/wsdl/schedule.wsdl +1383 -0
  82. onvif_python-0.0.1/onvif/wsdl/ver10/schema/common.xsd +422 -0
  83. onvif_python-0.0.1/onvif/wsdl/ver10/schema/metadatastream.xsd +520 -0
  84. onvif_python-0.0.1/onvif/wsdl/ver10/schema/onvif.xsd +9251 -0
  85. onvif_python-0.0.1/onvif/wsdl/ver10/search.wsdl +882 -0
  86. onvif_python-0.0.1/onvif/wsdl/ver10/thermal/wsdl/index.html +7 -0
  87. onvif_python-0.0.1/onvif/wsdl/ver10/thermal/wsdl/thermal.wsdl +777 -0
  88. onvif_python-0.0.1/onvif/wsdl/ver10/topics/topicns.xml +13 -0
  89. onvif_python-0.0.1/onvif/wsdl/ver10/uplink/wsdl/index.html +7 -0
  90. onvif_python-0.0.1/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl +256 -0
  91. onvif_python-0.0.1/onvif/wsdl/ver20/analytics/humanbody.xsd +490 -0
  92. onvif_python-0.0.1/onvif/wsdl/ver20/analytics/humanface.xsd +501 -0
  93. onvif_python-0.0.1/onvif/wsdl/ver20/analytics/index.html +7 -0
  94. onvif_python-0.0.1/onvif/wsdl/ver20/analytics/radiometry.xsd +389 -0
  95. onvif_python-0.0.1/onvif/wsdl/ver20/analytics/rules.xsd +127 -0
  96. onvif_python-0.0.1/onvif/wsdl/ver20/analytics/wsdl/analytics.wsdl +757 -0
  97. onvif_python-0.0.1/onvif/wsdl/ver20/analytics/wsdl/index.html +7 -0
  98. onvif_python-0.0.1/onvif/wsdl/ver20/imaging/wsdl/imaging.wsdl +603 -0
  99. onvif_python-0.0.1/onvif/wsdl/ver20/media/wsdl/index.html +7 -0
  100. onvif_python-0.0.1/onvif/wsdl/ver20/media/wsdl/media.wsdl +2862 -0
  101. onvif_python-0.0.1/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl +1450 -0
  102. onvif_python-0.0.1/onvif/wsdl/ver20/util/federated_search_documentation.html +1647 -0
  103. onvif_python-0.0.1/onvif/wsdl/ver20/util/fedsearch-docu-viewer.xsl +8 -0
  104. onvif_python-0.0.1/onvif/wsdl/ver20/util/onvif-wsdl-viewer.xsl +2580 -0
  105. onvif_python-0.0.1/onvif/wsdl/ver20/util/operationIndex.html +97 -0
  106. onvif_python-0.0.1/onvif_python.egg-info/PKG-INFO +381 -0
  107. onvif_python-0.0.1/onvif_python.egg-info/SOURCES.txt +115 -0
  108. onvif_python-0.0.1/onvif_python.egg-info/dependency_links.txt +1 -0
  109. onvif_python-0.0.1/onvif_python.egg-info/requires.txt +7 -0
  110. onvif_python-0.0.1/onvif_python.egg-info/top_level.txt +1 -0
  111. onvif_python-0.0.1/pyproject.toml +62 -0
  112. onvif_python-0.0.1/setup.cfg +4 -0
  113. onvif_python-0.0.1/setup.py +3 -0
  114. onvif_python-0.0.1/tests/test_client.py +0 -0
  115. onvif_python-0.0.1/tests/test_core.py +0 -0
  116. onvif_python-0.0.1/tests/test_exceptions.py +0 -0
  117. onvif_python-0.0.1/tests/test_wsdl_map.py +27 -0
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2025 Nirsimetri Technologies®
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ include LICENSE.md
2
+ include README.md
3
+ recursive-include onvif/wsdl *
@@ -0,0 +1,381 @@
1
+ Metadata-Version: 2.4
2
+ Name: onvif-python
3
+ Version: 0.0.1
4
+ Summary: A comprehensive and developer-friendly Python library for working with ONVIF-compliant devices
5
+ Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
6
+ Maintainer: Kaburagi
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://github.com/nirsimetri/onvif-python
9
+ Project-URL: Issues, https://github.com/nirsimetri/onvif-python/issues
10
+ Project-URL: Documentation, https://deepwiki.com/nirsimetri/onvif-python
11
+ Project-URL: Repository, https://github.com/nirsimetri/onvif-python.git
12
+ Project-URL: Changelog, https://github.com/nirsimetri/onvif-python/releases
13
+ Keywords: ONVIF,onvif,Camera,onvif-python,ip-camera,cctv,soap,surveillance,cctv cameras,soap-client,onvif-client,onvif-library,onvif-specifications
14
+ Classifier: Development Status :: 3 - Alpha
15
+ Classifier: Environment :: Console
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: Intended Audience :: Information Technology
21
+ Classifier: Intended Audience :: Science/Research
22
+ Classifier: Topic :: Software Development :: Libraries
23
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
+ Classifier: Topic :: Security
25
+ Classifier: Topic :: Multimedia :: Video
26
+ Classifier: Topic :: Multimedia :: Sound/Audio
27
+ Classifier: Topic :: Communications
28
+ Classifier: Natural Language :: English
29
+ Requires-Python: >=3.9
30
+ Description-Content-Type: text/markdown
31
+ License-File: LICENSE.md
32
+ Requires-Dist: zeep>=4.2.1
33
+ Requires-Dist: requests>=2.28.0
34
+ Provides-Extra: dev
35
+ Requires-Dist: pytest>=7.0; extra == "dev"
36
+ Requires-Dist: black; extra == "dev"
37
+ Requires-Dist: flake8; extra == "dev"
38
+ Dynamic: license-file
39
+
40
+ # ONVIF Python
41
+
42
+ [![License](https://img.shields.io/badge/License-MIT-blue)](https://github.com/nirsimetri/onvif-python?tab=MIT-1-ov-file)
43
+ [![DeepWiki](https://img.shields.io/badge/DeepWiki-AI%20Wiki-orange)](https://deepwiki.com/nirsimetri/onvif-python)
44
+ [![Release](https://img.shields.io/badge/Release-v0.0.1-green?logo=archive)](https://github.com/nirsimetri/onvif-python/releases)
45
+ <br>
46
+ [![PyPI](https://img.shields.io/badge/PyPI-0.0.1-yellow?logo=archive)](https://pypi.org/project/onvif-python/)
47
+ [![Downloads](https://img.shields.io/pypi/dm/onvif-python?label=PyPI%20Downloads)](https://pypi.org/project/onvif-python/)
48
+
49
+ Are you having trouble finding a Python ONVIF library that supports your device?
50
+ Are you confused about the compatibility of the various ONVIF versions, which are updated every six months?
51
+
52
+ **This project provides a comprehensive and developer-friendly Python library for working with ONVIF-compliant devices.** It is designed to be reliable, easy to integrate, and flexible enough to support a wide range of ONVIF profiles and services.
53
+
54
+ **[ONVIF](https://www.onvif.org) (Open Network Video Interface Forum)** is a global standard for the interface of IP-based physical security products, including network cameras, video recorders, and related systems.
55
+
56
+ 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.
57
+
58
+ 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.
59
+
60
+ ## Key Features
61
+ - Full implementation of ONVIF core services and profiles
62
+ - Support for device discovery, media streaming, PTZ control, event management, and more
63
+ - Pythonic abstraction over SOAP requests and responses (no need to handcraft XML)
64
+ - Extensible architecture for custom ONVIF extensions
65
+ - Compatible with multiple ONVIF specification versions
66
+ - Example scripts and tests included
67
+
68
+ ## Who Is It For?
69
+ - **Individual developers** exploring ONVIF or building hobby projects
70
+ - **Companies** building video intelligence, analytics, or VMS platforms
71
+ - **Security integrators** who need reliable ONVIF interoperability across devices
72
+
73
+ ## Installation
74
+
75
+ From official [PyPI](https://pypi.org/project/onvif-python/):
76
+ ```bash
77
+ pip install onvif-python
78
+ ```
79
+ Or clone this repository and install locally:
80
+ ```bash
81
+ git clone https://github.com/nirsimetri/onvif-python
82
+ cd onvif-python
83
+ pip install .
84
+ ```
85
+
86
+ ## Usage Example
87
+
88
+ > [!TIP]
89
+ > You can view the complete documentation automatically generated by DeepWiki via the [onvif-python AI Wiki](https://deepwiki.com/nirsimetri/onvif-python) link. We currently do not have an official documentation site. Help us create more examples and helpful documentation by [contributing](https://github.com/nirsimetri/onvif-python?tab=contributing-ov-file).
90
+
91
+ Below are simple examples to help you get started with the ONVIF Python library. These demonstrate how to connect to an ONVIF-compliant device and retrieve basic device information.
92
+
93
+ **1. Initialize the ONVIFClient**
94
+
95
+ Create an instance of `ONVIFClient` by providing your device's IP address, port, username, and password:
96
+
97
+ ```python
98
+ from onvif import ONVIFClient
99
+
100
+ client = ONVIFClient("192.168.1.17", 8000, "admin", "admin123")
101
+ ```
102
+
103
+ **2. Create Service Instance**
104
+
105
+ `ONVIFClient` provides several main services that can be accessed via the following methods:
106
+
107
+ - `client.devicemgmt()` — Device Management
108
+ - `client.events()` — Events
109
+ - `client.imaging()` — Imaging
110
+ - `client.media()` — Media
111
+ - `client.media2()` — Media 2
112
+ - `client.ptz()` — PTZ (Pan-Tilt-Zoom)
113
+ - `client.deviceio()` — Device IO
114
+ - `client.analytics()` — Analytics
115
+ - `client.recording()` — Recording
116
+
117
+ and so on, check [Implemented ONVIF Services](https://github.com/nirsimetri/onvif-python?tab=readme-ov-file#implemented-onvif-services) for more details
118
+
119
+ Example usage:
120
+ ```python
121
+ device = client.devicemgmt() # Device Management (Core)
122
+ media = client.media() # Media
123
+ ```
124
+
125
+ **3. Get Device Information**
126
+
127
+ Retrieve basic information about the device, such as manufacturer, model, firmware version, and serial number using `devicemgmt()` service:
128
+
129
+ ```python
130
+ info = device.GetDeviceInformation()
131
+ print(info)
132
+ # Example output: {'Manufacturer': '...', 'Model': '...', 'FirmwareVersion': '...', 'SerialNumber': '...'}
133
+ ```
134
+
135
+ **4. Get RTSP URL**
136
+
137
+ Retrieve the RTSP stream URL for live video streaming from the device using `media()` service:
138
+
139
+ ```python
140
+ profile = media.GetProfiles()[0] # use the first profile
141
+ stream = media.GetStreamUri(
142
+ ProfileToken=profile.token,
143
+ StreamSetup={"Stream": "RTP-Unicast", "Transport": {"Protocol": "RTSP"}}
144
+ )
145
+ print(stream)
146
+ # Example output: {'Uri': 'rtsp://192.168.1.17:8554/Streaming/Channels/101', ...}
147
+ ```
148
+
149
+ Explore more advanced usage and service-specific operations in the [`examples/`](./examples/) folder.
150
+
151
+ > [!IMPORTANT]
152
+ > If you're new to ONVIF and want to learn more, we highly recommend taking the official free online course provided by ONVIF at [Introduction to ONVIF Course](https://www.onvif.org/about/introduction-to-onvif-course). Please note that we are not endorsed or sponsored by ONVIF, see [Legal Notice](#legal-notice) for details.
153
+
154
+ ## Device Verification: Why Use GetCapabilities First?
155
+
156
+ > [!WARNING]
157
+ > Before performing any operations on an ONVIF device, it is highly recommended to verify which capabilities and services are available and supported by the device using the `GetCapabilities` method from `devicemgmt()` service instance. This step ensures that your application interacts only with features that the device actually implements, preventing errors and improving compatibility.
158
+
159
+ **Why verify device capabilities with GetCapabilities?**
160
+
161
+ - **Device Diversity:** Not all ONVIF devices support every capability or service. Capabilities may vary by manufacturer, model, firmware, or configuration.
162
+ - **Error Prevention:** Attempting to use unsupported features can result in failed requests, exceptions, or undefined behavior.
163
+ - **Dynamic Feature Detection:** Devices may enable or disable capabilities over time (e.g., after firmware updates or configuration changes).
164
+ - **Optimized Integration:** By checking available capabilities, your application can adapt its workflow and UI to match the device's actual features.
165
+
166
+ **How to verify device capabilities:**
167
+
168
+ Call `GetCapabilities` on your `devicemgmt()` instance:
169
+
170
+ ```python
171
+ from onvif import ONVIFClient
172
+
173
+ client = ONVIFClient("192.168.1.17", 8000, "admin", "admin123")
174
+ capabilities = client.devicemgmt().GetCapabilities()
175
+ print(capabilities)
176
+ # Example output: {'Media': {'XAddr': 'http://192.168.1.17:8000/onvif/media_service', ...}, 'PTZ': {...}, ...}
177
+ ```
178
+
179
+ Review the returned dictionary to determine which capabilities and services (e.g., Media, PTZ, Analytics) are available before invoking further operations.
180
+
181
+ ## Tested Devices
182
+
183
+ This library has been tested with a variety of ONVIF-compliant devices. For the latest and most complete list of devices that have been verified to work with this library, please refer to:
184
+
185
+ - [List of tested devices (device-test)](https://github.com/nirsimetri/onvif-products-directory/blob/main/device-test)
186
+
187
+ If your device is not listed right now, feel free to contribute your test results or feedback via Issues or Discussions at [onvif-products-directory](https://github.com/nirsimetri/onvif-products-directory). Your contribution will be invaluable to the community and the public.
188
+
189
+ > [!IMPORTANT]
190
+ > Device testing contributions must be made with a real device and use the scripts provided in the [onvif-products-directory](https://github.com/nirsimetri/onvif-products-directory) repo. Please be sure to contribute using a device model not already listed.
191
+
192
+ ## Supported ONVIF Profiles
193
+
194
+ This library fully supports all major ONVIF Profiles listed below. Each profile represents a standardized set of features and use cases, ensuring interoperability between ONVIF-compliant devices and clients. You can use this library to integrate with devices and systems that implement any of these profiles.
195
+
196
+ | Name | Specifications | Main Features | Typical Use Case | Support |
197
+ |-----------|----------------|---------------|------------------|---------|
198
+ | Profile_S | [Document](https://www.onvif.org/wp-content/uploads/2019/12/ONVIF_Profile_-S_Specification_v1-3.pdf) | Video streaming, PTZ, audio, multicasting | Network video transmitters (cameras) and receivers (recorders, VMS) | ✅ Yes |
199
+ | Profile_G | [Document](https://www.onvif.org/wp-content/uploads/2017/01/ONVIF_Profile_G_Specification_v1-0.pdf) | Recording, search, replay, video storage | Video recorders, storage devices | ✅ Yes |
200
+ | Profile_T | [Document](https://www.onvif.org/wp-content/uploads/2018/09/ONVIF_Profile_T_Specification_v1-0.pdf) | Advanced video streaming (H.265, analytics metadata, motion detection) | Modern cameras and clients | ✅ Yes |
201
+ | Profile_C | [Document](https://www.onvif.org/wp-content/uploads/2017/01/2013_12_ONVIF_Profile_C_Specification_v1-0.pdf) | Access control, door monitoring | Door controllers, access systems | ✅ Yes |
202
+ | Profile_A | [Document](https://www.onvif.org/wp-content/uploads/2017/06/ONVIF_Profile_A_Specification_v1-0.pdf) | Advanced access control configuration, credential management | Access control clients and devices | ✅ Yes |
203
+ | Profile_D | [Document](https://www.onvif.org/wp-content/uploads/2017/06/ONVIF_Profile_D_Specification_v1-0.pdf) | Access control peripherals (locks, sensors, relays) | Peripheral devices for access control | ✅ Yes |
204
+ | Profile_M | [Document](https://www.onvif.org/wp-content/uploads/2024/04/onvif-profile-m-specification-v1-1.pdf) | Metadata, analytics events, object detection | Analytics devices, metadata clients | ✅ Yes |
205
+
206
+ For a full description of each profile and its features, visit [ONVIF Profiles](https://www.onvif.org/profiles/).
207
+
208
+ ## Implemented ONVIF Services
209
+
210
+ > [!NOTE]
211
+ > For details about the available service functions and methods already implemented in this library, see the source code in [`onvif/services/`](./onvif/services). Or if you want to read in a more proper format visit [onvif-python AI Wiki](https://deepwiki.com/nirsimetri/onvif-python).
212
+
213
+ Below is a list of ONVIF services implemented and supported by this library, along with links to the official specifications, service definitions, and schema files as referenced from the [ONVIF Developer Specs](https://developer.onvif.org/pub/specs/branches/development/doc/index.html). This table provides a quick overview of the available ONVIF features and their technical documentation for integration and development purposes.
214
+
215
+ | Service | Specifications | Service Definitions | Schema Files | Status |
216
+ |------------------------|-------------------------------|-----------------------------|-------------------------------------|------------|
217
+ | Device Management | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [device.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/device/wsdl/devicemgmt.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ✅ Complete |
218
+ | Events | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [event.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/events/wsdl/event.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ⚠️ Partial |
219
+ | Access Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessControl.xml) | [accesscontrol.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/pacs/accesscontrol.wsdl) | [types.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/pacs/types.xsd) | ✅ Complete |
220
+ | Access Rules | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessRules.xml) | [accessrules.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/accessrules/wsdl/accessrules.wsdl) | - | ✅ Complete |
221
+ | Action Engine | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ActionEngine.xml) | [actionengine.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/actionengine.wsdl) | - | ✅ Complete |
222
+ | Analytics | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Analytics.xml) | [analytics.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/wsdl/analytics.wsdl) | [rules.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/rules.xsd) <br> [humanbody.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/humanbody.xsd) <br> [humanface.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/humanface.xsd) | ✅ Complete |
223
+ | Application Management | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AppMgmt.xml) | [appmgmt.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl) | - | ✅ Complete |
224
+ | Authentication Behavior| [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AuthenticationBehavior.xml) | [authenticationbehavior.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl) | - | ✅ Complete |
225
+ | Cloud Integration | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/CloudIntegration.xml) | [cloudintegration.yaml](https://developer.onvif.org/pub/specs/branches/development/doc/yaml.php?yaml=cloudintegration.yaml) | - | ❌ Not yet |
226
+ | Credential | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Credential.xml) | [credential.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/credential/wsdl/credential.wsdl) | - | ✅ Complete |
227
+ | Device IO | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/DeviceIo.xml) | [deviceio.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/deviceio.wsdl) |- | ✅ Complete |
228
+ | Display | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Display.xml) | [display.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/display.wsdl) | - | ✅ Complete |
229
+ | Door Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/DoorControl.xml) | [doorcontrol.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/pacs/doorcontrol.wsdl) | - | ✅ Complete |
230
+ | Imaging | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Imaging.xml) | [imaging.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/imaging/wsdl/imaging.wsdl) | - | ✅ Complete |
231
+ | Media | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Media.xml) | [media.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/media/wsdl/media.wsdl) | - | ✅ Complete |
232
+ | Media 2 | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Media2.xml) | [media2.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/media/wsdl/media.wsdl) | - | ✅ Complete |
233
+ | Provisioning | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Provisioning.xml) | [provisioning.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/provisioning/wsdl/provisioning.wsdl) | - | ✅ Complete |
234
+ | PTZ | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/PTZ.xml) | [ptz.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/ptz/wsdl/ptz.wsdl) | - | ✅ Complete |
235
+ | Receiver | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Receiver.xml) | [receiver.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/receiver.wsdl) | - | ✅ Complete |
236
+ | Recording Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/RecordingControl.xml) | [recording.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/recording.wsdl) | - | ✅ Complete |
237
+ | Recording Search | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/RecordingSearch.xml) | [search.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/search.wsdl) | - | ✅ Complete |
238
+ | Replay Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Replay.xml) | [replay.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/replay.wsdl) | - | ✅ Complete |
239
+ | Resource Query | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ResourceQuery.xml) | - | | ❌ Any idea? |
240
+ | Schedule | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Schedule.xml) | [schedule.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schedule/wsdl/schedule.wsdl) | - | ✅ Complete |
241
+ | Security | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Security.xml) | [advancedsecurity.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl) | - | ✅ Complete |
242
+ | Thermal | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Thermal.xml) | [thermal.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/thermal/wsdl/thermal.wsdl) | [radiometry.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/radiometry.xsd) | ✅ Complete |
243
+ | Uplink | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Uplink.xml) | [uplink.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/uplink/wsdl/uplink.wsdl) | - | ✅ Complete |
244
+ | WebRTC | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/WebRTC.xml) | - | - | ❌ Any idea? |
245
+
246
+ ## Service Bindings in ONVIF
247
+
248
+ ONVIF services are defined by WSDL bindings. In this library, there are two main patterns:
249
+
250
+ ### 1. Single Binding Services
251
+
252
+ Most ONVIF services use a single binding, mapping directly to one endpoint. These are accessed via simple client methods, and the binding/xAddr is always known from device capabilities.
253
+
254
+ **Examples:**
255
+
256
+ ```python
257
+ client.devicemgmt() # DeviceBinding
258
+ client.media() # MediaBinding
259
+ client.ptz() # PTZBinding
260
+ ...
261
+ ```
262
+
263
+ ✅ These are considered fixed and always accessed directly.
264
+
265
+ ### 2. Multi-Binding Services
266
+
267
+ Some ONVIF services have multiple bindings in the same WSDL. These typically include:
268
+ - A **root binding** (main entry point)
269
+ - One or more **sub-bindings**, discovered or created dynamically (e.g. after subscription/configuration creation)
270
+
271
+ **Examples:**
272
+
273
+ 1. **Events**
274
+ - **Root:** `EventBinding`
275
+ - **Sub-bindings:**
276
+ - `PullPointSubscriptionBinding` (created via `CreatePullPointSubscription`)
277
+ - `SubscriptionManagerBinding` (manages existing subscriptions)
278
+ - `NotificationProducerBinding`
279
+
280
+ Usage in library:
281
+ ```python
282
+ client.events() # root binding
283
+ client.pullpoint(subscription) # sub-binding (dynamic, via SubscriptionReference.Address)
284
+ client.subscription(subscription) # sub-binding (dynamic, via SubscriptionReference.Address)
285
+ ```
286
+
287
+ 2. **Security (Advanced Security)**
288
+ - **Root:** `AdvancedSecurityServiceBinding`
289
+ - **Sub-bindings:**
290
+ - `AuthorizationServerBinding`
291
+ - `KeystoreBinding`
292
+ - `CredentialBinding`
293
+ - `JWTBinding`
294
+ - `Dot1XBinding`
295
+ - `TLSServerBinding`
296
+ - `MediaSigningBinding`
297
+
298
+ Usage in library:
299
+ ```python
300
+ client.security() # root binding
301
+ client.authorizationserver(xaddr) # sub-binding accessor (requires xAddr)
302
+ client.keystore(xaddr)
303
+ client.jwt(xaddr)
304
+ client.dot1x(xaddr)
305
+ client.tlsserver(xaddr)
306
+ client.mediasigning(xaddr)
307
+ ```
308
+
309
+ 3. **Analytics**
310
+ - **Root:** `AnalyticsEngineBinding`
311
+ - **Sub-bindings:**
312
+ - `RuleEngineBinding`
313
+
314
+ Usage in library:
315
+ ```python
316
+ client.analytics() # root binding
317
+ client.ruleengine() # sub-binding accessor
318
+ ```
319
+ ### Summary
320
+
321
+ - **Single binding services:** Always accessed directly (e.g. `client.media()`).
322
+ - **Multi-binding services:** Have a root + sub-binding(s). Root is fixed; sub-bindings may require dynamic creation or explicit xAddr (e.g. `client.pullpoint(subscription)`, `client.authorizationserver(xaddr)`).
323
+
324
+ ## Future Improvements (Stay tuned and star ⭐ this repo)
325
+
326
+ - [ ] Implement structured data models for ONVIF Schemas using [xsdata](https://github.com/tefra/xsdata).
327
+ - [ ] Integrate [xmltodict](https://github.com/martinblech/xmltodict) for simplified XML parsing and conversion.
328
+ - [ ] Add functionality for `ONVIFClient` to accept a custom `wsdl_path` service.
329
+ - [ ] Enhance documentation with API references and diagrams (not from [AI Wiki](https://deepwiki.com/nirsimetri/onvif-python)).
330
+ - [ ] Add more usage examples for advanced features.
331
+ - [ ] Add benchmarking and performance metrics.
332
+ - [ ] Add community-contributed device configuration templates.
333
+ - [ ] Implement missing or partial ONVIF services.
334
+ - [ ] Add function to expose ONVIF devices (for debugging purposes by the community).
335
+
336
+ ## Related Projects
337
+
338
+ - [onvif-products-directory](https://github.com/nirsimetri/onvif-products-directory):
339
+ 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. It provides a unified structure for device, client, and company data, making it easier to perform research, build integrations, and generate statistics for ONVIF ecosystem analysis.
340
+
341
+ - (soon) [onvif-rest-server](https://github.com/nirsimetri/onvif-rest-server):
342
+ A RESTful API server for ONVIF devices, enabling easy integration of ONVIF device management, media streaming, and other capabilities into web applications and services.
343
+
344
+ - (soon) [onvif-mcp](https://github.com/nirsimetri/onvif-mcp):
345
+ A Model Context Protocol (MCP) server for ONVIF, providing a unified API and context-based integration for ONVIF devices, clients, and services. It enables advanced automation, orchestration, and interoperability across ONVIF-compliant devices and clients.
346
+
347
+ ## Alternatives
348
+
349
+ If you are looking for other ONVIF Python libraries, here are some alternatives:
350
+
351
+ - [python-onvif-zeep](https://github.com/FalkTannhaeuser/python-onvif-zeep):
352
+ A synchronous ONVIF client library for Python, using Zeep for SOAP communication. Focuses on compatibility and ease of use for standard ONVIF device operations. Good for scripts and applications where async is not required.
353
+
354
+ - [python-onvif-zeep-async](https://github.com/openvideolibs/python-onvif-zeep-async):
355
+ An asynchronous ONVIF client library for Python, based on Zeep and asyncio. Suitable for applications requiring non-blocking operations and concurrent device communication. Supports many ONVIF services and is actively maintained.
356
+
357
+ ## References
358
+ - [ONVIF Official Specifications](https://www.onvif.org/profiles/specifications/specification-history/)
359
+ - [ONVIF Official Specs Repository](https://github.com/onvif/specs)
360
+ - [ONVIF 2.0 Service Operation Index](https://www.onvif.org/onvif/ver20/util/operationIndex.html)
361
+ - [Project Specs Folder](../../specifications)
362
+ - [Usage Examples](./examples/)
363
+
364
+ ## Legal Notice
365
+
366
+ This project is an **independent open-source implementation** of the [ONVIF](https://www.onvif.org) specifications. It is **not affiliated with, endorsed by, or sponsored by ONVIF** or its member companies.
367
+
368
+ - The name **“ONVIF”** and the ONVIF logo are registered trademarks of the ONVIF organization.
369
+ - Any references to ONVIF within this project are made strictly for the purpose of describing interoperability with ONVIF-compliant devices and services.
370
+ - Use of the ONVIF trademark in this repository is solely nominative and does not imply any partnership, certification, or official status.
371
+ - This project includes WSDL/XSD/HTML files from the official ONVIF specifications.
372
+ - These files are © ONVIF and are redistributed here for interoperability purposes.
373
+ - All rights to the ONVIF specifications are reserved by ONVIF.
374
+
375
+ If you require certified ONVIF-compliant devices or clients, please refer to the official [ONVIF conformant product list](https://www.onvif.org/conformant-products/). For authoritative reference and the latest official ONVIF specifications, please consult the [ONVIF Official Specifications](https://www.onvif.org/profiles/specifications/specification-history/).
376
+
377
+ Use of this library is at your own risk. The authors and contributors assume no liability for any damages, direct or indirect, arising from its use.
378
+
379
+ ## License
380
+
381
+ This project is licensed under the MIT License. See [LICENSE](./LICENSE.md) for details.