research/jabodetabek-cctv-live-data/sources.md

42 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Sources
★ = directly verified during this investigation (Oct 13, 2026). Unmarked items are leads not yet re-verified.
## Government portals (catalog sources)
- ★ `https://jakcctv.jakarta.go.id/publik` — DKI Jakarta public CCTV portal. The page is a server-rendered paginator; the underlying data endpoint is `https://jakcctv.jakarta.go.id/publik/data?q=&page=N`, returning JSON `{cards, pagination, count, total}`. Each card embeds an iframe to a Bali Tower player (`embed.html`). 52 cameras listed at capture.
- ★ `https://bpjt.pu.go.id/cctv/` — BPJT (Kementerian PU) toll-road page. Renders an **inline JSON array of ~1,530 camera records** directly in the page HTML: per-cam `streamhls` (HLS URL), `bujt` (operator tag), `nama_km`, `lat`, `lon`, `status`, `updated_at`. This is the single source for the toll layer.
- ★ `https://bekasikota.go.id/cctv` — Kota Bekasi page. Consumes `https://eofficev2.bekasikota.go.id/backupcctv/m3/list.json` (24 entries: `path`, `name`, `pic`). Thumbnails hosted on `pemkotbekasi.github.io/cctv_pic/` (fronted by i0.wp.com).
- ★ `https://bsw.kotabogor.go.id/cctv` — Kota Bogor "Bogor Single Window" page; per-camera detail pages at `/cctv/<id>/detail` (96 camera IDs observed). Detail pages embed datarhei Restreamer HLS. **TCP-timeout from our network** (likely geo/IP filtering); read via a reader proxy — see [[jabodetabek-cctv-live-data/methodology|Methodology]].
## Stream servers by operator (what actually serves video)
- ★ **DKI Jakarta** — `dki-jkt.balitower.co.id:7028` — Bali Tower (PT Bali Towerindo Sentra) custom stack, `server: Streamer 26.04.1`. fMP4 HLS (`index.fmp4.m3u8`, multi-track under `tracks-v1/`), ~7.5 s segments, separate `embed.html` "Live Player" page per camera. Camera paths encode the agency, e.g. `501844_JKP_DISHUB_JL.-MH.-THAMRIN-C01_CCTV-01`.
- ★ **Hutama Karya (HK)** — `pub2.hk-opt.com` (+ `pub.hk-opt.com`) — Ant Media Server (`/LiveApp/streams/<id>.m3u8`), behind Cloudflare; 2.07 s segments. The operator's own CCTV portal is `extern.hk-opt.com` ("CCTV External — Divisi OPT — PT Hutama Karya (Persero)"), plus `traffic.hk-opt.com` ("SMARTCCTV").
- ★ **Trans Bumi Serbaraja** — `info.serbaraja-tollroad.co.id:20443` — Ant Media Server; ~2 s segments.
- ★ **Cimanggis–Cibitung Tollways (CCT)** — `streaming-cct.co.id` — Ant Media Server.
- ★ **Cibitung–Tanjung Priok (CTP)** — `cctv.ctptollways.com:2254` — **MediaMTX** (`server: mediamtx`); master playlist → `stream.m3u8`.
- ★ **Jakarta Tollroad Development (JTD)** — `camera.jtd.co.id` — nginx + Express packager (`X-Powered-By: Express`); `camera/share/tios/<a>/<b>/index.m3u8`.
- ★ **Marga Mandalasakti (MMS)** — `cctv.mms-corp.id` — nginx HLS (`<cam>/stream.m3u8`, `_seg<N>.ts`).
- ★ **Kresna Kusuma Dyandra Marga (KKDM)** — `cctv.kkdm.co.id` — nginx + Express (`api/cctv/<a>/<b>/index.m3u8`, `seg_<N>.ts`).
- ★ **Jakarta Lingkar Baratsatu (JLB)** — `cctvjorrw1.com` — nginx HLS (e.g. `KM/7+950B.m3u8`), ~5 s segments.
- ★ **CMNP** — `cctv.citramarga.com` — Apache HLS (`hls/cam3-…/stream.m3u8`), ~1 s segments.
- ★ **Pemkot Bekasi** — `eofficev2.bekasikota.go.id` — nginx serving `backupcctv/m3/…` (city e-office host).
- ★ **Pemkot Bogor** — `restreamer{1,2,3,4,5,6}.kotabogor.go.id` — **datarhei Restreamer** (`memfs/<uuid>.m3u8`; sub-playlists append a `?session=` token).
Not selected by the audited app but present on BPJT's page: Jasa Marga (`jmlive.jasamarga.com`, ~605 cams — manifest returns empty 200 from outside), Waskita (`cctv.waskitabumiwira.com`), BSD Toll (`stream.bsdtol.com` — datarhei, 502 at capture), PPTR (`pptrlive.co.id` — datarhei), and ~25 other hosts.
## Site under study
- ★ `https://transit.oyenza.com/cctv` — "CCTV Jakarta Live" third-party map. Key surfaces:
- static catalog: `/assets/asset-cctv-<hash>.json` (fetched at runtime by `cctv-<hash>.js`)
- playback: hls.js (lazy-loaded chunk) → directly loads each view's owner-hosted URL
- map: MapLibre with self-hosted tiles (`/tiles`)
- analytics: `/_e` (POST events)
- robots.txt: `Disallow: /`
- Related domains: `transit.vantis.sh` (alias), `vantis.sh` — same developer, per the TransJakarta audit.
## Context (third-party / first-party-adjacent)
- `https://smartcity.jakarta.go.id/en/blog/pantau-lalu-lintas-dan-keamanan-dengan-cctv-jakarta/` — Jakarta Smart City blog listing Balitower `embed.html` links for city cameras (first-party-adjacent evidence that Balitower hosts DKI public camera streams).
- `https://iameberhard.com/jakarta-cams` and its blog post — independent dashboard over Balitower / LewatMana / ATCS feeds; names further aggregators (LewatMana, `atcs-jakarta.com`, `atcs-bptj.dephub.go.id`). Third-party; not re-verified here.