Skip to content

Latest commit

 

History

History
648 lines (498 loc) · 37.5 KB

File metadata and controls

648 lines (498 loc) · 37.5 KB

ONVIF Python

Lisensi DeepWiki Rilis
PyPI Unduhan

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.

Fitur Utama

  • Implementasi penuh layanan inti dan profil ONVIF
  • Dukungan untuk penemuan perangkat, streaming media, kontrol PTZ, manajemen event, dan lainnya
  • Abstraksi Pythonic atas permintaan dan respons SOAP (tidak perlu membuat XML secara manual)
  • Arsitektur yang dapat diperluas untuk ekstensi ONVIF khusus
  • Kompatibel dengan beberapa versi spesifikasi ONVIF
  • Skrip contoh dan pengujian disertakan

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

Instalasi

Dari PyPI resmi:

pip install 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. 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
)

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

3. 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': '..'}

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

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 Pemberitahuan Hukum untuk detailnya.

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="192.168.1.17",
    port=80,
    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

Dapatkan informasi layanan detail:

Jika Anda memerlukan detail layanan yang komprehensif, Anda dapat memanggil GetServices secara manual dengan kapabilitas:

device = client.devicemgmt()

try:
    # Coba dapatkan informasi layanan detail
    services = device.GetServices(IncludeCapability=True)
    for service in services:
        print(f"Layanan: {service.Namespace}")
        print(f"XAddr: {service.XAddr}")
        if hasattr(service, 'Capabilities'):
            print(f"Kapabilitas: {service.Capabilities}")
except Exception:
    # Fallback ke GetCapabilities untuk perangkat legacy
    capabilities = device.GetCapabilities()
    print("Kapabilitas:", capabilities)

Akses informasi kapabilitas:

Saat menggunakan fallback GetCapabilities, Anda dapat mengakses informasi kapabilitas:

device = client.devicemgmt()

try:
    # Dapatkan informasi kapabilitas dari perangkat
    capabilities = device.GetCapabilities()
    
    # Layanan utama (selalu tersedia)
    print("Media XAddr:", getattr(capabilities.Media, 'XAddr', 'Tidak tersedia'))
    print("PTZ XAddr:", getattr(capabilities.PTZ, 'XAddr', 'Tidak tersedia'))
    
    # Layanan Extension (tergantung perangkat)
    ext = getattr(capabilities, 'Extension', None)
    if ext:
        print("DeviceIO XAddr:", getattr(ext.DeviceIO, 'XAddr', 'Tidak tersedia'))
        print("Recording XAddr:", getattr(ext.Recording, 'XAddr', 'Tidak tersedia'))
        print("Search XAddr:", getattr(ext.Search, 'XAddr', 'Tidak tersedia'))
        print("Replay XAddr:", getattr(ext.Replay, 'XAddr', 'Tidak tersedia'))
except Exception as e:
    print(f"Error mendapatkan kapabilitas: {e}")

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.

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.

Layanan Spesifikasi Definisi Layanan Skema Status
Device Management Dokumen devicemgmt.wsdl onvif.xsd
common.xsd
✅ Lengkap
Events Dokumen event.wsdl onvif.xsd
common.xsd
⚠️ Parsial
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
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
Resource Query Dokumen - - ❌ Ada ide?
Schedule Dokumen schedule.wsdl - ✅ Lengkap
Security Dokumen advancedsecurity.wsdl - ✅ Lengkap
Thermal Dokumen thermal.wsdl radiometry.xsd ✅ Lengkap
Uplink Dokumen uplink.wsdl - ✅ Lengkap
WebRTC Dokumen - - ❌ Ada ide?

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-binding:
      • AuthorizationServerBinding
      • KeystoreBinding
      • JWTBinding
      • Dot1XBinding
      • TLSServerBinding
      • MediaSigningBinding

    Penggunaan di pustaka:

    client.security()                  # root binding
    client.authorizationserver(xaddr)  # sub-binding accessor (memerlukan xAddr)
    client.keystore(xaddr)             # ..
    client.jwt(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.
  • 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.
  • Mengimplementasikan layanan ONVIF yang hilang atau masih parsial.
  • Menambahkan fungsi untuk mengekspos perangkat ONVIF (untuk tujuan debugging 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. Menyediakan struktur terpadu untuk data perangkat, klien, dan perusahaan, sehingga mempermudah riset, membangun integrasi, dan menghasilkan statistik untuk analisis ekosistem ONVIF.

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

Alternatif

Jika Anda mencari pustaka Python ONVIF lainnya, berikut beberapa alternatif:

  • python-onvif-zeep: Pustaka klien ONVIF sinkron untuk Python, menggunakan Zeep untuk komunikasi SOAP. Berfokus pada kompatibilitas dan kemudahan penggunaan untuk operasi perangkat ONVIF standar. Cocok untuk skrip dan aplikasi yang tidak memerlukan async.

  • python-onvif-zeep-async: Pustaka klien ONVIF asinkron untuk Python, berbasis Zeep dan asyncio. Cocok untuk aplikasi yang memerlukan operasi non-blok dan komunikasi perangkat secara konkuren. Mendukung banyak layanan ONVIF dan aktif dipelihara.

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