Nodeflux Central
Broadcast (Gambar & GPS)

Broadcast (Gambar & GPS)

Menyiarkan snapshot gambar dan koordinat GPS dari perangkat bergerak ke banyak penonton lewat WebSocket, tanpa encoder video.

Pengenalan

Tidak semua sumber bisa (atau perlu) mengirim video kontinu. Body-cam, ponsel petugas, atau drone di jaringan seluler yang lemah lebih cocok mengirim snapshot JPEG berkala plus posisi GPS. Fitur Broadcast menerima keduanya lewat HTTP biasa dan meneruskannya seketika ke semua klien WebSocket yang berlangganan channel yang sama. Aktifkan dengan --broadcast-on (ENABLE_BROADCAST=true).

POST /broadcast/img/live/mobile POST /broadcast/gps/live/mobile WS /ws/v1/broadcast/receives/live/mobile/unit_07 WS (channel yang sama) Ponsel / body-cam Liodra :9080 Dashboard operator Lenz / aplikasi lain

Tidak ada penyimpanan: pesan yang tidak ada penerimanya dibuang, dan request tetap dijawab sukses. Ini fitur fan-out real-time, bukan arsip.

Format pesan kompatibel dengan layanan lama mobile-hub. Endpoint natif berada di port 9080; port 9994 hanya ada pada image yang masih menyertakan sidecar mobile-hub untuk kompatibilitas mundur (tidak dibangun secara default).


Cara Menggunakan

Berlangganan sebagai penonton

Channel penuh adalah {channel}/{stream_id}, misalnya live/mobile/unit_07:

const ws = new WebSocket("ws://<host-liodra>:9080/ws/v1/broadcast/receives/live/mobile/unit_07");
ws.binaryType = "blob";
ws.onmessage = (event) => {
  if (event.data instanceof Blob) {
    img.src = URL.createObjectURL(event.data);          // frame JPEG/PNG
    return;
  }
  const msg = JSON.parse(event.data);
  if (msg.type === "welcome") console.log("connected", msg.data.client_id);
  else if (msg.lat !== undefined) updateMap(msg.lat, msg.long, msg.timestamp); // GPS
};

Kirim gambar dari perangkat

curl -X POST http://<host-liodra>:9080/api/v1/broadcast/img/live/mobile \
  -F "image=@frame.jpg" \
  -F "stream_id=unit_07" \
  -F "timestamp=2026-09-15T10:30:00Z"

channel pada path boleh bertingkat (live, live/mobile, live/drone); stream_id di form melengkapinya menjadi channel penuh.

Kirim posisi GPS

curl -X POST http://<host-liodra>:9080/api/v1/broadcast/gps/live/mobile \
  -H 'Content-Type: application/json' \
  -d '{ "lat": "-6.200000", "long": "106.816666", "stream_id": "unit_07", "timestamp": "2026-09-15T10:30:00Z" }'

Pantau channel aktif

curl http://<host-liodra>:9080/api/v1/broadcast/status/live/mobile   # channel dengan prefix live/mobile
curl http://<host-liodra>:9080/api/v1/broadcast/status/              # semua channel

Respons menyebut active_streams, total_clients (selalu global), dan per channel client_count, created_at, last_activity.


Fitur Utama

Tiga jenis pesan di satu koneksi

PesanFormatKapan
WelcomeJSON { type: "welcome", data: { client_id, stream_id, message }, timestamp }Sekali saat terhubung
GambarFrame biner mentah (JPEG/PNG apa adanya, maks. 10 MB)Setiap POST /broadcast/img
GPSJSON datar { lat, long, stream_id, timestamp }Setiap POST /broadcast/gps

Gambar dikirim sebagai frame biner, bukan base64, sehingga overhead minimal dan browser bisa langsung memakainya sebagai Blob.

Channel bertingkat dan filter status

Karena channel adalah path, satu organisasi bisa memisahkan live/mobile/patroli, live/mobile/pengawas, live/drone/... dan memfilter status per prefix. Penonton selalu berlangganan channel penuh; tidak ada wildcard.

Tanpa state, tanpa disk

Channel dibuat saat klien pertama terhubung atau pesan pertama tiba, dan dihapus saat kosong. Tidak ada rekaman, antrean, atau retry. Bila perangkat mengirim ke channel tanpa penonton, request dijawab 200 tanpa pekerjaan apa pun.

Bersama fitur lain

Broadcast berjalan di proses Liodra yang sama dan tidak menyentuh jalur video, sehingga bisa digabung dengan --as-nvr dan --with-vod tanpa saling mengganggu. Perangkat yang sama boleh mem-publish RTMP (lihat Live Streaming) saat jaringan baik dan beralih ke snapshot saat jaringan lemah.


API Reference

Detail lengkap di API Reference: Broadcast.

MethodPathFungsi
POST/api/v1/broadcast/img/{channel}Siarkan gambar (multipart)
POST/api/v1/broadcast/gps/{channel}Siarkan koordinat GPS (JSON)
GET/api/v1/broadcast/status/{channel}Channel aktif dan jumlah klien
GET/ws/v1/broadcast/receives/{path}WebSocket penerima

Tips & Troubleshooting

Selanjutnya

On this page