Integrasi dengan Lenz & Visionaire
Posisi Liodra dalam platform Nodeflux, cara mendaftarkannya sebagai Media Server (Visionaire Media) di Lenz, pemetaan endpoint Lenz ke Liodra, dan cara memakai stream Liodra sebagai sumber Visionaire.
Liodra adalah komponen video dari platform Nodeflux: ia berdiri di antara kamera dan dua produk lainnya. Lenz memakainya sebagai Media Server untuk merekam dan memutar ulang; Visionaire dapat memakainya sebagai sumber stream yang stabil alih-alih menarik langsung dari kamera. Halaman ini menjelaskan ketiga hubungan itu.
Di antarmuka dan API Lenz, Liodra disebut Visionaire Media dan memiliki tipe Media Server srs. Kedua nama merujuk ke perangkat lunak yang sama.
Liodra di Lenz
Lenz tidak menyimpan video. Setiap fitur yang menyentuh rekaman di Lenz adalah panggilan ke Liodra yang di-proxy oleh backend Lenz, dengan otentikasi dan Federation ditangani di sisi Lenz. Registrasi satu Media Server cukup untuk mengaktifkan seluruh fitur di bawah.
Mendaftarkan Liodra sebagai Media Server
Pastikan Liodra dapat dijangkau dari backend Lenz
Backend Lenz (bukan browser operator) yang memanggil Liodra, jadi host dan port 9080 harus terbuka dari server Lenz. Uji dari server Lenz:
curl http://<host-liodra>:9080/api/v1/healthTambahkan server di Lenz
Buka Media Servers → Manajemen Server → Tambah Server Media dan isi:
| Field Lenz | Nilai untuk Liodra |
|---|---|
| Nama Server | Nama bebas, mis. Liodra Gedung A. |
| URL Host | Host Liodra tanpa port, mis. http://192.168.1.50. |
| Tipe | srs (Visionaire Media). |
| Port API | 9080 (nilai PORT Liodra). Boleh dikosongkan; default Lenz juga 9080. |
| Port Playback | Sama dengan Port API pada deployment standar. Isi berbeda hanya bila /api/v1/playbacks dan /api/v1/play/ts diekspos lewat port lain (reverse proxy). |
Klik Periksa Kesehatan; Lenz memanggil GET {host}:{port}/api/v1/health dan menampilkan hasilnya. Simpan dengan Buat Server.
Lewat API Lenz, hal yang sama adalah POST /api/nvr-servers dengan {"name": "...", "host": "http://192.168.1.50", "type": "srs", "api_port": 9080, "playback_port": 9080}.
Jalankan Liodra dengan flag yang sesuai
Fitur Lenz hanya berfungsi bila fitur padanannya aktif di Liodra: Recorded Streams, Playback, Daily Playback, dan Retensi memerlukan --as-nvr; Video Management memerlukan --with-vod. Tanpa flag tersebut Liodra menjawab 404 dan Lenz menampilkan tabel kosong atau error.
Pemetaan Fitur dan Endpoint
| Fitur Lenz | Endpoint Lenz | Endpoint Liodra yang dipanggil | Flag Liodra |
|---|---|---|---|
| Periksa Kesehatan, kolom Status Kesehatan | (internal) | GET /api/v1/health | selalu |
| Lihat Stream Media (stream aktif di server) | (internal) | GET /api/v1/streams, GET /api/v1/clients | selalu |
| Kickout klien | (internal) | DELETE /api/v1/clients/{id} | selalu |
| Recorded Streams | GET /api/visionaire-media/{id}/recordings | GET /api/v1/recordings | --as-nvr |
| Playback (daftar segmen) | GET /api/visionaire-media/{id}/playback?path= | GET /api/v1/playbacks/{path} | --as-nvr |
| Playback (pemutar video) | URL segmen dari respons di atas | GET /api/v1/playbacks/{path}?start&duration[&transcode=true] | --as-nvr |
| Unduh Klip | GET /api/visionaire-media/{id}/playback/download | GET /api/v1/playbacks/{path}?start&duration&download=true | --as-nvr |
| Daily Playback: date picker | GET /api/visionaire-media/{id}/recordings/{path}/daily | GET /api/v1/recordings/{path}/daily | --as-nvr |
| Daily Playback: timeline 24 jam | GET /api/visionaire-media/{id}/recordings/{path}/hourly | GET /api/v1/recordings/{path}/hourly | --as-nvr |
| Retensi rekaman | GET/PUT /api/visionaire-media/{id}/retention[...] | GET /api/v1/retention, PUT /api/v1/retention/schedule, PUT /api/v1/retention/default | --as-nvr --set-retention |
| Video Management: daftar, detail, hapus | (internal) | GET /api/v1/videos, GET/DELETE /api/v1/videos/{id} | --with-vod |
| Video Management: unggah dengan resume | (internal) | POST /api/v1/videos/upload?autoplay=true, GET .../upload/resume/{session_id} | --with-vod |
| Video Management: koreksi waktu rekam, thumbnail | (internal) | PATCH /api/v1/videos/{id}, GET /api/v1/videos/{id}/thumbnail | --with-vod |
| Video Management: restart/stop device video | (internal) | POST /api/v1/devices/file/vod/{id}/restart, .../stop | --with-vod |
| Streams: toggle Aktifkan Recording | POST /api/visionaire-media/{id}/devices/{scheme}, lalu POST /api/nvrs | POST /api/v1/devices/{scheme} (channel live, name = stream_id Visionaire, silent_audio: true) | --as-nvr |
Beberapa hal yang perlu diketahui saat membaca tabel ini:
- Path yang dipakai Lenz (
pathpada Recorded Streams) adalah{app}/{name}Liodra, disusun dari fieldappdannamerespons/api/v1/recordings. - Satuan retensi sama di kedua sisi: Lenz mengirim
duration_days,disk_quota_mb, danheadroom_percentapa adanya ke Liodra, dan menampilkanmax_recommended_quota_mbdariGET /api/v1/retentionsebagai batas atas kuota yang bisa dipilih operator. - Federation: parameter
instancepada endpoint Lenz memilih instance Lenz mana yang meneruskan panggilan; Liodra sendiri tidak mengetahui Federation.
Recording dari Halaman Streams
Saat operator mengaktifkan Aktifkan Recording pada sebuah stream di halaman Streams Lenz dan memilih Media Server, Lenz melakukan dua hal secara berurutan:
- Mendaftarkan device di Liodra lewat proxy:
POST /api/visionaire-media/{nvrServerId}/devices/{scheme}dengan body{ "name": "<stream_id>", "url": "<stream_address>", "channel": "live", "silent_audio": true }.schemediambil dari prefiksstream_address(rtspataurtmp), dannameadalahstream_idVisionaire. Liodra mulai menarik kamera dan merekamnya kerecordings/live/{stream_id}/. - Mencatat NVR Resource di database Lenz (
POST /api/nvrs) dengancam_original_url(URL kamera asli) dannvr_original_urlberbentuk{host}:{playback_port}/api/v1/playbacks/live/{stream_id}. URL inilah yang dipakai halaman Events, Search, dan Alert untuk memanggil playback Liodra pada timestamp kejadian.
Karena nama device mengikuti stream_id, rekaman untuk stream itu selalu ditemukan di path live/{stream_id} di Liodra. Langkah pertama dilewati pada dua kondisi: bila stream_address sudah menunjuk ke host Liodra itu sendiri (mode media stream, Visionaire membaca dari Liodra sehingga device sudah ada; nvr_original_url mengikuti path stream tersebut), atau bila backend Media Server adalah hikvision (rekaman dikelola NVR Hikvision, bukan Liodra).
Registrasi device dilakukan dari browser operator melalui backend Lenz, bukan oleh backend Lenz secara mandiri. Bila registrasi gagal (misalnya Liodra tidak berjalan dengan --as-nvr, atau URL kamera tidak valid), Lenz tetap menyimpan stream dan menampilkan peringatan; ulangi lewat dialog Edit Stream setelah Liodra pulih.
RTMP Stream (POST /api/rtmp-streams) adalah pemetaan yang lebih ringan untuk alur di mana sumbernya mem-publish RTMP langsung ke Liodra (mobile, encoder) dan Visionaire membaca dari Liodra, bukan dari kamera.
Liodra sebagai Sumber Visionaire
Visionaire membaca video lewat URL stream pada entitas Stream-nya. Alih-alih URL kamera, Anda dapat memberi URL Liodra. Ini berguna bila:
- satu kamera dibutuhkan oleh beberapa node Visionaire atau beberapa sistem sekaligus (kamera hanya ditarik satu kali oleh Liodra);
- kamera berada di jaringan yang hanya dapat dijangkau Liodra;
- Anda ingin menganalisis file video atau live stream media sosial sebagai stream (lewat VoD atau VoP Liodra);
- Anda ingin memutar ulang footage lama ke pipeline analitik untuk pengujian.
Setiap stream yang dipublish ke Liodra juga tersedia lewat server RTSP di port 8554:
rtsp://<host-liodra>:8554/live/camera_frontPada pembuatan Stream di Visionaire (POST /streams/{node_num}), isi stream_address dengan URL ini. Bila RTMP_SECRET diset, play dari host lain memerlukan token: rtsp://<host>:8554/live/camera_front?token=<token> (token yang sama dengan hasil POST /api/v1/register). Tidak tersedia di image legacy -srs6.
rtmp://<host-liodra>:1935/live/camera_frontUntuk channel vod dan vop/* tambahkan parameter ?vhost=<channel-utama>, mis. rtmp://<host>:1935/vod/9876543210ab?vhost=vod, karena keduanya disajikan lewat host virtual terpisah yang tidak direkam. Aturan token sama seperti RTSP.
http://<host-liodra>:9080/api/v1/play/ts/live/camera_frontBerguna bila hanya port 9080 yang terbuka. Tambahkan ?transcode=true bila kamera HEVC dan konsumen memerlukan H.264. Tidak ada token karena proxy internal dikecualikan dari otentikasi RTMP.
Liodra melakukan stream copy: codec, resolusi, dan frame rate yang diterima Visionaire sama persis dengan kamera. Bila Visionaire memerlukan H.264 dan kamera mengirim HEVC, gunakan jalur HTTP-TS dengan ?transcode=true, atau aktifkan Ingest Transcode ke h264 pada Liodra.
Alur Lengkap: dari Kamera ke Playback di Lenz
- Kamera didaftarkan di Liodra (langsung lewat
POST /api/v1/devices/rtsp, atau otomatis oleh Lenz saat Aktifkan Recording). Liodra mem-publish stream-nya dan DVR menulis segmen kerecordings/live/{name}/. - Visionaire membaca stream dari kamera atau dari Liodra dan menghasilkan Event; Lenz menampilkannya.
- Operator membuka Media Servers → Recorded Streams di Lenz, memilih Media Server Liodra; Lenz memanggil
/api/v1/recordingsdan menampilkan stream beserta statuslive/record. - Operator membuka Daily Playback; Lenz memanggil
.../dailyuntuk date picker dan.../hourly?date=untuk timeline. Rentang yang ditampilkan berasal dari segmen yang benar-benar berisi media. - Operator memutar rentang waktu; pemutar Lenz memuat
/api/v1/playbacks/{path}?start&duration(dengantranscode=truebila HEVC) dan menerima MPEG-TS. - Operator mengunduh klip; Lenz memanggil
.../download, Liodra mengirim MP4 dengan codec asli. - Setiap malam pada jam yang dijadwalkan, retensi Liodra menghapus segmen yang melewati batas durasi atau kuota channel.
Troubleshooting Integrasi
Selanjutnya
Backend Hikvision
Menjalankan Liodra di atas NVR Hikvision yang sudah ada lewat ISAPI, sehingga Lenz dan integrator memakai API yang sama untuk penemuan rekaman dan playback.
Devices (Ingest)
Mendaftarkan kamera, file, dan live stream media sosial sebagai device Liodra, lalu memantau siklus hidup prosesnya.