Nodeflux Central
Recordings & Playback

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/recordings

Setiap 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:

QueryHasil
(tanpa start/duration)JSON daftar segmen { start, duration, url, file_path }
start + durationStream video/mp2t hasil penggabungan segmen, seek akurat ke start, cocok untuk <video> + mpegts.js, VLC, ffplay
start + duration + download=trueFile 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 LenzEndpoint Liodra yang dipanggil
Recordings (tabel)GET /recordings
Recordings (date picker, scrubber)GET /recordings/{path}/daily, GET /recordings/{path}/hourly
Recordings (player), Event Playback, Search PlaybackGET /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.

MethodPathFungsi
GET/api/v1/recordingsStream yang memiliki rekaman
GET/api/v1/recordings/{path}/dailyHari dengan rekaman per bulan
GET/api/v1/recordings/{path}/hourlyKetersediaan 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

On this page