We had some contacts with organizers of http://2008.rmll.info/?lang=en and decided to participate recording all conferences with Elphel NC353L network cameras.
The goal is:
- record all the conferences in high resolution. (from 640x480 to 1920x1080p)
- restream few conferences in real time
- upload ALL conferences on RMLL site and google video and as many support as possible.
- keep high quality 1920x1080p MJPEG sources for all conferences what will be post processed.
- have at least 1 camera per conference room and 2-4 camera for a very important conferences what will be post processed.
- do all that with exclusively FreeSoftware
This section will describe used hardware.
We will bring 14 cameras with lenses and POE injectors.
We will bring POE injectors with us.
We will use Computar H2Z0414C-MP Varifocal Lens, 4-8mm F1.4 Manual Iris Vari-Focal C-Mount, 3MPix. We will have 10-12 of such lense + 2 5MPix fisheyes. Maybe we will have some other good quality lenses.
If we do not want to stream or transcode in live a X40 IBM thinkpad or equivalent is OK.
If we do want to mux, transcode and stream in realtime a core2duo or quadro 2.4 Ghz and with 2GB RAM minimum is more welcome.
List of freesoftware needed to record video/audio, mux and stream.
Of course standard GNU/Linux
mencoder to record video
gstreamer-0.10 to record audio
ogmmerge from ogmtools to mux ogg vorbis sound produce by gstreamer and mjpeg video from mencoder
ffmpeg2theora to encode on theora ( minimum version is 0.19 )
oggfwd to send video and icecast server
icecast2 for streaming the ogg/theora file
On standard ubuntu 7.10 i've got all this software with apt-get.
Special scripts for recording
Here there is a simple patch for pure data to record, mux sound and stream on icecast server. You can download this patch here :
Change the path of your need and launch this with pd name_you_choose.pd
To record audio there is new elphel cam with USB where you can plug USB microphone ( recommended SAMSON USB MIC ) BUT she is not avaivable for this events :( so we need to find solution to record audio.
The solution is a computer ... :(
For this we need standard computer with soundcard alsa compatible and gstreamer-0.10 software. To record audio i use this scripts made by luxigo.
#!/bin/sh # audio settings AUDIO_DEVICE="hw:0,0" AUDIO_BITRATE=48000 # output file name OUTFILE="out.ogg" DEBUG="-v -m" gst-launch-0.10 $DEBUG \ \ oggmux name=mux \ ! filesink location="$OUTFILE" \ \ fdsrc fd=0 \ ! queue \ ! oggparse \ ! oggdemux \ ! ogmvideoparse \ ! mux. \ \ alsasrc \ device="$AUDIO_DEVICE" \ ! queue \ ! audioconvert \ ! vorbisenc bitrate=$AUDIO_BITRATE \ ! mux. # Description of the gst-launch command above: # - the muxed stream (the output from the oggmux element) will be # stored in a file (filesink) # - The video comes from ElphelOgm through stdin (fdsrc fd=0). # - The ogg stream is parsed for security (optional?) and demuxed. # - The ogmvideo stream is also parsed for security (optional?). # - The resulting mjpeg stream is sent to the ogg muxer through the # "mux." element (defined with "oggmux name=mux"). # (This syntax could also be used for oggdemux but here there's only # a single stream in the incoming ogg container so we dont need to # complicate things here) # - The sound comes from an alsa device through alsasrc, # - The sound is converted in a suitable format then encoded in vorbis, # before being muxed with the video stream
We've got different way to record video from elphel camera. The newest way to record is camogm/cam2ogm but we need nfs server or hard drive directly connected to the camera but we don't have camera with harddrive and nfs server is not what i prefer.. We can also use ElphelOgm but we are some artefact with this so i choose to use classic mencoder way to record video like this :
mencoder rtsp://ipcamera:554 -ovc copy -fps 24.99 -frames 250000 -o outputv.avi
the option frames 250000 produce approximatively 2 hours of video on 1920x1088 format.
Muxing audio with video
To mux of audio and video we use ogmmerge from ogmtools like this :
ogmmerge -o sync.ogg out.ogg outputv.avi
There is an option -sync if you need an audio track synchronized.
$ ogmmerge -o goodsync.ogm -A source.avi -s 200 outofsync.ogg This would add 200ms of silence at the beginning of the audio tracks taken from outofsync.ogg. And -s always applies to all audio tracks in a source file. If you want to apply -s only to a specific track then take the same source file more than once and add -a and -s accordingly.
from man ogmmerge
Transcoding to Theora/Vorbis
For the the transcoding we use ffmpeg2theora ( minimum version 0.19 ) to encode the mjpeg and oggvorbis on the ogg/theora file.
cat sync.ogg | ffmpeg2theora -p preview -o final.ogg -
Finally to stream for the world we use icecast2 server.
Send the ogg/theora files with oggfwd like this.
cat final.ogg | oggfwd ip_of_icecast_server port password /stream.ogg
Of course you need to configure icecast2 server before.