General overview of the video streaming/recording architecture for FOSDEM
camera & presenter laptop -> videoboxes -> voctops -> restreamer -> caches <- browsers
For a drawing, see graph/fosdem-video-2017.pdf.
The main elements are:
- Cameras and presenter laptops (sources for video)
- Voctops (laptops with voctomix)
- Dumpers & pushers
Better described in the instruction manual.
Here we have the microphones connected to an audio mixer (in the case of the smallest rooms, the mixer is skipped), which goes then in one of the inputs of the camera. The camera is connected to the camera videobox over HDMI, and the videobox records the input and streams it in MPEG-TS over TCP. The presenter's laptop is connected to the presenter videobox, which also records the input and streams it in the same way.
Both video boxes display on their screens a screenshot of what they push out over TCP (The stream gets tee'd. Look at how sproxy gets used...).
For the hardware in the videoboxes, see
For the software running on the videoboxes and their configs, see
All the voctops are stored in a central location, and each one runs an instance of voctomix (https://github.com/voc/voctomix/).
Each voctomix is fed with three sources:
The camera and presenter sources are fed using ffmpeg from the multicast UDP stream, the background is also fed with ffmpeg, using a raw video image.
The output of voctomix is encoded to H.264 and sent again as MPEG-TS over multicast UDP.
All the voctomix scripts can be seen in
Video streaming and recording
The voctops then forward the streams are forwarded to the main restreamer at scaleway and the backup, from the streamed-out H.264 UDP stream, using the
The recordings of the final material are done on the main restreamer and the backup. In addition, all udp multicast streams (the single streams from every video box as well as the merged stream per room) are also dumped on two separate laptops with the ansible role
The main restreamer is nginx with the RTMP module (https://github.com/arut/nginx-rtmp-module) and receives the streams via RTMP. It makes there the primary recordings and server HLS to the caching servers.
The end-users connect to the caching servers and see the streams via HLS.