Brucon streaming setup

From Hackerspace Brussels
Jump to: navigation, search

Contents

[edit] 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)

[edit] software

  • FFADO driver (for firewire audio devices)
  • qjackctl / jackd for routing the audio
  • gstreamer+plugins for video/audio encoding & oggmux
  • icecast (2.3.x)

[edit] 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. \

[edit] 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

[edit] 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)


[edit] 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)