Skip to content

Latest commit

 

History

History
1166 lines (898 loc) · 59.4 KB

File metadata and controls

1166 lines (898 loc) · 59.4 KB

ONVIF Python

Ask DeepWiki PyPI Version Pepy Total Downloads
Build Upload Python Package

onvif

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.

Filosofi Pustaka

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 ONVIF resmi. 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 TypeError di awal saat mengakses operasi ONVIF dengan argumen yang salah, alih-alih SOAP faults yang 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 (zeep untuk SOAP, requests untuk 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.

Untuk Siapa Pustaka Ini?

  • 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

Persyaratan

  • Python: 3.9 atau lebih tinggi
  • Dependencies:

Instalasi

Dari PyPI resmi:

pip install --upgrade onvif-python

Atau klon repositori ini dan instal secara lokal:

git clone https://github.com/nirsimetri/onvif-python
cd onvif-python
pip install .

Contoh Penggunaan

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 Perangkat
  • client.events() — Events
  • client.imaging() — Imaging
  • client.media() — Media
  • client.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()            # Media

4. 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/.

Metode Helper

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 WSDL
  • required: Daftar nama parameter yang wajib
  • optional: Daftar nama parameter yang opsional
  • method_name: Nama metode
  • service_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.

ONVIF CLI

Note

CLI secara otomatis terinstal saat Anda menginstal paket onvif-python, lihat Instalasi. Fitur ini telah tersedia sejak onvif-python versi >=0.1.1.

Windows Linux macOS Raspberry Pi

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.

Fitur

  • 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.

Tangkapan layar

Tampilan pertama Daftar operasi yang tersedia

Perintah Bantuan

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 --https
2. 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 context

Penggunaan

1. 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 -i

Jika 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.SourceToken

Fitur 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 -i

Temukan 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 admin123

Cara Kerja Penemuan Perangkat:

  1. Pemindaian Jaringan Otomatis: Mengirim pesan WS-Discovery Probe ke alamat multicast 239.255.255.250:3702
  2. Deteksi Perangkat: Mendengarkan respons ProbeMatch dari perangkat ONVIF (timeout default: 4 detik)
  3. 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)
  4. 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 --host dan --port tidak diperlukan saat menggunakan --discover
  • Anda masih dapat memberikan --username dan --password di 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.xml

4. 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 20

Informasi 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

Parameter CLI

Semua parameter ONVIFClient (seperti --timeout, --https, --cache, dll.) tersedia sebagai argumen baris perintah. Gunakan onvif --help untuk melihat semua opsi yang tersedia.

Parameter ONVIFClient

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 terakhir
  • last_received_xml - Dapatkan XML respons SOAP terakhir
  • last_operation - Dapatkan nama operasi terakhir
  • history - Daftar semua permintaan/respons yang ditangkap dengan metadata
  • get_last_request() - Metode untuk mendapatkan permintaan terakhir
  • get_last_response() - Metode untuk mendapatkan respons terakhir
  • get_history() - Metode untuk mendapatkan semua riwayat
  • save_to_file(request_file, response_file) - Simpan XML ke file
  • clear_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)
)

Catatan

  • 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 field xsd:any. Ini direkomendasikan untuk kompatibilitas yang lebih baik dengan respons ONVIF.
  • XML Capture: Hanya gunakan capture_xml=True selama development/debugging karena meningkatkan penggunaan memori dan dapat mengekspos data sensitif di log.
  • WSDL Kustom: Gunakan parameter wsdl_dir untuk 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.DB atau CacheMode.ALL) disimpan di ~/.onvif-python/onvif_zeep_cache.sqlite.

Penemuan Layanan: Memahami Kapabilitas Perangkat

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:

  1. GetServices (Preferensi) - Mencoba GetServices terlebih dahulu untuk informasi layanan yang detail
  2. GetCapabilities (Fallback) - Menggunakan GetCapabilities jika GetServices tidak didukung
  3. 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.

Perangkat yang Diuji

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.

Profil ONVIF yang Didukung

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.

Layanan ONVIF yang Diimplementasikan

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

Pengikatan Layanan (Service Bindings) di ONVIF

Layanan ONVIF didefinisikan oleh binding WSDL. Di pustaka ini, ada dua pola utama:

1. Layanan Single Binding

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.

2. Layanan Multi-Binding

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:
  1. Events

    • Root: EventBinding
    • Sub-binding:
      • PullPointSubscriptionBinding (dibuat via CreatePullPointSubscription)
      • 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
  2. Security (Advanced Security)

    • Root: AdvancedSecurityServiceBinding
    • Sub-bindings:
      • JWTBinding
      • AuthorizationServerBinding
      • KeystoreBinding
      • Dot1XBinding
      • TLSServerBinding
      • MediaSigningBinding

    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)
  3. Analytics (Analitik)

    • Root: AnalyticsEngineBinding
    • Sub-binding:
      • RuleEngineBinding

    Penggunaan di pustaka:

    client.analytics()   # root binding
    client.ruleengine()  # sub-binding accessor

Ringkasan

  • 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)).

Peningkatan Mendatang (Pantau dan beri bintang ⭐ repo ini)

  • Menambahkan mode debugging dengan raw XML pada permintaan dan respons SOAP. (c258162)
  • Menambahkan fungsionalitas agar ONVIFClient dapat menerima layanan wsdl_dir kustom. (65f2570)
  • Menambahkan program ONVIF CLI untuk berinteraksi langsung dengan perangkat ONVIF melalui terminal. (645be01)
  • 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.

Proyek Terkait

  • 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.

Referensi

Pernyataan Hukum

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. Lihat LICENSE.md untuk 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.

Lisensi

Proyek ini dilisensikan di bawah Lisensi MIT. Lihat LICENSE untuk detailnya.