Skip to content

Audience Cameras

Michael Farrell edited this page Jan 19, 2019 · 1 revision

These cameras are used for keynotes, so that the presenter can see the audience in the other rooms. It consists of two parts:

  • Raspberry Pi camera device (lcacam1, lcacam2)
  • Mini-desktop PCs display device, one driving each TV (disp1, disp2)

Raspberry Pi

Inventory:

  • Raspberry Pi Model 3
  • Logitech Webcam
  • MicroUSB power pack

The Pis connect to a private network.

They run with VLC as a streaming platform on Alpine Linux. Using VLC instead of ffmpeg is lower dependency, but its HTTP server is "experimental" and doesn't handle multiple clients.

The high level of the configuration is we capture MJPEG frames from the webcams at 1280x720@25fps, mux that into a Ogg container and serve it over HTTP. Ogg gives us timecodes and the ability to mux in other stuff later.

Configuration:

# cat /etc/conf.d/vlc
# Sample vlc params suitable for running as a daemon

## --file-logging		enable file logging
## --logfile			logfile name/path
## -vvv				verbose logging
## -I dummy			disable X11 interface
## --sout PARAMS		encoding parameters


## Do NOT quote 'PARAMS' otherwise shell expansions will broke vlc
##
## The --daemon option will automatically be added so no need to add it
## here.

# (default from alpine)
# VLC_OPTS="--quiet -I dummy alsa://hw:0,0 --file-logging --logfile /var/log/vlc/vlc.log --sout #transcode{acodec=mp3,ab=48,channels=1,samplerate=22050}:std{access=http,mux=ogg,dst=:8080}"

# LCA

#VLC_OPTS="--quiet -I dummy v4l2:///dev/video0:width=1280:height=720:chroma=MJPG:fps=25 --sub-source marq{marquee=%H:%M:%S,position=6,size=16} --file-logging --logfile /var/log/vlc/vlc.log --sout #standard{access=http,mux=ogg,dst=:8000}"

VLC_OPTS="--quiet --loop -I dummy v4l2:///dev/video0:width=1280:height=720:chroma=MJPG:fps=25 v4l2:///dev/video1:width=1280:height=720:chroma=MJPG:fps=25 --input-slave timecode:// --timecode-fps 25 --sub-source marq{marquee=%H:%M:%S,position=6,size=16} --file-logging --logfile /var/log/vlc/vlc.log --sout #standard{access=http,mux=ogg,dst=:8000}"

Did some experimenting with sending a (local) time signal from the RPi:

  • Tried to add in a timecode from the RPi in as a subtitle track -- this doesn't seem to behave properly, unsure why at the moment.
  • Rendering text into the image costs a LOT of CPU time -- we get < 1 fps when doing this and the stream is unusable.
Clone this wiki locally