====== Live Video Mixing With Free Software ====== {{:wiki:dvmctrl:lacstreaming2.jpg?300 |}} This document describes a workflow for audio/video live-streaming of an event to the masses over the internet using Free/Libre Open-Source Software for mixing, mastering, encoding, transmission and archiving. The setup described was used at the [[http://lac.linuxaudio.org/2012|Linux Audio Conference 2012]] in Stanford, CA. Check out the video-archive on the LAC website for examples. ===== Introduction ===== While there are a couple of endeavors and attempts to replicate the functionality of hardware video-mixers in free-software, most of the existing solutions are rather incomplete. Either they're toy prototypes, very specific or hard to operate by persons other than the coder themselves. The goals we set out to accomplish are to implement adequate functionality, easy-to-use and easy-to-learn operation and integration into the production work-flow. The solution presented uses [[http://dvswitch.alioth.debian.org/|dvswitch]] as the main component for A/V processing. It is augmented by an physical interface (here: a MIDI mixing desk) for controlling it. Live-stream relay is powered by ffmpeg2theora and [[http://icecast.org|icecast2]]. The system is supplemented by a couple of configurable scripts (clickable shortcuts) for auto-starting the whole setup and trouble-shooting. ===== Overview ===== +-------+ +-----------------+ /-->-=* | title | |cGRE Camera(s), | : meta | video | | Video Projector | +-=---->| files +---\ /---+ etc.. | : |cGRE | | | | | | +-------+ v v +-----------------+ /------\ +-----+-----+ +----------+ | | |cYEL | |cYEL | | Midi | MIDI | | OSC | | | +-=------->| dvmctrl +-=------->| dvswitch | | Desk | | | | | | | | | | | \------/ +-----------+ +--+----+--+ ^ meta | | +----------------+ | *------\ | | | | | : | \------>| Live Stream(s) | : v v meta | cBLU | +----+----+ +-------+ *-=---->| | |{d} | |{s} | | | | config | | HDD | +----------------+ | | |cBLU | +---------+ +-------+ Legend: -=----> control data +-----------+ +--------+ +------+ |cYEL | |cGRE | |cBLU | ------> video signals (DV) |application| |dvsource| |dvsink| | | | | | | +-----------+ +--------+ +------+ The system comprises two main applications (yellow in above diagram): * ''dvswitch'' does the main work or mixing video * ''dvmctrl'' - controls dvswitch While 'DVswitch' can be controlled independently using its GUI, the approach does not lend itself for robust real-world usage: Using a mouse to click smallish on-screen buttons or using keyboard-shortcuts is not a good interface to operate a system live. Furthermore, integration into the post-production workflow (adding titles, meta-data, etc) is out of the scope of the video-mixing itself. The work-flow integration is overseen by a control application: 'dvmctrl'. The green and blue boxes in above diagram are ''dvsource-*'' and ''dvsink-*'' instances respectively. They are wrapped by shell-scripts that allow to monitor and restart them, more on this later. ===== Building Blocks ===== documentation work in progress ==== DVswitch ==== patched version: [[http://rg42.org/gitweb/?p=dvswitch.git|customized dvswitch code repository]] ==== DV-sources ==== === Camera(s) === === Projector(s) === === Title-videos === ==== DV-sinks ==== === File/Disk === === Streaming === ==== DVmctrl ==== A MIDI to OpenSoundControl (OSC) mapper for dvswitch. * [[dvmctrl]] * [[http://rg42.org/gitweb/?p=dvmctrl.git|dvmctrl source]] Optionally scans a folder for title-videos (''-D path''), and creates symlinks to titles on cue/cut in the dvsink-file folder (''-S path''). === MIDI mappings === {{ :wiki:dvmctrl:bcf2000-dvmctrl.png?400 |BCF2000 MIDI mapping}} ==== Scripts ==== all inside screen(1). ===== Usage ===== Prerequisites: * Video Camera(s) * Computer (>=2Ghz, multi-core) * Internet