‘Madcam‘ is an open frameworks (C++) based project for mixing USB Web Cameras (e.g. the 10$ cheap PS3-Eye web cam) im realtime. Why this is awesome? Its usually hard and/or expensive to mix many video signals in realtime and display them side by side. We found a way to make it cheap, quick and reliable!
The project is a visual extension for another awesome project called “Glitchrobot” where Robots are used to make electronic music, but thats another issue. Lets start!
The goal is set up an VJ setup which is based on live webcam material. One webcam? – Boring! 10 Webcams? – “Unlimited” fun!
So far we use 10 web cams, but the amount can probably be extended. The webcam content is mixed onto one screen, in different tilings and with Video-FX, all in realtime. Tiling and FX can be controlled by Midi and OSC. The system uses Open Frameworks. The allover costs were under 400€ (500$), with the main part being the computer.
The installation Glitchrobot features many detailed mechanic sound actors which are used to make electronic music – with robots! As the actors are quiet small we needed a way to magnify them for a bigger audience. We wanted a bunch of video cams that can be placed anywhere and are displayed on a big projection screen.
We did a lot of research, but mixing and displaying more then two video sources on the cheap is uncommon.
Our first experiments included: use of a professional hardware video switch (expensive, poor features), combine stream data from Raspberry Pi Cams via Ethernet (high latency), try to do everything analog (bad quality and poor features) and some more.
The setup we found working uses the cheap PS3 Eye Cams which have a reasonably high frame rate (>30FPS) and are connected via USB. Iiiks! Can you connect 10 Webcams to one computer and use them ant once? Yes you can:
The main problem is to get a constant stream of video data into the computer. The bottleneck here is the USB Host controller. One USB Host can theoretically take up to 127 client, but we found out only 1-2 Cameras per host controller (PCI / PICe card) work without glitches and missing frames.
In the current setup, one host controller can take data from 2 Webcams running at 480×600 resolution at 30FPS. PCI can process less data then PCIExpress, so it is best to build your system on PCIe cards.
For the system a standard CPU is sufficient. We used an AMD 6 Core, 4GB Ram, SSD 128GB.
and Xubuntu as a base system and a WRT Router for the OSC Network.
- 10 x PS3-Eye Camera
- 1 x CPU AMD FX-8350 4000 AM3+ BOX & 4 GB Ram
- 1 x Mainboard Asrock 990FX Extreme3 990FX
- 2 x DELOCK USB-Controller 2.0, 4+1-Port, PCI
- 2 x PCIe USB Controller NoName
- 1 x MIDI USB Interface M-Audio
- 1 x 19″ Server Rack, Powersupply
- 1 x WRT 54 GL Router
- OpenGL shaders for filters and FX – Glitch your video in realtime!
- UVC Video Compatible (Linux Video driver) e.g. the very cheap and high frame rate USB Webcams “PS3 Eye” (around 10€ / pcs)
- Different tilings: e.g. One cam full screen or 2-9 Cams tilings.
- Decay Video Filter: Apply an OpenGL Shader to create an “fade out” effect on a single cam image, whenever a certain Midi Note is triggered
- Midi and OSC Controls
– Control and switch the tilings with midi notes!
– Control the cam assignment with MIDI CC commands
– Control the Decay time
– Control everything with TouchOSC
- Tested for PS3 Eye Cams running 640×480, 30 Fps
Custom Made Case for the VJ-Computer