Nodeflux Central
Media Servers

Recorded Streams

Lihat daftar stream yang sedang atau sudah direkam di Media Server — pilih stream untuk playback, filter berdasarkan channel, dan kelola rekaman langsung dari satu halaman.

Pengenalan

Halaman Recorded Streams (/media-servers/recorded-streams) menampilkan seluruh stream yang memiliki rekaman tersimpan di Media Server (Lyodra/Visionaire Media). Setiap entri dalam daftar merepresentasikan satu stream — bisa berupa kamera yang sedang aktif merekam secara langsung (live), maupun stream yang hanya memiliki arsip rekaman historis tanpa siaran aktif saat ini.

Dari halaman ini, operator dapat memilih stream untuk membuka playback rekaman, menelusuri rekaman berdasarkan tanggal (Daily Playback), serta menghapus rekaman yang sudah tidak dibutuhkan. Sistem membedakan stream yang terhubung dengan data NVR (sehingga playback dapat dilakukan di halaman penuh dengan konteks stream) dan stream yang diputar tanpa konteks NVR melalui halaman playback generik.

Bagi integrator, seluruh data rekaman dapat diakses melalui REST API pada endpoint /api/visionaire-media/{nvrServerId}/recordings. Endpoint ini mendukung mode Federation untuk deployment multi-instance dan bekerja dengan backend SRS maupun Hikvision.

Halaman ini memerlukan permission RBAC RECORDED_STREAMS. Jika menu tidak muncul, hubungi administrator sistem untuk mengatur hak akses yang sesuai.


Cara Menggunakan

Melihat Daftar Recorded Streams

Pilih Media Server

Di bagian atas halaman, gunakan dropdown Media Server untuk memilih server NVR yang ingin Anda telusuri. Sistem akan memuat seluruh daftar rekaman dari server yang dipilih. Jika belum ada server yang terdaftar, tabel tidak akan menampilkan data — pastikan Media Server sudah dikonfigurasi terlebih dahulu di halaman pengaturan.

Filter dan cari stream

Setelah server dipilih, gunakan filter berikut untuk mempersempit daftar:

  • Channel — pilih channel tertentu dari dropdown untuk menampilkan hanya stream pada channel tersebut. Pilih All channels untuk melihat semua channel.
  • Active streams only — centang checkbox ini untuk menampilkan hanya stream yang saat ini sedang aktif siaran (live), menyembunyikan stream yang hanya memiliki rekaman historis.
  • Search — ketik nama atau sebagian nama stream di kotak pencarian untuk memfilter daftar secara real-time.

Semua pilihan filter akan otomatis disinkronkan ke URL halaman sebagai query parameter, sehingga Anda dapat menyalin dan membagikan link dengan filter yang sudah aktif.

Baca informasi rekaman

Setiap baris tabel menampilkan informasi status stream:

  • Nama stream — identitas stream berdasarkan app dan name dari Media Server.
  • Status Live — indikator apakah stream saat ini sedang aktif melakukan siaran langsung.
  • Available — menandakan apakah tersedia arsip rekaman yang dapat diputar kembali.
  • Recording — menandakan apakah fitur recording diaktifkan untuk stream ini.

Membuka Playback Rekaman

Pastikan Media Server sudah dipilih

Playback hanya dapat dilakukan setelah Anda memilih Media Server dari dropdown di bagian atas. Tombol aksi pada baris tabel akan aktif setelah server dipilih.

Klik aksi pada baris stream

Pada setiap baris stream, tersedia beberapa pilihan aksi:

  • Lihat Rekaman — membuka halaman playback untuk stream tersebut. Jika stream memiliki data NVR yang cocok, sistem akan membuka halaman playback penuh dengan konteks node dan stream ID. Jika tidak ada data NVR yang cocok, sistem akan membuka halaman playback generik.
  • Daily Playback — membuka halaman pemutaran berdasarkan kalender harian, memungkinkan Anda memilih tanggal dan jam rekaman secara spesifik menggunakan timeline scrubber.
  • Navigasi ke Stream — membuka halaman detail stream di /stream/{nodeNumber}/{streamId} (hanya tersedia jika stream memiliki data NVR yang cocok).
  • Hapus Rekaman — membuka dialog konfirmasi untuk menghapus seluruh file rekaman stream tersebut dari Media Server.

Gunakan Daily Playback untuk rekaman historis

Jika Anda ingin memutar rekaman pada tanggal atau jam tertentu, gunakan aksi Daily Playback. Halaman ini menampilkan kalender bulanan dengan indikator hari yang memiliki rekaman, serta timeline per jam untuk navigasi yang lebih presisi.

Format URL Daily Playback:

/media-servers/recorded-streams/{nvrServerId}/daily-playback?app={app}&name={name}

Aksi Hapus Rekaman akan menghapus seluruh file rekaman stream tersebut secara permanen dari Media Server. Tindakan ini tidak dapat dibatalkan. Pastikan rekaman yang ingin dihapus tidak lagi dibutuhkan sebelum melanjutkan.


Fitur Utama

Filter Multi-dimensi

Filter daftar rekaman berdasarkan channel, status aktif stream, dan pencarian nama — semua filter tersinkronkan ke URL sehingga dapat dibagikan langsung.

Dua Mode Playback

Sistem secara otomatis memilih halaman playback yang tepat: playback penuh dengan konteks NVR jika data stream ditemukan, atau playback generik jika tidak ada data NVR yang cocok.

Daily Playback dengan Timeline

Navigasikan rekaman historis menggunakan kalender bulanan dan timeline scrubber per jam — cocok untuk investigasi kejadian pada tanggal dan waktu tertentu.

Indikator Status Stream

