Constrained-Link Remote Viewing — Methodology
· bundle 03 · three platforms
What this measures
Delivered frames per second and effective wire bandwidth at the receiving client when the network path is constrained to five named tiers, from Slow 3G to uncapped. Three platforms exercised in parallel: a desktop browser (Chrome with DevTools throttling), the iOS native app (running on the iPhone Simulator), and the Android native app (running on the emulator). Both mobile apps speak the same S-VIDIA streaming protocol and were exercised against the same test NVR / cameras as the web run.
Cameras and scenes
- Dynamic scene — Samsung PTZ outdoor camera, 1920×1080 native, intersection with passing vehicles. Continuous block-delta churn.
- Static scene — fixed outdoor camera, 2688×1520 native, parking-lot view with low scene change. Tests the codec's idle floor.
Camera operating labels and deployment locations are excluded from this published methodology.
Tier table
| Tier | Intended cap (down / up / RTT) | Web (Chrome preset) |
|---|---|---|
| A | 256 kbps / 64 kbps / +400 ms | Slow 3G (500 / 500 kbps + 2000 ms) |
| B | 512 / 128 / +300 ms | Fast 3G (1600 / 750 / 562 ms) |
| C | 1024 / 256 / +150 ms | Slow 4G (1600 / 750 / 150 ms) |
| D | 2048 / 512 / +80 ms | Fast 4G (9000 / 9000 / 170 ms) |
| E | unlimited / unlimited / 0 ms | no emulation |
The mobile sweeps applied the idealized caps directly through a userspace TCP throttling proxy (token bucket + injected RTT) because Chrome's named presets are coarser than the playbook target. macOS pf+dummynet kernel throttling was tested and proven empirically non-functional on the run host (rules matched, but bandwidth was not enforced) — the userspace proxy is the wire and its byte counter is the ground truth.
Per-window protocol
For each (camera, tier) pair, in order E → A → B → C → D per camera:
- Apply throttling.
- Wait 30 s for the FDC codec at the proxy + client buffer to settle on a steady-state delivery rate.
- Measure for 60 s — counting WebSocket frames (web) or proxy-observed frame deliveries (mobile).
- Take a screenshot at the end of the measurement window.
Web results
| Tier | Dynamic fps | Dynamic kbps | Static fps | Static kbps |
|---|---|---|---|---|
| A · Slow 3G | 1.0 | 3.8 | 0.4 | 1.8 |
| B · Fast 3G | 3.5 | 14.0 | 0.4 | 1.6 |
| C · Slow 4G | 2.8 | 11.0 | 0.2 | 0.7 |
| D · Fast 4G | 11.4 | 45.5 | 7.7 | 30.5 |
| E · uncapped | 14.8 | 139.0 | 9.9 | 140.2 |
iOS results (HG Client, iPhone Simulator)
| Tier | Dynamic fps | Dynamic kbps | Static fps | Static kbps |
|---|---|---|---|---|
| A (256) | 2.0 | 258 | 2.0 | 258 |
| B (512) | 6.0 | 283 | 6.4 | 216 |
| C (1024) | 12.8 | 373 | 10.3 | 186 |
| D (2048) | 19.7 | 760 | 12.3 | 244 |
| E (uncapped) | 13.8 | 524 | 9.9 | 389 |
Android results (AVClient, Pixel 6 Emulator)
| Tier | Dynamic fps | Dynamic kbps | Static fps | Static kbps |
|---|---|---|---|---|
| A (256) | 3.0 | 208 | 4.9 | 112 |
| B (512) | 6.4 | 301 | 6.5 | 99 |
| C (1024) | 12.1 | 229 | 9.4 | 91 |
| D (2048) | 15.0 | 285 | 7.1 | 50 |
| E (uncapped) | 12.6 | 221 | 8.6 | 84 |
The Android app's lower Quality slider setting (5 of ~20) and lower single-camera FPS request (10 vs iOS's 12) account for most of the per-frame byte difference vs iOS. Both apps speak the same S-VIDIA streaming protocol; the on-wire video format is identical.
Limitations / disclosures
- Synthetic throttling ≠ real cellular. Chrome's emulation and the userspace token-bucket proxy give clean ceilings on bytes/sec with constant added latency. Real 4G/5G adds jitter, packet loss, and bursty rate variation. Numbers should be read as best-case at the nominal cap.
- Real-cellular reality check skipped. Phone-hotspot tethering against the test NVR was not performed in this run; scope was synthetic-only.
- Mobile apps run on simulator / emulator, not physical devices. CPU, GPU, decoder, and thermal behavior differ from real hardware; what we measured is the codec + protocol response to a constrained link.
- Stream-quality controls were left at run-time defaults per platform. Manually lowering each platform's quality slider would shift numbers.
- Per-tier numbers are point-in-time, not averaged across multiple runs. Outdoor intersection scene drift across tiers contributed some of the mobile-platform variance.
← Back to constrained-link table on /technical-specifications