Proyek ini menyediakan pustaka Python yang komprehensif dan ramah pengembang untuk bekerja dengan perangkat yang sesuai dengan ONVIF. Pustaka ini dirancang agar andal, mudah diintegrasikan, dan cukup fleksibel untuk mendukung berbagai profil dan layanan ONVIF.
ONVIF (Open Network Video Interface Forum) adalah standar global untuk antarmuka produk keamanan fisik berbasis IP, termasuk kamera jaringan, perekam video, dan sistem terkait.
Di balik layar, komunikasi ONVIF bergantung pada SOAP (Simple Object Access Protocol) — protokol pesan berbasis XML dengan definisi skema yang ketat (WSDL/XSD). SOAP memastikan interoperabilitas, tetapi jika digunakan secara langsung dapat menjadi verbose, kompleks, dan rentan terhadap kesalahan.
Pustaka ini menyederhanakan proses tersebut dengan membungkus komunikasi SOAP ke dalam API Python yang bersih. Anda tidak perlu lagi menangani parsing XML tingkat rendah, namespace, atau token keamanan secara manual — pustaka ini menangani semuanya, memungkinkan Anda untuk fokus pada pembangunan fungsionalitas.
Note
Pustaka ini akan terus diperbarui seiring dengan pembaruan versi ONVIF. Pustaka menggunakan WSDL bawaan yang akan selalu mengikuti perubahan pada Spesifikasi WSDL ONVIF. Anda juga dapat menggunakan file WSDL ONVIF Anda sendiri dengan menambahkan argumen wsdl_dir; lihat Parameter ONVIFClient.
-
WYSIWYG (What You See is What You Get): Setiap operasi ONVIF dalam pustaka ini mencerminkan spesifikasi ONVIF resmi secara tepat. Nama metode, struktur parameter, dan format respons mengikuti standar ONVIF tanpa lapisan abstraksi atau antarmuka yang diubah namanya. Apa yang Anda lihat dalam dokumentasi ONVIF adalah persis apa yang Anda dapatkan dalam Python.
-
Interoperabilitas Ragam Perangkat: Dibangun untuk menangani keragaman dunia nyata dari implementasi ONVIF lintas produsen. Pustaka ini dengan anggun menangani fitur yang hilang, operasi opsional, dan perilaku spesifik vendor melalui penanganan kesalahan yang komprehensif dan mekanisme fallback. Baik Anda bekerja dengan kamera enterprise kelas atas atau kamera IP murah, pustaka ini akan beradaptasi.
-
Akurasi Spesifikasi Resmi: Semua implementasi layanan dihasilkan dan divalidasi terhadap
Spesifikasi WSDL ONVIFresmi. Pustaka ini mencakup test suite komprehensif yang memverifikasi kepatuhan terhadap standar ONVIF, memastikan bahwa tanda tangan metode, tipe parameter, dan perilaku cocok dengan spesifikasi resmi secara tepat. -
Pendekatan Python Modern: Dirancang untuk dukungan IDE yang sangat baik dengan type hints lengkap, auto-completion, dan deteksi kesalahan langsung. Anda akan mendapatkan pengecualian
TypeErrordi awal saat mengakses operasi ONVIF dengan argumen yang salah, alih-alihSOAP faultsyang tidak jelas kemudian. API Python yang bersih dan natural bagi pengembang Python sambil mempertahankan kompatibilitas ONVIF. -
Dependensi Minimal: Hanya bergantung pada pustaka penting yang terpelihara dengan baik (
zeepuntuk SOAP,requestsuntuk HTTP). Tidak ada dependensi framework yang membengkak atau parser XML kustom. Pustaka tetap ringan sambil menyediakan fungsionalitas ONVIF penuh, membuatnya mudah diintegrasikan ke dalam proyek apa pun tanpa konflik dependensi.
- Pengembang individu yang menjelajahi ONVIF atau membangun proyek hobi
- Perusahaan yang membangun platform intelijen video, analitik, atau VMS
- Integrator keamanan yang membutuhkan interoperabilitas ONVIF yang andal di berbagai perangkat
- Python: 3.9 atau lebih tinggi
- Dependencies:
zeep>=4.3.0- Klien SOAP untuk komunikasi ONVIFrequests>=2.32.0- Library HTTP untuk permintaan jaringan
Dari PyPI resmi:
pip install --upgrade onvif-pythonAtau klon repositori ini dan instal secara lokal:
git clone https://github.com/nirsimetri/onvif-python
cd onvif-python
pip install .Tip
Anda dapat melihat dokumentasi lengkap yang dihasilkan secara otomatis oleh DeepWiki melalui tautan onvif-python AI Wiki. Saat ini kami belum memiliki situs dokumentasi resmi. Bantu kami membuat lebih banyak contoh dan dokumentasi yang bermanfaat dengan berkontribusi.
Berikut adalah contoh sederhana untuk membantu Anda memulai dengan pustaka ONVIF Python. Contoh ini menunjukkan cara menghubungkan ke perangkat yang sesuai dengan ONVIF dan mengambil informasi dasar perangkat.
1. Menemukan Perangkat ONVIF (Opsional)
Sebelum menghubungkan ke perangkat tertentu, Anda dapat menemukan perangkat ONVIF di jaringan lokal Anda menggunakan kelas ONVIFDiscovery (diterapkan pada >=v0.1.6):
from onvif import ONVIFDiscovery
# Buat instance discovery
discovery = ONVIFDiscovery(timeout=5)
# Temukan perangkat
devices = discovery.discover()
# Atau dengan
# Temukan dengan filter pencarian berdasarkan types atau scopes (pencocokan sub-string tanpa memperhatikan huruf besar/kecil)
devices = discovery.discover(search="Profile/Streaming")
# Tampilkan perangkat yang ditemukan
for device in devices:
print(f"Ditemukan perangkat di {device['host']}:{device['port']}")
print(f" Scopes: {device.get('scopes', [])}")
print(f" XAddrs: {device['xaddrs']}")2. Inisialisasi ONVIFClient
Buat instance ONVIFClient dengan memberikan alamat IP perangkat Anda, port, nama pengguna, dan kata sandi:
from onvif import ONVIFClient
# Koneksi dasar
client = ONVIFClient("192.168.1.17", 8000, "admin", "admin123")
# Dengan direktori WSDL kustom (opsional)
client = ONVIFClient(
"192.168.1.17", 8000, "admin", "admin123",
wsdl_dir="/path/to/custom/wsdl" # Gunakan direktori WSDL kustom
)3. Buat Instance Layanan
ONVIFClient menyediakan beberapa layanan utama yang dapat diakses melalui metode berikut:
client.devicemgmt()— Manajemen Perangkatclient.events()— Eventsclient.imaging()— Imagingclient.media()— Mediaclient.ptz()— PTZ (Pan-Tilt-Zoom)client.analytics()— Analytics
...dan seterusnya, periksa Layanan ONVIF yang Diimplementasikan untuk detail lebih lanjut
Contoh penggunaan:
device = client.devicemgmt() # Manajemen Perangkat (Inti)
media = client.media() # Media4. Dapatkan Informasi Perangkat
Ambil informasi dasar tentang perangkat, seperti produsen, model, versi firmware, dan nomor seri menggunakan layanan devicemgmt():
info = device.GetDeviceInformation()
print(info)
# Contoh: {'Manufacturer': '..', 'Model': '..', 'FirmwareVersion': '..', 'SerialNumber': '..'}5. Dapatkan URL RTSP
Ambil URL aliran RTSP untuk streaming video langsung dari perangkat menggunakan layanan media():
profile = media.GetProfiles()[0] # gunakan profil pertama
stream = media.GetStreamUri(
ProfileToken=profile.token,
StreamSetup={"Stream": "RTP-Unicast", "Transport": {"Protocol": "RTSP"}}
)
print(stream)
# Contoh: {'Uri': 'rtsp://192.168.1.17:8554/Streaming/Channels/101', ...}Jelajahi penggunaan lanjutan dan operasi spesifik layanan di folder examples/.
Setiap layanan ONVIF menyediakan tiga metode helper penting untuk meningkatkan pengalaman pengembangan dan membuat pekerjaan dengan operasi ONVIF lebih intuitif:
1. type(type_name)
Membuat dan mengembalikan instance dari tipe ONVIF yang ditentukan untuk membangun parameter permintaan yang kompleks (diterapkan pada >=v0.1.9).
Penggunaan:
device = client.devicemgmt()
# Buat objek user baru
new_user = device.type('CreateUsers')
new_user.User.append({
"Username": 'new_user',
"Password": 'new_password',
"UserLevel": 'User'
})
device.CreateUsers(new_user)
# Set hostname
hostname = device.type('SetHostname')
hostname.Name = 'NewHostname'
device.SetHostname(hostname)
# Konfigurasi waktu sistem
time_params = device.type('SetSystemDateAndTime')
time_params.DateTimeType = 'NTP'
time_params.DaylightSavings = True
time_params.TimeZone.TZ = 'UTC+02:00'
now = datetime.now()
time_params.UTCDateTime.Date.Year = now.year
time_params.UTCDateTime.Date.Month = now.month
time_params.UTCDateTime.Date.Day = now.day
time_params.UTCDateTime.Time.Hour = now.hour
time_params.UTCDateTime.Time.Minute = now.minute
time_params.UTCDateTime.Time.Second = now.second
device.SetSystemDateAndTime(time_params)2. operations()
Menampilkan daftar semua operasi yang tersedia untuk layanan saat ini (diterapkan pada >=v0.2.0).
Mengembalikan:
- Daftar nama operasi yang dapat dipanggil pada layanan
Penggunaan:
device = client.devicemgmt()
media = client.media()
ptz = client.ptz()
# Daftar semua operasi yang tersedia untuk setiap layanan
print("Operasi Device Management:")
for op in device.operations():
print(f" - {op}")
print("\nOperasi Media:")
for op in media.operations():
print(f" - {op}")
print("\nOperasi PTZ:")
for op in ptz.operations():
print(f" - {op}")
# Periksa apakah operasi spesifik didukung
if 'ContinuousMove' in ptz.operations():
print("Pergerakan PTZ berkelanjutan didukung")3. desc(method_name)
Menyediakan dokumentasi komprehensif dan informasi parameter untuk operasi ONVIF mana pun (diterapkan pada >=v0.2.0).
Mengembalikan:
doc: Dokumentasi metode dari WSDLrequired: Daftar nama parameter yang wajiboptional: Daftar nama parameter yang opsionalmethod_name: Nama metodeservice_name: Nama layanan
Penggunaan:
device = client.devicemgmt()
# Dapatkan informasi detail tentang metode
info = device.desc('GetDeviceInformation')
print(info['doc'])
print("Parameter wajib:", info['required'])
print("Parameter opsional:", info['optional'])
# Eksplorasi metode yang tersedia terlebih dahulu
methods = device.operations()
for method in methods[:5]: # Tampilkan 5 metode pertama
info = device.desc(method)
print(f"{method}: {len(info['required'])} wajib, {len(info['optional'])} opsional")Tip
Metode helper ini tersedia di semua layanan ONVIF (devicemgmt(), media(), ptz(), events(), imaging(), analytics(), dll.) dan menyediakan API yang konsisten untuk menjelajahi dan menggunakan kemampuan ONVIF di berbagai tipe dan produsen perangkat.
Important
Jika Anda baru mengenal ONVIF dan ingin mempelajari lebih lanjut, kami sangat menyarankan untuk mengikuti kursus online gratis resmi yang disediakan oleh ONVIF di Kursus Pengantar ONVIF. Harap dicatat bahwa kami tidak didukung atau disponsori oleh ONVIF, lihat Pernyataan Hukum untuk detailnya.
Note
CLI secara otomatis terinstal saat Anda menginstal paket onvif-python, lihat Instalasi. Fitur ini telah tersedia sejak onvif-python versi >=0.1.1.
Pustaka ini menyertakan antarmuka baris perintah (CLI) yang kuat untuk berinteraksi dengan perangkat ONVIF langsung dari terminal Anda. CLI ini mendukung eksekusi perintah langsung dan mode shell interaktif, menyediakan cara yang fleksibel dan efisien untuk mengelola dan men-debug perangkat ONVIF.
- Penemuan Perangkat: Penemuan perangkat ONVIF otomatis di jaringan lokal menggunakan protokol WS-Discovery.
- Shell Interaktif: Shell yang ramah pengguna dengan pelengkapan tab, riwayat perintah, dan output berwarna.
- Eksekusi Perintah Langsung: Jalankan perintah ONVIF langsung dari terminal untuk skrip dan otomatisasi.
- Penemuan Otomatis: Secara otomatis mendeteksi layanan yang tersedia di perangkat.
- Manajemen Koneksi: Mendukung HTTP/HTTPS, timeout kustom, dan verifikasi SSL.
- Manajemen Data: Simpan hasil dari perintah dan gunakan sebagai parameter dalam perintah berikutnya.
- Lintas Platform: Bekerja di Windows, macOS, Linux, dan Raspberry Pi.
|
|
| Tampilan pertama | Daftar operasi yang tersedia |
|---|
1. CLI Langsung
usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE]
[--per-page PER_PAGE] [--timeout TIMEOUT] [--https] [--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL]
[--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--output OUTPUT] [--version]
[service] [method] [params ...]
ONVIF Terminal Client — v0.2.10
https://github.com/nirsimetri/onvif-python
positional arguments:
service ONVIF service name (e.g., devicemgmt, media, ptz)
method Service method name (e.g., GetCapabilities, GetProfiles)
params Method parameters as Simple Parameter or JSON string
options:
-h, --help show this help message and exit
--host HOST, -H HOST ONVIF device IP address or hostname
--port PORT, -P PORT ONVIF device port (default: 80)
--username USERNAME, -u USERNAME
Username for authentication
--password PASSWORD, -p PASSWORD
Password for authentication
--discover, -d Discover ONVIF devices on the network using WS-Discovery
--filter FILTER, -f FILTER
Filter discovered devices by types or scopes (case-insensitive substring match)
--search SEARCH, -s SEARCH
Search ONVIF products database by model or company (e.g., 'c210', 'hikvision')
--page PAGE Page number for search results (default: 1)
--per-page PER_PAGE Number of results per page (default: 20)
--timeout TIMEOUT Connection timeout in seconds (default: 10)
--https Use HTTPS instead of HTTP
--no-verify Disable SSL certificate verification
--no-patch Disable ZeepPatcher
--interactive, -i Start interactive mode
--debug Enable debug mode with XML capture
--wsdl WSDL Custom WSDL directory path
--cache {all,db,mem,none}
Caching mode for ONVIFClient (default: all). 'all': memory+disk, 'db': disk-only, 'mem': memory-only, 'none': disabled.
--health-check-interval HEALTH_CHECK_INTERVAL, -hci HEALTH_CHECK_INTERVAL
Health check interval in seconds for interactive mode (default: 10)
--output OUTPUT, -o OUTPUT
Save command output to file. Supports .json, .xml extensions for format detection, or plain text. XML format automatically enables
debug mode for SOAP capture.
--version, -v Show ONVIF CLI version and exit
Examples:
# Product search
onvif --search c210
onvif -s "axis camera"
onvif --search hikvision --page 2 --per-page 5
# Discover ONVIF devices on network
onvif --discover --username admin --password admin123 --interactive
onvif media GetProfiles --discover --username admin
onvif -d -i
# Discover with filtering
onvif --discover --filter ptz --interactive
onvif -d -f "C210" -i
onvif -d -f "audio_encoder" -u admin -p admin123 -i
# Direct command execution
onvif devicemgmt GetCapabilities Category=All --host 192.168.1.17 --port 8000 --username admin --password admin123
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity={'PanTilt': {'x': -0.1, 'y': 0}} -H 192.168.1.17 -P 8000 -u admin -p admin123
# Save output to file
onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
onvif media GetProfiles --host 192.168.1.17 --port 8000 --username admin --password admin123 --output profiles.xml
onvif ptz GetConfigurations --host 192.168.1.17 --port 8000 --username admin --password admin123 --output ptz_config.txt --debug
# Interactive mode
onvif --host 192.168.1.17 --port 8000 --username admin --password admin123 --interactive
# Prompting for username and password
# (if not provided)
onvif -H 192.168.1.17 -P 8000 -i
# Using HTTPS
onvif media GetProfiles --host camera.example.com --port 443 --username admin --password admin123 --https2. Shell Interaktif
ONVIF Interactive Shell — v0.2.10
https://github.com/nirsimetri/onvif-python
Basic Commands:
capabilities, caps - Show device capabilities
services - Show available services with details
info - Show connection and device information
exit, quit - Exit the shell
shortcuts - Show available shortcuts
Navigation Commands:
<service> - Enter service mode (e.g., devicemgmt, media)
<service> <argument> - Enter service mode with argument (e.g. pullpoint SubscriptionRef=<value>)
cd <service> - Enter service mode (alias)
ls - List commands/services/methods in grid format
up - Exit current service mode (go up one level)
pwd - Show current service context
clear - Clear terminal screen
help <command> - Show help for a specific command
Service Mode Commands:
desc <method> - Show method documentation
type <method> - Show input/output types from WSDL
Method Execution:
<method> - Execute method without parameters
<method> {"param": "value"} - Execute method with JSON parameters
<method> param=value - Execute method with simple parameters
Data Management:
store <name> - Store last result with a name
show <name> - Show stored data
show <name>[0] - Show element at index (for lists)
show <name>.attribute - Show specific attribute
show - List all stored data
rm <name> - Remove stored data by name
cls - Clear all stored data
Using Stored Data in Methods:
Use $variable syntax to reference stored data in method parameters:
- $profiles[0].token - Access list element and attribute
- $profiles[0].VideoSourceConfiguration.SourceToken
Example:
GetProfiles - Get profiles
store profiles - Store result
show profiles[0].token - Show first profile token
GetImagingSettings VideoSourceToken=$profiles[0].VideoSourceConfiguration.SourceToken
Debug Commands:
debug - Show last SOAP request & response (if --debug enabled)
Tab Completion:
Use TAB key for auto-completion of commands, services, and methods
Type partial commands to see suggestions
Examples:
192.168.1.17:8000 > caps # Show capabilities
192.168.1.17:8000 > dev<TAB> # Completes to 'devicemgmt'
192.168.1.17:8000 > cd devicemgmt # Enter device management
192.168.1.17:8000/devicemgmt > Get<TAB> # Show methods starting with 'Get'
192.168.1.17:8000/devicemgmt > GetServices {"IncludeCapability": true}
192.168.1.17:8000/devicemgmt > GetServices IncludeCapability=True
192.168.1.17:8000/devicemgmt > store services_info
192.168.1.17:8000/devicemgmt > up # Exit service mode
192.168.1.17:8000 > # Back to root context1. Mode Interaktif
Shell interaktif direkomendasikan untuk eksplorasi dan debugging. Ini menyediakan cara intuitif untuk menavigasi layanan, memanggil metode, dan melihat hasil.
Untuk memulai shell interaktif, berikan detail koneksi:
onvif --host 192.168.1.17 --port 8000 --username admin --password admin123 -iJika Anda tidak menyertakan nama pengguna atau kata sandi, Anda akan diminta untuk memasukkannya secara aman.
Perintah Shell Interaktif:
| Perintah | Deskripsi |
|---|---|
help |
Tampilkan informasi bantuan |
ls |
Daftar layanan atau metode yang tersedia dalam konteks saat ini |
cd <service> |
Masuk ke mode layanan (mis., cd devicemgmt) |
up |
Kembali ke konteks root |
pwd |
Tampilkan konteks layanan saat ini |
desc <method> |
Tampilkan dokumentasi untuk sebuah metode |
store <name> |
Simpan hasil terakhir dengan nama variabel |
show <name> |
Tampilkan variabel yang disimpan |
exit / quit |
Keluar dari shell |
Important
Anda dapat melihat semua perintah lainnya yang tersedia di shell interaktif dengan mencobanya langsung. Shell interaktif menjalankan pemeriksaan kesehatan latar belakang secara berkala untuk mendeteksi kehilangan koneksi. Shell ini menggunakan ping TCP diam-diam agar tidak mengganggu pekerjaan Anda dan akan otomatis keluar jika perangkat tidak dapat dijangkau, mirip dengan sesi SSH.
Perangkaian Perintah dengan &&:
CLI mendukung perangkaian beberapa perintah dalam satu baris menggunakan operator &&, memungkinkan Anda mengeksekusi operasi berurutan secara efisien:
# Masuk ke layanan dan eksekusi metode dalam satu baris
192.168.1.17:8000 > media && GetProfiles && store profiles
# Perangkaian beberapa pemanggilan metode
192.168.1.17:8000 > devicemgmt && GetDeviceInformation && store device_info
# Alur kerja kompleks
192.168.1.17:8000 > media && GetProfiles && store profiles && up && imaging && GetImagingSettings VideoSourceToken=$profiles[0].VideoSourceConfiguration.SourceTokenFitur ini sangat berguna untuk:
- Operasi cepat tanpa memasuki mode layanan
- Skrip tugas berulang
- Menguji alur kerja
- Mengotomasi prosedur multi-langkah
2. Penemuan Perangkat (WS-Discovery)
CLI menyertakan fitur penemuan perangkat ONVIF otomatis menggunakan protokol WS-Discovery. Fitur ini memungkinkan Anda menemukan semua perangkat yang sesuai dengan ONVIF di jaringan lokal Anda tanpa perlu mengetahui alamat IP mereka terlebih dahulu.
Temukan dan Terhubung Secara Interaktif:
# Temukan perangkat dan masuk ke mode interaktif
onvif --discover --username admin --password admin123 --interactive
# Bentuk singkat
onvif -d -u admin -p admin123 -i
# Temukan dengan filter pencarian
onvif --discover --search "C210" --interactive
onvif -d -s ptz -u admin -p admin123 -i
# Temukan dan interaktif (akan meminta kredensial)
onvif -d -iTemukan dan Eksekusi Perintah:
# Temukan perangkat dan eksekusi perintah pada perangkat yang dipilih
onvif media GetProfiles --discover --username admin --password admin123
# Bentuk singkat
onvif media GetProfiles -d -u admin -p admin123Cara Kerja Penemuan Perangkat:
- Pemindaian Jaringan Otomatis: Mengirim pesan WS-Discovery Probe ke alamat multicast
239.255.255.250:3702 - Deteksi Perangkat: Mendengarkan respons ProbeMatch dari perangkat ONVIF (timeout default: 4 detik)
- Pemilihan Interaktif: Menampilkan daftar bernomor dari perangkat yang ditemukan dengan detail mereka:
- UUID Perangkat (Endpoint Reference)
- XAddrs (URL layanan ONVIF)
- Tipe Perangkat (mis., NetworkVideoTransmitter)
- Scopes (informasi nama, lokasi, hardware, profil)
- Koneksi: Setelah Anda memilih perangkat, CLI otomatis terhubung menggunakan host dan port yang ditemukan
Contoh Output Penemuan:
Discovering ONVIF devices on network...
Network interface: 192.168.1.100
Timeout: 4s
Found 2 ONVIF device(s):
[1] 192.168.1.14:2020
[id] uuid:3fa1fe68-b915-4053-a3e1-a8294833fe3c
[xaddrs] http://192.168.1.14:2020/onvif/device_service
[types] tdn:NetworkVideoTransmitter
[scopes] [name/C210] [hardware/C210] [Profile/Streaming] [location/Hong Kong] [type/NetworkVideoTransmitter]
[2] 192.168.1.17:8000
[id] urn:uuid:7d04ff31-61e6-11f0-a00c-6056eef47207
[xaddrs] http://192.168.1.17:8000/onvif/device_service
[types] dn:NetworkVideoTransmitter tds:Device
[scopes] [type/NetworkVideoTransmitter] [location/unknown] [name/IPC_123465959]
Select device number 1-2 or q to quit: 1
Selected: 192.168.1.14:2020
Catatan:
- Penemuan hanya bekerja di jaringan lokal (subnet yang sama)
- Beberapa jaringan mungkin memblokir lalu lintas multicast (periksa pengaturan firewall)
- Argumen
--hostdan--porttidak diperlukan saat menggunakan--discover - Anda masih dapat memberikan
--usernamedan--passworddi awal untuk menghindari prompt
3. Eksekusi Perintah Langsung
Anda juga dapat mengeksekusi satu perintah ONVIF secara langsung. Ini berguna untuk skrip atau pengecekan cepat.
Sintaks:
onvif <service> <method> [parameters...] -H <host> -P <port> -u <user> -p <pass>Contoh:
# Dapatkan kapabilitas perangkat
onvif devicemgmt GetCapabilities Category=All -H 192.168.1.17 -P 8000 -u admin -p admin123
# Gerakkan kamera PTZ
onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1, "y": 0}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
# Simpan output ke file
onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
onvif media GetProfiles -H 192.168.1.17 -P 8000 -u admin -p admin123 -o profiles.xml4. Pencarian Produk ONVIF
CLI menyertakan database produk yang kompatibel dengan ONVIF yang dapat dicari untuk membantu mengidentifikasi dan meneliti perangkat sebelum terhubung (diterapkan pada >=v0.2.0).
Pencarian Dasar:
# Cari berdasarkan nama model
onvif --search "C210"
onvif -s "axis camera"
# Cari berdasarkan produsen
onvif --search "hikvision"
onvif -s "dahua"
# Cari berdasarkan kata kunci apapun
onvif --search "ptz"
onvif -s "thermal"Hasil Berpaginasi:
# Navigasi melalui beberapa halaman hasil
onvif --search "hikvision" --page 2 --per-page 5
onvif -s "axis" --page 1 --per-page 10
# Sesuaikan hasil per halaman (1-100)
onvif --search "camera" --per-page 20Informasi Database Pencarian:
Database produk berisi informasi komprehensif tentang perangkat ONVIF yang telah diuji:
| Field | Deskripsi |
|---|---|
| ID | Identifikasi produk unik |
| Test Date | Kapan perangkat terakhir diuji/diverifikasi |
| Model | Nama dan nomor model perangkat |
| Firmware | Versi firmware yang diuji |
| Profiles | Profil ONVIF yang didukung (S, G, T, C, A, dll.) |
| Category | Tipe perangkat (Camera, NVR, dll.) |
| Type | Klasifikasi perangkat spesifik |
| Company | Nama produsen |
Contoh Output:
Found 15 product(s) matching: hikvision
Showing 1-10 of 15 results
ID | Test Date | Model | Firmware | Profiles | Category | Type | Company
----|---------------------|-------------------|----------|----------|----------|---------|---------
342 | 2024-08-15 17:53:12 | DS-2CD2143G2-IU | V5.7.3 | S,G,T | Camera | device | Hikvision
341 | 2024-08-14 14:22:05 | DS-2DE2A404IW-DE3 | V5.6.15 | S,G,T | Camera | device | Hikvision
...
Page 1 of 2
Navigation: Next: --page 2
Semua parameter ONVIFClient (seperti --timeout, --https, --cache, dll.) tersedia sebagai argumen baris perintah. Gunakan onvif --help untuk melihat semua opsi yang tersedia.
Kelas ONVIFClient menyediakan berbagai opsi konfigurasi untuk menyesuaikan perilaku koneksi, strategi caching, pengaturan keamanan, dan kemampuan debugging. Berikut adalah deskripsi detail dari semua parameter yang tersedia:
Parameter Dasar
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
host |
str |
✅ Ya | - | Alamat IP atau hostname perangkat ONVIF (mis., "192.168.1.17") |
port |
int |
✅ Ya | - | Nomor port untuk layanan ONVIF (port umum: 80, 8000, 8080) |
username |
str |
✅ Ya | - | Nama pengguna untuk autentikasi perangkat (menggunakan digest authentication) |
password |
str |
✅ Ya | - | Kata sandi untuk autentikasi perangkat |
Parameter Koneksi
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
timeout |
int |
❌ Tidak | 10 |
Timeout koneksi dalam detik untuk permintaan SOAP |
use_https |
bool |
❌ Tidak | False |
Gunakan HTTPS sebagai pengganti HTTP untuk komunikasi aman |
verify_ssl |
bool |
❌ Tidak | True |
Verifikasi sertifikat SSL saat menggunakan HTTPS (set ke False untuk sertifikat self-signed) |
Parameter Caching
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
cache |
CacheMode |
❌ Tidak | CacheMode.ALL |
Strategi caching WSDL (lihat Mode Cache di bawah) |
Parameter Fitur
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
apply_patch |
bool |
❌ Tidak | True |
Aktifkan patching zeep untuk parsing field xsd:any yang lebih baik dan flattening otomatis, diterapkan pada (>=v0.0.4) |
capture_xml |
bool |
❌ Tidak | False |
Aktifkan plugin XML capture untuk debugging permintaan/respons SOAP, diterapkan pada (>=v0.0.6) |
wsdl_dir |
str |
❌ Tidak | None |
Path direktori WSDL kustom untuk menggunakan file WSDL eksternal sebagai pengganti yang built-in (mis., /path/to/custom/wsdl), diterapkan pada (>=v0.1.0) |
Mode Cache
Pustaka menyediakan empat strategi caching melalui enum CacheMode:
| Mode | Deskripsi | Cocok Untuk | Kecepatan Startup | Penggunaan Disk | Penggunaan Memori |
|---|---|---|---|---|---|
CacheMode.ALL |
Cache in-memory + disk (SQLite) | Server produksi, aplikasi multi-device | Cepat | Tinggi | Tinggi |
CacheMode.DB |
Cache disk saja (SQLite) | Batch jobs, CLI tools | Sedang | Sedang | Rendah |
CacheMode.MEM |
Cache in-memory saja | Script singkat, demo | Sedang | Tidak ada | Sedang |
CacheMode.NONE |
Tanpa caching | Testing, debugging | Lambat | Tidak ada | Rendah |
Rekomendasi: Gunakan CacheMode.ALL (default) untuk aplikasi produksi guna memaksimalkan performa.
Contoh Penggunaan
Koneksi Dasar:
from onvif import ONVIFClient
# Konfigurasi minimal
client = ONVIFClient("192.168.1.17", 80, "admin", "password")Koneksi Aman (HTTPS):
from onvif import ONVIFClient
# Koneksi via HTTPS dengan timeout kustom
client = ONVIFClient(
"your-cctv-node.viewplexus.com",
443, # Port HTTPS
"admin",
"password",
timeout=30,
use_https=True
)Optimasi Performa (Cache Memori):
from onvif import ONVIFClient, CacheMode
# Gunakan cache memory-only untuk script cepat
client = ONVIFClient(
"192.168.1.17",
80,
"admin",
"password",
cache=CacheMode.MEM
)Tanpa Caching dan Zeep Patching (Testing):
from onvif import ONVIFClient, CacheMode
# Nonaktifkan semua caching untuk testing
client = ONVIFClient(
"192.168.1.17",
80,
"admin",
"password",
cache=CacheMode.NONE,
apply_patch=False # Gunakan perilaku zeep original
)Mode Debugging (XML Capture):
from onvif import ONVIFClient
# Aktifkan XML capture untuk debugging
client = ONVIFClient(
"192.168.1.17",
80,
"admin",
"password",
capture_xml=True # Menangkap semua permintaan/respons SOAP
)
# Lakukan beberapa pemanggilan ONVIF
device = client.devicemgmt()
info = device.GetDeviceInformation()
services = device.GetCapabilities()
# Akses plugin XML capture
if client.xml_plugin:
# Dapatkan request/response terakhir yang ditangkap
print("XML Permintaan Terakhir:")
print(client.xml_plugin.last_sent_xml)
print("\nXML Respons Terakhir:")
print(client.xml_plugin.last_received_xml)
print(f"\nOperasi Terakhir: {client.xml_plugin.last_operation}")
# Dapatkan riwayat lengkap semua permintaan/respons
print(f"\nTotal operasi yang ditangkap: {len(client.xml_plugin.history)}")
for item in client.xml_plugin.history:
print(f" - {item['operation']} ({item['type']})")
# Simpan captured XML ke file
client.xml_plugin.save_to_file(
request_file="last_request.xml",
response_file="last_response.xml"
)
# Bersihkan riwayat setelah selesai
client.xml_plugin.clear_history()Metode XML Capture Plugin:
last_sent_xml- Dapatkan XML permintaan SOAP terakhirlast_received_xml- Dapatkan XML respons SOAP terakhirlast_operation- Dapatkan nama operasi terakhirhistory- Daftar semua permintaan/respons yang ditangkap dengan metadataget_last_request()- Metode untuk mendapatkan permintaan terakhirget_last_response()- Metode untuk mendapatkan respons terakhirget_history()- Metode untuk mendapatkan semua riwayatsave_to_file(request_file, response_file)- Simpan XML ke fileclear_history()- Bersihkan riwayat yang ditangkap
Direktori WSDL Kustom:
from onvif import ONVIFClient
# Gunakan file WSDL kustom sebagai pengganti yang built-in
client = ONVIFClient(
"192.168.1.17",
80,
"admin",
"password",
wsdl_dir="/path/to/custom/wsdl" # Direktori WSDL kustom
)
# Semua layanan akan otomatis menggunakan file WSDL kustom
device = client.devicemgmt()
media = client.media()
ptz = client.ptz()
# Direktori WSDL kustom harus memiliki struktur flat:
# /path/to/custom/wsdl/
# ├── devicemgmt.wsdl
# ├── media.wsdl
# ├── ptz.wsdl
# ├── imaging.wsdl
# └── ... (file WSDL lainnya)Konfigurasi Produksi
from onvif import ONVIFClient, CacheMode
# Pengaturan produksi yang direkomendasikan
client = ONVIFClient(
host="your-cctv-node.viewplexus.com",
port=443,
username="admin",
password="secure_password",
timeout=15,
cache=CacheMode.ALL, # Performa maksimal (default)
use_https=True, # Komunikasi aman
verify_ssl=True, # Verifikasi sertifikat (default)
apply_patch=True, # Enhanced parsing (default)
capture_xml=False, # Nonaktifkan mode debug (default)
wsdl_dir=None # Gunakan WSDL files bawaan (default)
)- Autentikasi: Pustaka ini menggunakan autentikasi WS-UsernameToken with Digest secara default, yang merupakan standar untuk perangkat ONVIF.
- Patching:
apply_patch=True(default) mengaktifkan custom zeep patching yang meningkatkan parsing fieldxsd:any. Ini direkomendasikan untuk kompatibilitas yang lebih baik dengan respons ONVIF. - XML Capture: Hanya gunakan
capture_xml=Trueselama development/debugging karena meningkatkan penggunaan memori dan dapat mengekspos data sensitif di log. - WSDL Kustom: Gunakan parameter
wsdl_diruntuk menentukan direktori kustom yang berisi file WSDL. Direktori harus memiliki struktur flat dengan file WSDL langsung di root (mis.,/path/to/custom/wsdl/devicemgmt.wsdl,/path/to/custom/wsdl/media.wsdl, dll.). - Lokasi Cache: Cache disk (saat menggunakan
CacheMode.DBatauCacheMode.ALL) disimpan di~/.onvif-python/onvif_zeep_cache.sqlite.
Warning
Sebelum melakukan operasi apa pun pada perangkat ONVIF, sangat disarankan untuk menemukan layanan mana yang tersedia dan didukung oleh perangkat. Pustaka ini secara otomatis melakukan penemuan layanan yang komprehensif selama inisialisasi menggunakan mekanisme fallback yang kuat.
Mengapa menemukan layanan perangkat?
- Keanekaragaman Perangkat: Tidak semua perangkat ONVIF mendukung setiap layanan. Layanan yang tersedia dapat bervariasi berdasarkan produsen, model, firmware, atau konfigurasi.
- Pencegahan Kesalahan: Mencoba menggunakan layanan yang tidak didukung dapat mengakibatkan permintaan gagal, pengecualian, atau perilaku yang tidak terdefinisi.
- Deteksi Fitur Dinamis: Perangkat dapat mengaktifkan atau menonaktifkan layanan dari waktu ke waktu (misalnya, setelah pembaruan firmware atau perubahan konfigurasi).
- Integrasi yang Dioptimalkan: Dengan memeriksa layanan yang tersedia, aplikasi Anda dapat menyesuaikan alur kerja dan UI untuk mencocokkan fitur perangkat yang sebenarnya.
Cara kerja penemuan layanan di pustaka ini:
ONVIFClient menggunakan pendekatan penemuan 3-tingkat untuk memaksimalkan kompatibilitas perangkat:
- GetServices (Preferensi) - Mencoba
GetServicesterlebih dahulu untuk informasi layanan yang detail - GetCapabilities (Fallback) - Menggunakan
GetCapabilitiesjikaGetServicestidak didukung - URL Default (Fallback Akhir) - Menggunakan URL ONVIF standar sebagai pilihan terakhir
from onvif import ONVIFClient
client = ONVIFClient("192.168.1.17", 8000, "admin", "admin123")
# Periksa metode penemuan mana yang digunakan
if client.services:
print("Penemuan layanan: GetServices (preferensi)")
print("Layanan yang ditemukan:", len(client.services))
print("Peta layanan:", client._service_map)
elif client.capabilities:
print("Penemuan layanan: GetCapabilities (fallback)")
print("Kapabilitas yang tersedia:", client.capabilities)
else:
print("Penemuan layanan: Menggunakan URL default")Mengapa pendekatan ini?
- GetServices memberikan informasi layanan yang paling akurat dan detail, tetapi bersifat opsional dalam spesifikasi ONVIF
- GetCapabilities bersifat wajib untuk semua perangkat yang sesuai dengan ONVIF, memastikan kompatibilitas yang lebih luas
- URL Default menjamin konektivitas dasar bahkan dengan perangkat yang tidak sesuai
Tip
Pustaka menangani penemuan layanan secara otomatis dengan fallback yang cerdas. Anda biasanya tidak perlu memanggil metode penemuan secara manual kecuali Anda memerlukan informasi kapabilitas detail atau ingin menyegarkan daftar layanan setelah perubahan konfigurasi perangkat.
Pustaka ini telah diuji dengan berbagai perangkat yang sesuai dengan ONVIF. Untuk daftar terbaru dan paling lengkap dari perangkat yang telah diverifikasi bekerja dengan pustaka ini, silakan merujuk ke:
Jika perangkat Anda belum terdaftar saat ini, jangan ragu untuk menyumbangkan hasil pengujian atau umpan balik Anda melalui Issues atau Discussions di onvif-products-directory. Kontribusi Anda akan sangat berharga bagi komunitas dan publik.
Important
Kontribusi pengujian perangkat harus dilakukan dengan perangkat nyata dan menggunakan skrip yang disediakan di repositori onvif-products-directory. Pastikan untuk berkontribusi menggunakan model perangkat yang belum terdaftar.
Pustaka ini sepenuhnya mendukung semua Profil ONVIF utama yang tercantum di bawah ini. Setiap profil mewakili serangkaian fitur dan kasus penggunaan standar, memastikan interoperabilitas antara perangkat dan klien yang sesuai dengan ONVIF. Anda dapat menggunakan pustaka ini untuk berintegrasi dengan perangkat dan sistem yang mengimplementasikan salah satu profil ini.
Daftar profil ONVIF
| Nama | Spesifikasi | Fitur Utama | Kasus Penggunaan Umum | Dukungan |
|---|---|---|---|---|
| Profile_S | Dokumen | Streaming video, PTZ, audio, multicasting | Pemancar video jaringan (kamera) dan penerima (perekam, VMS) | ✅ Ya |
| Profile_G | Dokumen | Perekaman, pencarian, pemutaran ulang, penyimpanan video | Perekam video, perangkat penyimpanan | ✅ Ya |
| Profile_T | Dokumen | Streaming video lanjutan (H.265, metadata analitik, deteksi gerakan) | Kamera modern dan klien | ✅ Ya |
| Profile_C | Dokumen | Kontrol akses, pemantauan pintu | Pengontrol pintu, sistem akses | ✅ Ya |
| Profile_A | Dokumen | Konfigurasi kontrol akses lanjutan, manajemen kredensial | Klien dan perangkat kontrol akses | ✅ Ya |
| Profile_D | Dokumen | Periferal kontrol akses (kunci, sensor, relai) | Perangkat periferal untuk kontrol akses | ✅ Ya |
| Profile_M | Dokumen | Metadata, analitik event, deteksi objek | Perangkat analitik, klien metadata | ✅ Ya |
Untuk deskripsi lengkap setiap profil dan fiturnya, kunjungi Profil ONVIF.
Note
Untuk detail tentang fungsi dan metode layanan yang tersedia yang telah diimplementasikan dalam pustaka ini, lihat kode sumber di onvif/services/. Atau jika Anda ingin membaca dalam format yang lebih baik, kunjungi onvif-python AI Wiki.
Berikut adalah daftar layanan ONVIF yang diimplementasikan dan didukung oleh pustaka ini, bersama dengan tautan ke spesifikasi resmi, definisi layanan, dan berkas skema seperti yang dirujuk dari Spesifikasi Pengembang ONVIF. Tabel ini memberikan gambaran cepat tentang fitur ONVIF yang tersedia dan dokumentasi teknisnya untuk tujuan integrasi dan pengembangan.
Daftar layanan ONVIF
| Layanan | Spesifikasi | Definisi Layanan | Skema | Status |
|---|---|---|---|---|
| Device Management | Dokumen | devicemgmt.wsdl | onvif.xsd common.xsd |
✅ Lengkap |
| Events | Dokumen | event.wsdl | onvif.xsd common.xsd |
✅ Lengkap |
| Access Control | Dokumen | accesscontrol.wsdl | types.xsd | ✅ Lengkap |
| Access Rules | Dokumen | accessrules.wsdl | - | ✅ Lengkap |
| Action Engine | Dokumen | actionengine.wsdl | - | ✅ Lengkap |
| Analytics | Dokumen | analytics.wsdl | rules.xsd humanbody.xsd humanface.xsd |
✅ Lengkap |
| Analytics Device | Document | analyticsdevice.wsdl | - | ✅ Lengkap |
| Application Management | Dokumen | appmgmt.wsdl | - | ✅ Lengkap |
| Authentication Behavior | Dokumen | authenticationbehavior.wsdl | - | ✅ Lengkap |
| Cloud Integration | Dokumen | cloudintegration.yaml | - | ❌ Belum |
| Credential | Dokumen | credential.wsdl | - | ✅ Lengkap |
| Device IO | Dokumen | deviceio.wsdl | - | ✅ Lengkap |
| Display | Dokumen | display.wsdl | - | ✅ Lengkap |
| Door Control | Dokumen | doorcontrol.wsdl | - | ✅ Lengkap |
| Imaging | Dokumen | imaging.wsdl | - | ✅ Lengkap |
| Media | Dokumen | media.wsdl | - | ✅ Lengkap |
| Media 2 | Dokumen | media2.wsdl | - | ✅ Lengkap |
| Provisioning | Dokumen | provisioning.wsdl | - | ✅ Lengkap |
| PTZ | Dokumen | ptz.wsdl | - | ✅ Lengkap |
| Receiver | Dokumen | receiver.wsdl | - | ✅ Lengkap |
| Recording Control | Dokumen | recording.wsdl | - | ✅ Lengkap |
| Recording Search | Dokumen | search.wsdl | - | ✅ Lengkap |
| Replay Control | Dokumen | replay.wsdl | - | ✅ Lengkap |
| Schedule | Dokumen | schedule.wsdl | - | ✅ Lengkap |
| Security | Dokumen | advancedsecurity.wsdl | - | ✅ Lengkap |
| Thermal | Dokumen | thermal.wsdl | radiometry.xsd | ✅ Lengkap |
| Uplink | Dokumen | uplink.wsdl | - | ✅ Lengkap |
Layanan ONVIF didefinisikan oleh binding WSDL. Di pustaka ini, ada dua pola utama:
Sebagian besar layanan ONVIF menggunakan satu binding, dipetakan langsung ke satu endpoint. Layanan ini diakses melalui metode klien yang sederhana, dan binding/xAddr selalu diketahui dari kapabilitas perangkat.
Contoh:
client.devicemgmt() # DeviceBinding
client.media() # MediaBinding
client.ptz() # PTZBinding
...✅ Layanan ini dianggap tetap (fixed) dan selalu diakses langsung.
Beberapa layanan ONVIF memiliki banyak binding dalam WSDL yang sama. Biasanya mencakup:
- Binding root (titik masuk utama)
- Satu atau lebih sub-binding, yang ditemukan atau dibuat secara dinamis (misalnya setelah pembuatan subscription/konfigurasi)
Contoh:
-
Events
- Root:
EventBinding - Sub-binding:
PullPointSubscriptionBinding(dibuat viaCreatePullPointSubscription)SubscriptionManagerBinding(mengelola subscription yang ada)NotificationProducerBinding
Penggunaan di pustaka:
client.events() # root binding client.pullpoint(subscription) # sub-binding (dinamis, via SubscriptionReference.Address) client.subscription(subscription) # sub-binding (dinamis, via SubscriptionReference.Address) client.notification() # sub-binding accessor
- Root:
-
Security (Advanced Security)
- Root:
AdvancedSecurityServiceBinding - Sub-bindings:
JWTBindingAuthorizationServerBindingKeystoreBindingDot1XBindingTLSServerBindingMediaSigningBinding
Penggunaan di pustaka:
client.security() # root binding client.jwt() # sub-binding accessor client.authorizationserver(xaddr) # sub-binding accessor (requires xAddr) client.keystore(xaddr) # .. client.dot1x(xaddr) client.tlsserver(xaddr) client.mediasigning(xaddr)
- Root:
-
Analytics (Analitik)
- Root:
AnalyticsEngineBinding - Sub-binding:
RuleEngineBinding
Penggunaan di pustaka:
client.analytics() # root binding client.ruleengine() # sub-binding accessor
- Root:
- Layanan single binding: Selalu diakses langsung (mis.
client.media()). - Layanan multi-binding: Memiliki root + sub-binding. Root bersifat tetap; sub-binding mungkin memerlukan pembuatan dinamis atau xAddr eksplisit (mis.
client.pullpoint(subscription),client.authorizationserver(xaddr)).
-
Menambahkan mode debugging dengan raw XML pada permintaan dan respons SOAP.(c258162) -
Menambahkan fungsionalitas agar(65f2570)ONVIFClientdapat menerima layananwsdl_dirkustom. -
Menambahkan program(645be01)ONVIF CLIuntuk berinteraksi langsung dengan perangkat ONVIF melalui terminal. - Menambahkan dukungan asynchronous (async/await) untuk operasi ONVIF non-blocking dan komunikasi perangkat secara bersamaan.
- Mengimplementasikan model data terstruktur untuk Skema ONVIF menggunakan xsdata.
- Mengintegrasikan xmltodict untuk parsing dan konversi XML yang lebih sederhana.
- Meningkatkan dokumentasi dengan referensi API dan diagram (bukan dari AI Wiki).
- Menambahkan lebih banyak contoh penggunaan untuk fitur lanjutan.
- Menambahkan benchmarking dan metrik performa.
- Menambahkan template konfigurasi perangkat yang dikontribusikan oleh komunitas.
-
onvif-products-directory: Proyek ini adalah suite agregasi dan manajemen data ONVIF yang komprehensif, dirancang untuk membantu pengembang menelusuri, menganalisis, dan memproses informasi produk yang sesuai ONVIF dari ratusan produsen di seluruh dunia.
-
(segera) onvif-rest-server: Server API RESTful untuk perangkat ONVIF, memungkinkan integrasi mudah manajemen perangkat ONVIF, streaming media, dan kemampuan lainnya ke aplikasi dan layanan web.
-
(segera) onvif-mcp: Server Model Context Protocol (MCP) untuk ONVIF, menyediakan API terpadu dan integrasi berbasis konteks untuk perangkat, klien, dan layanan ONVIF. Memungkinkan otomatisasi tingkat lanjut, orkestrasi, dan interoperabilitas di seluruh perangkat dan klien yang sesuai ONVIF.
- Spesifikasi Resmi ONVIF
- Repositori Resmi ONVIF Specs
- Panduan Programmer ONVIF
- Indeks Operasi Layanan ONVIF 2.0
- Contoh Penggunaan
Proyek ini adalah implementasi open-source independen dari spesifikasi ONVIF. Proyek ini tidak berafiliasi, tidak didukung, dan tidak disponsori oleh ONVIF atau perusahaan anggotanya.
- Nama “ONVIF” dan logo ONVIF adalah merek dagang terdaftar milik organisasi ONVIF.
- Setiap referensi ke ONVIF dalam proyek ini dibuat semata-mata untuk tujuan menjelaskan interoperabilitas dengan perangkat dan layanan yang sesuai ONVIF.
- Penggunaan merek ONVIF di repositori ini murni nominatif dan tidak menyiratkan kemitraan, sertifikasi, atau status resmi apa pun.
- Proyek ini menyertakan berkas WSDL/XSD/HTML dari spesifikasi resmi ONVIF.
- Berkas-berkas tersebut adalah © ONVIF dan didistribusikan ulang di sini untuk tujuan interoperabilitas.
- Berkas WSDL di folder
wsdl/didistribusikan di bawah ONVIF Contributor License Agreement dan Apache License 2.0. LihatLICENSE.mduntuk detail selengkapnya. - Semua hak atas spesifikasi ONVIF adalah milik ONVIF.
Jika Anda memerlukan perangkat atau klien yang tersertifikasi sesuai ONVIF, silakan merujuk ke daftar produk konforman ONVIF. Untuk referensi otoritatif dan spesifikasi ONVIF resmi terbaru, silakan lihat Spesifikasi Resmi ONVIF.
Proyek ini dilisensikan di bawah Lisensi MIT. Lihat LICENSE untuk detailnya.