Setiap stream ditampilkan dengan tiga indikator status: live (sedang siaran), available (ada rekaman), dan record (recording aktif) — memudahkan operator memahami kondisi stream sekilas.

Navigasi Langsung ke Stream

Untuk stream yang terhubung dengan data NVR, Anda dapat langsung membuka halaman detail stream dari daftar rekaman tanpa perlu mencari secara manual di halaman Streams.

Federation Support

Dalam deployment multi-instance, gunakan parameter instance untuk mengakses rekaman dari instance Visionaire tertentu. Pilihan instance diteruskan ke seluruh navigasi playback.


API Reference

Semua endpoint memerlukan header Authorization: Bearer <Token>. Lihat Otentikasi untuk cara mendapatkan Token.


GET /api/visionaire-media/{nvrServerId}/recordings

Mengambil daftar seluruh stream beserta status rekamannya dari Media Server yang ditentukan. Endpoint ini mendukung backend SRS maupun Hikvision.

Path Parameters:

ParameterTipeKeterangan
nvrServerIdnumberID numerik Media Server yang terdaftar di sistem.

Query Parameters:

Prop

Type

GET /api/visionaire-media/{nvrServerId}/recordings
curl -X GET "${API_URL}/api/visionaire-media/1/recordings" \
  -H "Authorization: Bearer <Token>"

Contoh respons:

Respons GET /recordings
{
  "success": true,
  "data": {
    "total": 3,
    "recordings": [
      {
        "app": "live",
        "name": "kamera-lobby-utama",
        "live": true,
        "available": true,
        "record": true
      },
      {
        "app": "live",
        "name": "kamera-parkir-b",
        "live": false,
        "available": true,
        "record": false
      },
      {
        "app": "live/IPCamera 01",
        "name": "ch01_stream01",
        "live": true,
        "available": false,
        "record": true
      }
    ]
  }
}

Keterangan field RecordingItem:

Prop

Type


DELETE /api/visionaire-media/{nvrServerId}/recordings/{path}

Menghapus seluruh file rekaman untuk stream tertentu dari Media Server. Tindakan ini bersifat permanen dan tidak dapat dibatalkan.

Path Parameters:

ParameterTipeKeterangan
nvrServerIdnumberID numerik Media Server.
pathstringPath stream dalam format {app}/{name} (contoh: live/kamera-lobby).

Query Parameters:

Prop

Type

DELETE /api/visionaire-media/{nvrServerId}/recordings/{path}
curl -X DELETE "${API_URL}/api/visionaire-media/1/recordings/live/kamera-lobby-utama" \
  -H "Authorization: Bearer <Token>"

Respons sukses:

Respons DELETE berhasil
{
  "success": true,
  "message": "Recording deleted successfully"
}

GET /api/visionaire-media/{nvrServerId}/recordings/{path}/daily

Mengambil distribusi rekaman harian untuk keperluan date picker. Endpoint ini mengembalikan informasi hari mana saja dalam rentang bulan yang memiliki rekaman tersedia.

Path Parameters:

ParameterTipeKeterangan
nvrServerIdnumberID numerik Media Server.
pathstringPath stream dalam format {app}/{name}.

Query Parameters:

Prop

Type

GET recordings/{path}/daily
curl -X GET "${API_URL}/api/visionaire-media/1/recordings/live/kamera-lobby-utama/daily?search=0126-0426" \
  -H "Authorization: Bearer <Token>"

Contoh respons:

Respons GET /daily
{
  "success": true,
  "data": [
    {
      "year": 2026,
      "month": 4,
      "days": [
        { "day": 28, "available": true, "date": "2026-04-28" },
        { "day": 29, "available": true, "date": "2026-04-29" },
        { "day": 30, "available": false, "date": "2026-04-30" }
      ]
    }
  ]
}

GET /api/visionaire-media/{nvrServerId}/recordings/{path}/hourly

Mengambil distribusi rekaman per jam untuk satu hari tertentu. Digunakan oleh timeline scrubber pada halaman Daily Playback untuk menampilkan rentang menit yang memiliki rekaman.

Query Parameters:

Prop

Type

GET recordings/{path}/hourly
curl -X GET "${API_URL}/api/visionaire-media/1/recordings/live/kamera-lobby-utama/hourly?date=2026-04-28" \
  -H "Authorization: Bearer <Token>"

Contoh respons:

Respons GET /hourly
{
  "success": true,
  "data": {
    "date": "2026-04-28",
    "hours": [
      {
        "hour": 8,
        "minute": 0,
        "available": true,
        "duration": 3600,
        "time": "08:00",
        "ranges": [
          { "start": "08:00", "end": "08:59" }
        ]
      },
      {
        "hour": 9,
        "minute": 0,
        "available": false,
        "duration": 0,
        "time": "09:00",
        "ranges": []
      }
    ]
  }
}

GET /api/nvr-servers

Mengambil daftar seluruh Media Server (NVR Server) yang terdaftar di sistem. Endpoint ini digunakan untuk mengisi dropdown pemilihan server di halaman Recorded Streams.

Query Parameters:

Prop

Type

GET /api/nvr-servers
curl -X GET "${API_URL}/api/nvr-servers" \
  -H "Authorization: Bearer <Token>"

Contoh respons:

Respons GET /api/nvr-servers
{
  "ok": true,
  "data": [
    {
      "id": 1,
      "name": "NVR Gedung A",
      "host": "http://192.168.1.100",
      "type": "srs",
      "api_port": "9080",
      "playback_port": "9080",
      "created_at": "2026-01-10T08:00:00Z",
      "updated_at": "2026-04-01T12:00:00Z"
    }
  ]
}

Tips & Troubleshooting


Selanjutnya

On this page