Recordings & Playback
Cara Liodra merekam stream menjadi segmen DVR, menyajikan ketersediaan harian dan per jam, serta memutar atau mengunduh rekaman berdasarkan waktu.
Pengenalan
Saat Liodra berjalan dengan --as-nvr (ENABLE_PLAYBACK=true), Liodra merekam setiap stream pada channel yang merekam menjadi segmen berdurasi 30 detik:
recordings/{app}/{name}/YYYY/MM/DD/HH-mm-ss.flv (waktu UTC)Liodra tidak menyimpan indeks di database; ia membaca struktur direktori ini secara langsung (dengan cache singkat) dan menyusun ketersediaan rekaman dari durasi nyata setiap segmen. Tidak ada proses transcoding saat merekam: codec kamera (H.264 atau HEVC) disimpan apa adanya, sehingga CPU saat perekaman hampir nol.
Inilah fitur yang membuat Liodra berfungsi sebagai NVR untuk Lenz: halaman Recordings, tab Playback pada detail Event, dan pratinjau di Search semuanya memanggil endpoint di halaman ini melalui proxy /api/visionaire-media/{id}.
Channel vod dan vop/* tidak pernah direkam. Video unggahan memiliki jalur playback sendiri di VoD.
Cara Menggunakan
Temukan stream yang punya rekaman
curl http://localhost:9080/api/v1/recordingsSetiap entri berisi app, name, dan tiga status: live (sedang dipublish), available (ada file rekaman), record (ada segmen bermedia yang ditulis dalam 2 menit terakhir). Stream tanpa rekaman tidak dicantumkan.
Cari tanggal dan jam yang tersedia
# hari yang punya rekaman, September sampai Oktober 2026
curl "http://localhost:9080/api/v1/recordings/live/camera_front/daily?search=0926-1026"
# rentang menit yang bisa diputar pada satu tanggal (UTC)
curl "http://localhost:9080/api/v1/recordings/live/camera_front/hourly?date=2026-09-15"Endpoint hourly mengembalikan ranges per jam, yaitu rentang menit yang benar-benar berisi media. Bangun time scrubber dari sini agar setiap posisi yang dipilih pengguna dijamin bisa diputar.
Putar atau unduh
# daftar segmen mentah (JSON)
curl "http://localhost:9080/api/v1/playbacks/live/camera_front"
# stream MPEG-TS 10 menit mulai pukul 14:30 UTC
ffplay "http://localhost:9080/api/v1/playbacks/live/camera_front?start=2026-09-15T14:30:00Z&duration=600"
# unduh jendela yang sama sebagai MP4
curl -o clip.mp4 "http://localhost:9080/api/v1/playbacks/live/camera_front?start=2026-09-15T14:30:00Z&duration=600&download=true"start dalam RFC3339 dan duration dalam detik. Tambahkan transcode=true bila pemutarnya (browser) tidak mendukung HEVC.
Bersihkan bila perlu
Rekaman dihapus otomatis oleh Retensi. Untuk menghapus manual seluruh arsip satu stream: DELETE /api/v1/recordings/live/camera_front (tidak dapat dibatalkan; device-nya tetap ada dan akan membuat segmen baru bila masih merekam).
Fitur Utama
Satu endpoint playback, tiga mode
GET /api/v1/playbacks/{path} berperilaku berdasarkan query yang diberikan:
| Query | Hasil |
|---|---|
(tanpa start/duration) | JSON daftar segmen { start, duration, url, file_path } |
start + duration | Stream video/mp2t hasil penggabungan segmen, seek akurat ke start, cocok untuk <video> + mpegts.js, VLC, ffplay |
start + duration + download=true | File MP4 (fragmented) dengan Content-Disposition: attachment; transcode diabaikan |
Playback berbasis waktu memakai satu proses media per permintaan (segmen digabung tanpa re-encode bila tidak transcode). Proses ini masuk hitungan MAX_ONDEMAND_PROCESSES dan terlihat di GET /api/v1/monitor/ondemand.
Durasi nyata, bukan asumsi 30 detik
Segmen bisa lebih pendek dari 30 detik (kamera putus, restart ingest) atau tidak berisi media sama sekali (menunggu keyframe pertama). Liodra membaca durasi nyata dari metadata tiap segmen dan menolak segmen tanpa media, sehingga hourly.ranges, duration, dan daftar segmen selalu mencerminkan apa yang benar-benar bisa diputar.
Zona waktu
Semua path direktori, date, start, dan ranges berbasis UTC. Lenz mengonversi ke zona waktu browser sebelum menampilkan. Untuk backend Hikvision, Liodra mendeteksi zona waktu NVR dan mengonversinya secara otomatis.
Cache
Daftar rekaman di-cache 5 detik dan distribusi harian 10 detik untuk melindungi disk dari polling banyak klien. Statistik cache (hit/miss) ada di GET /api/v1/monitor/system (cache_stats).
Integrasi Lenz
| Halaman Lenz | Endpoint Liodra yang dipanggil |
|---|---|
| Recordings (tabel) | GET /recordings |
| Recordings (date picker, scrubber) | GET /recordings/{path}/daily, GET /recordings/{path}/hourly |
| Recordings (player), Event Playback, Search Playback | GET /playbacks/{path}?start&duration[&transcode] |
| Recordings (unduh klip) | GET /playbacks/{path}?...&download=true |
nvr_original_url pada NVR Resource Lenz berbentuk {host}:{playback_port}/api/v1/playbacks/live/{stream_id}; Lenz menambahkan start dan duration di sekitar timestamp kejadian.
API Reference
Detail lengkap di API Reference: Recordings.
| Method | Path | Fungsi |
|---|---|---|
GET | /api/v1/recordings | Stream yang memiliki rekaman |
GET | /api/v1/recordings/{path}/daily | Hari dengan rekaman per bulan |
GET | /api/v1/recordings/{path}/hourly | Ketersediaan per jam dan rentang menit |
DELETE | /api/v1/recordings/{path} | Hapus semua rekaman satu stream |
GET | /api/v1/playbacks/{path} | Daftar segmen, putar, atau unduh |
Tips & Troubleshooting
Selanjutnya
API Reference: Live Streaming
Endpoint untuk menonton stream lewat HTTP-TS, melihat stream dan koneksi klien, serta registrasi publisher RTMP bertoken.
API Reference: Recordings
Endpoint untuk menemukan stream yang memiliki rekaman, ketersediaan harian dan per jam, playback berbasis waktu, unduh klip, dan penghapusan rekaman.