47 lines
3.2 KiB
Markdown
47 lines
3.2 KiB
Markdown
---
|
||
title: "Jabodetabek CCTV live data — four public sources, hotlinked HLS"
|
||
description: "How the Jabodetabek public CCTV layer works: DKI Jakarta, BPJT toll-road, Bekasi, and Bogor camera catalogs, and the owner-hosted HLS streams that apps hotlink. Audited Oct 2026 via transit.oyenza.com/cctv."
|
||
status: concluded
|
||
category: technical
|
||
tags: [jabodetabek, cctv, video-streaming, hls, reverse-engineering, transit-data, jakarta-public-transport-data, balitower, bpjt]
|
||
draft: true
|
||
created: 2026-10-13
|
||
updated: 2026-10-13
|
||
---
|
||
|
||
# Jabodetabek CCTV live data — verified upstreams
|
||
|
||
**What this is:** a verified map of the public CCTV layer across Jabodetabek — which government portals publish camera catalogs, what stream servers actually serve the video, and how third-party apps assemble and play them.
|
||
|
||
**Origin:** reverse-engineering the `/cctv` page of `transit.oyenza.com` (the same tracker from [[transjakarta-live-data/index|TransJakarta Live Data]]) to determine where its camera list and live video come from.
|
||
|
||
## TL;DR
|
||
|
||
- **Four upstreams:** DKI Jakarta (`jakcctv.jakarta.go.id`), BPJT toll roads (`bpjt.pu.go.id/cctv`), Kota Bekasi, Kota Bogor (BSW). All four cross-matched to oyenza's list with ~100% URL/ID agreement — see [[jabodetabek-cctv-live-data/analysis|Analysis]].
|
||
- **No aggregator API:** oyenza ships a static catalog (214 cams / 310 views) inside its own bundle and hotlinks each camera's HLS URL directly from the owner's server (hls.js; CORS `*`; no proxy, no tokens at capture).
|
||
- **Toll layer = one page scrape:** BPJT's page embeds an inline JSON array of ~1,530 cameras (stream URL + operator + coordinates + status); the app's 154 toll cams are a curated, working Jabodetabek subset (all 190 of its toll view URLs appear verbatim).
|
||
- **Stream stacks fingerprinted:** Ant Media Server (`/LiveApp/streams/`), MediaMTX, datarhei Restreamer (`memfs/`), Bali Tower custom fMP4 HLS, and plain nginx/Apache HLS.
|
||
|
||
## Key verified numbers (Oct 13, 2026)
|
||
|
||
- oyenza catalog: 214 cameras / 310 views — DKI 14/46, toll 154/190, Bekasi 23/23, Bogor 23/51.
|
||
- Cross-match: DKI 46/46 views, toll 190/190 views, Bekasi 23/23 names, Bogor 51/51 detail IDs (the Bogor Alun-Alun detail page embeds the exact `restreamer2.kotabogor.go.id/memfs/…` URL oyenza lists).
|
||
- Stream hosts probed live: **12/12** answered with valid HLS playlists (2–8 s segments).
|
||
- Catalog `checkedAt`: `2026-10-12T22:07:39Z` (page footer: "Daftar diperiksa 13 Oktober 2026").
|
||
|
||
## Using it
|
||
|
||
- Per-source endpoints and stream hosts: [[jabodetabek-cctv-live-data/sources|Sources]]
|
||
- Evidence archive: `workspace/cctv-jabodetabek-captures/` (catalog JSON, portal dumps, probe logs)
|
||
|
||
## Files
|
||
|
||
- [[jabodetabek-cctv-live-data/sources|Sources]] — portals, stream hosts per operator, context
|
||
- [[jabodetabek-cctv-live-data/analysis|Analysis]] — the chain, overlap evidence, stack fingerprints
|
||
- [[jabodetabek-cctv-live-data/methodology|Methodology]] — how it was verified (repeatable)
|
||
- [[jabodetabek-cctv-live-data/next-steps|Next steps]] — risks, gaps, ideas
|
||
|
||
## Related Research
|
||
|
||
- [[jakarta-public-transport-data/index|Jakarta Public Transport Data]] — umbrella topic
|
||
- [[transjakarta-live-data/index|TransJakarta Live Data]] — same site, bus layer
|