-
-
Notifications
You must be signed in to change notification settings - Fork 216
Streaming Architecture
Faded edited this page Feb 10, 2026
·
1 revision
FadCam streams live video via HLS using a patched Media3 library that provides real-time fragment callbacks - no file polling needed.
Camera → GLRecordingPipeline → FragmentedMp4Muxer → Callback
↓
RemoteStreamManager
(circular buffer)
↓
LiveM3U8Server
(HTTP streaming)
↓
Browser/VLC Player
| Component | Purpose |
|---|---|
| FragmentedMp4MuxerWrapper | Muxes video into fMP4 fragments with real-time callbacks |
| ProcessedSegment | Media3 object containing init segment or media fragment |
| RemoteStreamManager | Circular buffer (10 fragments) for HLS streaming |
| LiveM3U8Server | HTTP server serving M3U8 playlists and fragments |
- Init Segment (ftyp + moov) sent first
- Media Fragments (moof + mdat) sent every 2 seconds
- Buffer stores latest 10 fragments (~20 seconds of video)
-
HTTP Server serves
/live.m3u8and/seg-{id}.m4s - Player streams video from device
- Codec: H.264 video, AAC audio
- Resolution: 1080p @ 30fps
- Fragment Duration: 2 seconds
- Latency: 3-4 seconds (2x fragment + buffer)
- Bitrate: 8-12 Mbps
-
FragmentedMp4MuxerWrapper.java- Muxer with callback integration -
RemoteStreamManager.java- Fragment buffer & HLS state -
LiveM3U8Server.java- HTTP endpoint for streaming -
GLRecordingPipeline.java- Camera → Muxer integration