Brucon streaming setup
hardware
- an AMD Athlon(tm) XP 2800+ machine, capturing audio and video, encoding (proved quite limited)
- FP10 firewire audio card (needed to get audio from control room: balanced audio signal, 3-pin XLR)
- DV camera (firewire)
- one old pentium 4 (streaming server)
software
- FFADO driver (for firewire audio devices)
- qjackctl / jackd for routing the audio
- gstreamer+plugins for video/audio encoding & oggmux
- icecast (2.3.x)
scripts
jack (default ubuntu 9.04)
sudo apt-get install qjackctl ffado
starting up jack
/usr/bin/jackd -v -R -P80 -t1000 -m -dfirewire -r48000 -p2048 -n6
gstreamer : just use the ubuntu default packages : easier !
I added packages from launchpad/gstreamer-developers for recent updates + shout2send plugin deb http://ppa.launchpad.net/gstreamer-developers/ppa/ubuntu jaunty main you will find their signing key http://launchpad.net/~gstreamer-developers
streaming is started using the gstreamer commandline tool:
gst-launch-0.10 videomixer name=mix ! ffmpegcolorspace ! video/x-raw-yuv ! queue ! timeoverlay ! theoraenc quality=32 name=venc \ oggmux name=mux ! tee name=tt ! queue ! filesink location=blob.ogg \ tt. ! queue ! shout2send mount=/stream.ogg port=8001 password=hsb2009 ip=217.136.187.25 \ jackaudiosrc do-timestamp=true provide-clock=true ! queue ! audioresample ! audio/x raw-float,rate=16000,channels=1,depth=32 ! queue ! vorbisenc name=aenc aenc. ! mux. \ venc. ! mux. \ dv1394src do-timestamp=true typefind=true ! queue ! dvdemux ! dvdec ! queue ! videorate ! videoscale ! ffmpegcolorspace ! video/x-raw-yuv, width=352, height=288,framerate=15/1 ! videobox left=0 top=0 border-alpha=0 ! mix. \
my tries using videobox (picture-in-picture) didn't work out, mainly because the machine couldn't keep up (audio dropping packets, sync issues)
#v4l2src device=/dev/video0 do-timestamp=true ! queue ! videorate ! videoscale method=0 ! video/x-raw-yuv, width=160 , height=120,framerate=15/1 ! videobox left=-44 top=-30 border-alpha=0 ! mix. \ #v4l2src device=/dev/video3 do-timestamp=true ! queue ! videorate ! videoscale method=0 ! video/x-raw-yuv, width=640, height=480, framerate=1/1 ! videobox right=0 bottom=0 border-alpha=0 ! mix. \
saving
the encoder does save the encoded file, but to be sure (better redundant then sorry), i dumped the stream on the streaming-server (icecast) to the harddisk. to do this i put a little bash script constantly wget'ing whatever was sent:
while true; do wget http://streaming.brucon.org/stream.ogg; sleep 5; done
cutting ogg
in the end, i wanted to nicely cut up the ogg files (making a nice archive), without re-encoding them, following tools did the job:
mp3splt-gtk
(get the source from http://mp3splt.sourceforge.net/ ) provides a nice graphical interface, with possibility to randomly skip in the file, timeline view & saving cuepoints, but when trying to cut up the .ogg file, crashed...
so i found (source http://dev.streamnik.de/oggvideotools.html)
oggCut -s starttime -e endtime in.ogg out.ogg
which did a nice job in cutting up the whole capture (specifiy starttime and enddtime in milliseconds)
permissions for ieee 1394 devices
run this and plug your device
udevadm monitor
it will give output on which devices got created by udev
KERNEL[1257760263.685410] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518 (ieee1394) KERNEL[1257760263.685436] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518/ieee1394_node/000a9200d8110518 (ieee1394_node) KERNEL[1257760263.685916] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518/000a9200d8110518-0 (ieee1394) UDEV [1257760263.685936] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518 (ieee1394) KERNEL[1257760263.686159] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518/000a9200d8110518-0/ieee1394/000a9200d8110518-0 (ieee1394) UDEV [1257760263.686480] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518/ieee1394_node/000a9200d8110518 (ieee1394_node) UDEV [1257760263.687323] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518/000a9200d8110518-0 (ieee1394) UDEV [1257760263.691749] add /devices/pci0000:00/0000:00:1e.0/0000:04:00.0/fw-host0/000a9200d8110518/000a9200d8110518-0/ieee1394/000a9200d8110518-0 (ieee1394)