*.pyc
+build
+dist
+*.egg
+TeleCaster Server
+
+Live audio and video recording and streaming system based on Gstreamer, JACK, Vncserver and Fluxbox
+
Features
========
* Recording and streaming formats : MP3 and OGG Vorbis, WebM
* Autonomous VNC and JACK sessions for safe monitoring and streaming
- * Provides all configuration files for Debian like systems
+ * Provides all configuration files for Debian like systems
License
=======
======
Guillaume Pellerin <yomguy@parisson.com>
-
-
+++ /dev/null
-
-__version__ = 0.6
-
-from install import *
USER=
OPTIONS=""
LOG=/var/log/telecaster/vncserver.log
-PIDFILE=/var/run/vncserver.pid
+PIDFILE=/var/run/telecaster.pid
PORT=2
test -f /etc/default/telecaster || exit 0
VNCHOME=/home/$USER
if [ ! "x$START_DAEMON" = "xyes" -a ! "$1" = "stop" ]; then
- echo "Edit /etc/default/telecaster to start telecaster vncserver"
- exit 0
+ echo "Edit /etc/default/telecaster to start telecaster vncserver"
+ exit 0
fi
test -f $DAEMON || exit 0
. /lib/lsb/init-functions
case "$1" in
- start)
- log_begin_msg "Starting telecaster streaming vncserver:" "telecaster"
+ start)
+ log_begin_msg "Starting telecaster streaming vncserver:" "telecaster"
su -c "$DAEMON $OPTIONS :$PORT > $LOG &" $USER
sleep 10
- su -c "deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml > /dev/null &" $USER
- su -c "deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml > /dev/null &" $USER
pid=`pgrep -u ${USER} vncserver`
- if [ pid = '' ]; then
- log_failure_msg "TeleCaster daemon can't be started! Check logfile: $LOG"
+ if [ pid = '' ]; then
+ log_failure_msg "TeleCaster daemon can't be started! Check logfile: $LOG"
else
echo $pid > $PIDFILE
- fi
+ fi
- ;;
- stop)
- log_begin_msg "Stopping telecaster streaming vncserver:" "telecaster"
+ ;;
+ stop)
+ log_begin_msg "Stopping telecaster streaming vncserver:" "telecaster"
pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- if [ ! pid = '' ]; then
- su -c "pkill -9 -f \"python /usr/local/share/telecaster/scripts/monitor_check.py\" "
- su -c "pkill -9 -f \"deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml\" "
- su -c "pkill -9 -f \"deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml\" "
- su -c "pkill -9 gst-launch-0.10" $USER
- sleep 1
- su -c "vncserver -kill :$PORT" $USER
- log_end_msg 0
- else
- log_end_msg 1
- exit 1
- fi
+ if [ ! pid = '' ]; then
+ su -c "pkill -9 -f monitor_check.py"
+ su -c "pkill -9 -f telecaster_mp3_monitor.yaml"
+ su -c "pkill -9 -f telecaster_webm_monitor.yaml"
+ su -c "pkill -9 gst-launch-0.10" $USER
+ sleep 1
+ su -c "vncserver -kill :$PORT" $USER
+ log_end_msg 0
+ else
+ log_end_msg 1
+ exit 1
+ fi
rm $PIDFILE
- ;;
- try-restart)
- if test -e $PIDFILE ; then
- pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- PIDDIR=/proc/$pid
- if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
- $0 restart
- exit 0
- fi
- fi
- test -f /etc/rc`/sbin/runlevel | cut -d' ' -f2`.d/S*vncserver* && $0 start
- ;;
+ ;;
+ try-restart)
+ if test -e $PIDFILE ; then
+ pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
+ PIDDIR=/proc/$pid
+ if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
+ $0 restart
+ exit 0
+ fi
+ fi
+ test -f /etc/rc`/sbin/runlevel | cut -d' ' -f2`.d/S*vncserver* && $0 start
+ ;;
- *)
- log_warning_msg "Usage: /etc/init.d/telecaster {start|stop|restart|force-reload|awaken|debug-run}"
- log_warning_msg " start - starts system-wide vncserver service"
- log_warning_msg " stop - stops system-wide vncserver service"
- log_warning_msg " restart, force-reload - starts a new system-wide vncserver service"
- log_warning_msg " awaken - tell system-wide vncserver to start a poll cycle immediately"
- log_warning_msg " debug-run [strace [strace options...]] - start a debug run of the"
- log_warning_msg " system-wide vncserver service, optionally running it under strace"
- exit 1
- ;;
+ *)
+ log_warning_msg "Usage: /etc/init.d/telecaster {start|stop|restart|force-reload|awaken|debug-run}"
+ log_warning_msg " start - starts system-wide vncserver service"
+ log_warning_msg " stop - stops system-wide vncserver service"
+ log_warning_msg " restart, force-reload - starts a new system-wide vncserver service"
+ log_warning_msg " awaken - tell system-wide vncserver to start a poll cycle immediately"
+ log_warning_msg " debug-run [strace [strace options...]] - start a debug run of the"
+ log_warning_msg " system-wide vncserver service, optionally running it under strace"
+ exit 1
+ ;;
esac
exit 0
+++ /dev/null
-#!/bin/sh
-### BEGIN INIT INFO
-# Provides: telecaster-audio-relay
-# Required-Start:
-# Required-Stop:
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: init script for the telecaster audio daemon
-### END INIT INFO
-
-
-DAEMON=deefuzzer
-USERNAME=telecaster
-CONFFILE="/etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml"
-LOG=/var/log/telecaster/deefuzzer-audio-daemon.log
-PIDFILE=/var/run/telecaster-audio-relay.pid
-
-. /lib/lsb/init-functions
-
-case "$1" in
- start)
- log_begin_msg "Starting telecaster audio streaming relay:" "telecaster"
- su -c "$DAEMON $CONFFILE &" $USERNAME
- pid=`pgrep -u ${USERNAME} -f "$DAEMON $CONFFILE"`
- if [ pid = '' ]; then
- log_failure_msg "TeleCaster audio daemon can't be started! Check logfile: $LOG"
- else
- echo $pid > $PIDFILE
- fi
- ;;
- stop)
- log_begin_msg "Stopping telecaster audio streaming relay:" "telecaster"
- pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- if [ ! pid = '' ]; then
- kill -9 $pid
- log_end_msg 0
- else
- log_end_msg 1
- exit 1
- fi
- rm $PIDFILE
- ;;
- try-restart)
- if test -e $PIDFILE ; then
- pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- PIDDIR=/proc/$pid
- if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
- $0 restart
- exit 0
- fi
- fi
- test -f /etc/rc`/sbin/runlevel | cut -d' ' -f2`.d/S*vncserver* && $0 start
- ;;
-
- *)
- log_warning_msg "Usage: /etc/init.d/telecaster {start|stop}"
- log_warning_msg " start - starts system-wide vncserver service"
- log_warning_msg " stop - stops system-wide vncserver service"
- exit 1
- ;;
-esac
-
-exit 0
+++ /dev/null
-#!/bin/sh
-### BEGIN INIT INFO
-# Provides: telecaster-video-relay
-# Required-Start:
-# Required-Stop:
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: init script for the telecaster video relay
-### END INIT INFO
-
-
-DAEMON=deefuzzer
-USERNAME=telecaster
-CONFFILE="/etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml"
-LOG=/var/log/telecaster/deefuzzer-video-daemon.log
-PIDFILE=/var/run/telecaster-video-relay.pid
-
-. /lib/lsb/init-functions
-
-case "$1" in
- start)
- log_begin_msg "Starting telecaster video streaming relay:" "telecaster"
- su -c "$DAEMON $CONFFILE &" $USERNAME
- pid=`pgrep -u ${USERNAME} -f "$DAEMON $CONFFILE"`
- if [ pid = '' ]; then
- log_failure_msg "TeleCaster video daemon can't be started! Check logfile: $LOG"
- else
- echo $pid > $PIDFILE
- fi
- ;;
- stop)
- log_begin_msg "Stopping telecaster video streaming relay:" "telecaster"
- pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- if [ ! pid = '' ]; then
- kill -9 $pid
- log_end_msg 0
- else
- log_end_msg 1
- exit 1
- fi
- rm $PIDFILE
- ;;
- try-restart)
- if test -e $PIDFILE ; then
- pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- PIDDIR=/proc/$pid
- if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
- $0 restart
- exit 0
- fi
- fi
- test -f /etc/rc`/sbin/runlevel | cut -d' ' -f2`.d/S*vncserver* && $0 start
- ;;
-
- *)
- log_warning_msg "Usage: /etc/init.d/telecaster-audio {start|stop}"
- log_warning_msg " start - starts system-wide vncserver service"
- log_warning_msg " stop - stops system-wide vncserver service"
- exit 1
- ;;
-esac
-
-exit 0
+++ /dev/null
-#!/bin/sh
-### BEGIN INIT INFO
-# Provides: vncserver
-# Required-Start:
-# Required-Stop:
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: init script for the audio vncserver
-### END INIT INFO
-
-
-DAEMON=/usr/bin/vncserver
-USER=
-OPTIONS=""
-LOG=/var/log/telecaster/vncserver.log
-PIDFILE=/var/run/vncserver.pid
-PORT=2
-
-test -f /etc/default/telecaster || exit 0
-. /etc/default/telecaster
-
-VNCHOME=/home/$USER
-
-if [ ! "x$START_DAEMON" = "xyes" -a ! "$1" = "stop" ]; then
- echo "Edit /etc/default/telecaster to start telecaster vncserver"
- exit 0
-fi
-
-test -f $DAEMON || exit 0
-
-. /lib/lsb/init-functions
-
-case "$1" in
- start)
- log_begin_msg "Starting telecaster streaming vncserver:" "telecaster"
- su -c "$DAEMON $OPTIONS :$PORT > $LOG &" $USER
- sleep 10
- #su -c "deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml > /dev/null &" $USER
- #su -c "deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml > /dev/null &" $USER
- pid=`pgrep -u ${USER} vncserver`
- if [ pid = '' ]; then
- log_failure_msg "TeleCaster daemon can't be started! Check logfile: $LOG"
- else
- echo $pid > $PIDFILE
- fi
-
- ;;
- stop)
- log_begin_msg "Stopping telecaster streaming vncserver:" "telecaster"
- pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- if [ ! pid = '' ]; then
- #su -c "pkill -9 -f \"/usr/local/bin/deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml\" " $USER
- #su -c "pkill -9 -f \"/usr/local/bin/deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml\" " $USER
- su -c "pkill -9 -f \"python /usr/local/share/telecaster/scripts/monitor_check.py\" "
- su -c "pkill -9 gst-launch-0.10" $USER
- sleep 1
- su -c "vncserver -kill :$PORT" $USER
- log_end_msg 0
- else
- log_end_msg 1
- exit 1
- fi
- rm $PIDFILE
- ;;
- try-restart)
- if test -e $PIDFILE ; then
- pid=`cat $PIDFILE | sed -e 's/\s.*//'|head -n1`
- PIDDIR=/proc/$pid
- if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then
- $0 restart
- exit 0
- fi
- fi
- test -f /etc/rc`/sbin/runlevel | cut -d' ' -f2`.d/S*vncserver* && $0 start
- ;;
-
- *)
- log_warning_msg "Usage: /etc/init.d/telecaster {start|stop|restart|force-reload|awaken|debug-run}"
- log_warning_msg " start - starts system-wide vncserver service"
- log_warning_msg " stop - stops system-wide vncserver service"
- log_warning_msg " restart, force-reload - starts a new system-wide vncserver service"
- log_warning_msg " awaken - tell system-wide vncserver to start a poll cycle immediately"
- log_warning_msg " debug-run [strace [strace options...]] - start a debug run of the"
- log_warning_msg " system-wide vncserver service, optionally running it under strace"
- exit 1
- ;;
-esac
-
-exit 0
+++ /dev/null
-#!/bin/sh
-
-# ---------------------
-# Audio channel
-# ---------------------
-
-pid=`pgrep jack-rack`
-
-
-if [ ! $pid = "" ]; then
- sleep 1
-else
- jack-rack -n /etc/telecaster/jack-rack/eq_comp_limit_02.rack > /dev/null &
- sleep 3
-fi
-
-jack_connect system:capture_1 jack_rack:in_1
-jack_connect system:capture_2 jack_rack:in_2
-
-qjackctl &
-
-scripts/tc_audio_mp3_icecast.sh &
-#edcast_jack -c /etc/telecaster/edcast_jack_local.cfg -n lamemp3enc -p jack_rack > /dev/null &
-
-sleep 2
-
-# MONO
-#jack_connect jack_rack:out_1 lamemp3enc:in_jackaudiosrc0_2
-#jack_connect jack_rack:out_1 system:playback_1
-#jack_connect jack_rack:out_1 system:playback_2
-
-# STEREO setup
-jack_disconnect system:capture_1 gst-launch-0.10:in_jackaudiosrc0_1
-jack_disconnect system:capture_2 gst-launch-0.10:in_jackaudiosrc0_2
-
-jack_connect jack_rack:out_1 gst-launch-0.10:in_jackaudiosrc0_1
-jack_connect jack_rack:out_2 gst-launch-0.10:in_jackaudiosrc0_2
-
-#jack_connect jack_rack:out_1 lamemp3enc:in_1
-#jack_connect jack_rack:out_2 lamemp3enc:in_2
-#jack_connect jack_rack:out_1 system:playback_1
-#jack_connect jack_rack:out_2 system:playback_2
-
-# 4 channels setup
-#jack_connect system:capture_1 jack_rack:in_1
-#jack_connect system:capture_1 jack_rack:in_2
-#jack_connect system:capture_2 jack_rack:in_1
-#jack_connect system:capture_2 jack_rack:in_2
-#jack_connect system:capture_3 jack_rack:in_1
-#jack_connect system:capture_4 jack_rack:in_2
-
-# ---------------------
-# Video channel
-# ---------------------
-
-scripts/tc_video_simple_webm_stream.sh &
-
-sleep 2
-
-jack_disconnect system:capture_1 gst-launch-0.10-01:in_jackaudiosrc0_1
-jack_disconnect system:capture_2 gst-launch-0.10-01:in_jackaudiosrc0_2
-
-jack_connect jack_rack:out_1 gst-launch-0.10-01:in_jackaudiosrc0_1
-jack_connect jack_rack:out_2 gst-launch-0.10-01:in_jackaudiosrc0_2
-
-sleep 1
-
-#Audio monitor
-deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml &
-
-#Video monitor
-deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml &
-
-sleep 3
-
-#Wathdog for trash
-python scripts/monitor_check.py 10 /home/telecaster/trash/webm/ smtp.icp.fr informatique@icp.fr alerts@parisson.com &
-
-#!/bin/sh
-
-# ---------------------
-# Audio channel
-# ---------------------
-
-pid=`pgrep jack-rack`
-
-
-if [ ! $pid = "" ]; then
- sleep 1
-else
- jack-rack -n /etc/telecaster/jack-rack/eq_comp_limit_02.rack > /dev/null &
- sleep 3
-fi
-
-jack_connect system:capture_1 jack_rack:in_1
-jack_connect system:capture_2 jack_rack:in_2
-
-qjackctl &
-
-scripts/tc_audio_mp3_icecast.sh &
-#edcast_jack -c /etc/telecaster/edcast_jack_local.cfg -n lamemp3enc -p jack_rack > /dev/null &
-
-sleep 2
-
-# MONO
-#jack_connect jack_rack:out_1 lamemp3enc:in_jackaudiosrc0_2
-#jack_connect jack_rack:out_1 system:playback_1
-#jack_connect jack_rack:out_1 system:playback_2
-
-# STEREO setup
-jack_disconnect system:capture_1 gst-launch-0.10:in_jackaudiosrc0_1
-jack_disconnect system:capture_2 gst-launch-0.10:in_jackaudiosrc0_2
-
-jack_connect jack_rack:out_1 gst-launch-0.10:in_jackaudiosrc0_1
-jack_connect jack_rack:out_2 gst-launch-0.10:in_jackaudiosrc0_2
-
-#jack_connect jack_rack:out_1 lamemp3enc:in_1
-#jack_connect jack_rack:out_2 lamemp3enc:in_2
-#jack_connect jack_rack:out_1 system:playback_1
-#jack_connect jack_rack:out_2 system:playback_2
-
-# 4 channels setup
-#jack_connect system:capture_1 jack_rack:in_1
-#jack_connect system:capture_1 jack_rack:in_2
-#jack_connect system:capture_2 jack_rack:in_1
-#jack_connect system:capture_2 jack_rack:in_2
-#jack_connect system:capture_3 jack_rack:in_1
-#jack_connect system:capture_4 jack_rack:in_2
-
-# ---------------------
-# Video channel
-# ---------------------
-
-scripts/tc_video_simple_webm_stream.sh &
-
-sleep 2
-
-jack_disconnect system:capture_1 gst-launch-0.10-01:in_jackaudiosrc0_1
-jack_disconnect system:capture_2 gst-launch-0.10-01:in_jackaudiosrc0_2
-
-jack_connect jack_rack:out_1 gst-launch-0.10-01:in_jackaudiosrc0_1
-jack_connect jack_rack:out_2 gst-launch-0.10-01:in_jackaudiosrc0_2
-
-sleep 1
-
-#Audio monitor
-deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml &
-
-#Video monitor
-deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml &
-
-sleep 3
-
-#Wathdog for trash
-python scripts/monitor_check.py 10 /home/telecaster/trash/webm/ smtp.icp.fr informatique@icp.fr alerts@parisson.com &
-
+++ /dev/null
-session.menuFile: ~/.fluxbox/menu
-session.keyFile: ~/.fluxbox/keys
-session.configVersion: 13
+++ /dev/null
-session.menuFile: ~/.fluxbox/menu
-session.keyFile: ~/.fluxbox/keys
-session.configVersion: 11
-
+++ /dev/null
-#!/bin/sh
-#
-# fluxbox startup-script:
-#
-# Lines starting with a '#' are ignored.
-
-# Change your keymap:
-xmodmap "/home/telecaster/.Xmodmap"
-
-# Applications you want to run with fluxbox.
-# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.
-#
-# unclutter -idle 2 &
-# wmnd &
-# wmsmixer -w &
-# idesk &
-
-# And last but not least we start fluxbox.
-# Because it is the last app you have to run it with ''exec'' before it.
-
-fluxbox &
-# or if you want to keep a log:
-# exec fluxbox -log "/home/telecaster/.fluxbox/log"
-
-fbpid=$!
-
-sleep 1
-
-{
-
-sh ~/.fluxbox/autostart.sh
-
-} &
-
-wait $fbpid
--- /dev/null
+#!/bin/sh
+
+# ---------------------
+# Audio channel
+# ---------------------
+
+pid=`pgrep jack-rack`
+
+
+if [ ! $pid = "" ]; then
+ sleep 1
+else
+ jack-rack -n /etc/telecaster/jack-rack/eq_comp_limit_02.rack > /dev/null &
+ sleep 3
+fi
+
+jack_connect system:capture_1 jack_rack:in_1
+jack_connect system:capture_2 jack_rack:in_2
+
+qjackctl &
+
+scripts/tc_audio_mp3_icecast.sh &
+#edcast_jack -c /etc/telecaster/edcast_jack_local.cfg -n lamemp3enc -p jack_rack > /dev/null &
+
+sleep 2
+
+# MONO
+#jack_connect jack_rack:out_1 lamemp3enc:in_jackaudiosrc0_2
+#jack_connect jack_rack:out_1 system:playback_1
+#jack_connect jack_rack:out_1 system:playback_2
+
+# STEREO setup
+jack_disconnect system:capture_1 gst-launch-0.10:in_jackaudiosrc0_1
+jack_disconnect system:capture_2 gst-launch-0.10:in_jackaudiosrc0_2
+
+jack_connect jack_rack:out_1 gst-launch-0.10:in_jackaudiosrc0_1
+jack_connect jack_rack:out_2 gst-launch-0.10:in_jackaudiosrc0_2
+
+#jack_connect jack_rack:out_1 lamemp3enc:in_1
+#jack_connect jack_rack:out_2 lamemp3enc:in_2
+#jack_connect jack_rack:out_1 system:playback_1
+#jack_connect jack_rack:out_2 system:playback_2
+
+# 4 channels setup
+#jack_connect system:capture_1 jack_rack:in_1
+#jack_connect system:capture_1 jack_rack:in_2
+#jack_connect system:capture_2 jack_rack:in_1
+#jack_connect system:capture_2 jack_rack:in_2
+#jack_connect system:capture_3 jack_rack:in_1
+#jack_connect system:capture_4 jack_rack:in_2
+
+# ---------------------
+# Video channel
+# ---------------------
+
+scripts/tc_video_simple_webm_stream.sh &
+
+sleep 2
+
+jack_disconnect system:capture_1 gst-launch-0.10-01:in_jackaudiosrc0_1
+jack_disconnect system:capture_2 gst-launch-0.10-01:in_jackaudiosrc0_2
+
+jack_connect jack_rack:out_1 gst-launch-0.10-01:in_jackaudiosrc0_1
+jack_connect jack_rack:out_2 gst-launch-0.10-01:in_jackaudiosrc0_2
+
+sleep 1
+
+#Audio monitor
+deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml &
+
+#Video monitor
+deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml &
+
+sleep 3
+
+#Wathdog for trash
+python scripts/monitor_check.py 10 /home/telecaster/trash/webm/ smtp.icp.fr informatique@icp.fr alerts@parisson.com &
+
+#!/bin/sh
+
+# ---------------------
+# Audio channel
+# ---------------------
+
+pid=`pgrep jack-rack`
+
+
+if [ ! $pid = "" ]; then
+ sleep 1
+else
+ jack-rack -n /etc/telecaster/jack-rack/eq_comp_limit_02.rack > /dev/null &
+ sleep 3
+fi
+
+jack_connect system:capture_1 jack_rack:in_1
+jack_connect system:capture_2 jack_rack:in_2
+
+qjackctl &
+
+scripts/tc_audio_mp3_icecast.sh &
+#edcast_jack -c /etc/telecaster/edcast_jack_local.cfg -n lamemp3enc -p jack_rack > /dev/null &
+
+sleep 2
+
+# MONO
+#jack_connect jack_rack:out_1 lamemp3enc:in_jackaudiosrc0_2
+#jack_connect jack_rack:out_1 system:playback_1
+#jack_connect jack_rack:out_1 system:playback_2
+
+# STEREO setup
+jack_disconnect system:capture_1 gst-launch-0.10:in_jackaudiosrc0_1
+jack_disconnect system:capture_2 gst-launch-0.10:in_jackaudiosrc0_2
+
+jack_connect jack_rack:out_1 gst-launch-0.10:in_jackaudiosrc0_1
+jack_connect jack_rack:out_2 gst-launch-0.10:in_jackaudiosrc0_2
+
+#jack_connect jack_rack:out_1 lamemp3enc:in_1
+#jack_connect jack_rack:out_2 lamemp3enc:in_2
+#jack_connect jack_rack:out_1 system:playback_1
+#jack_connect jack_rack:out_2 system:playback_2
+
+# 4 channels setup
+#jack_connect system:capture_1 jack_rack:in_1
+#jack_connect system:capture_1 jack_rack:in_2
+#jack_connect system:capture_2 jack_rack:in_1
+#jack_connect system:capture_2 jack_rack:in_2
+#jack_connect system:capture_3 jack_rack:in_1
+#jack_connect system:capture_4 jack_rack:in_2
+
+# ---------------------
+# Video channel
+# ---------------------
+
+scripts/tc_video_simple_webm_stream.sh &
+
+sleep 2
+
+jack_disconnect system:capture_1 gst-launch-0.10-01:in_jackaudiosrc0_1
+jack_disconnect system:capture_2 gst-launch-0.10-01:in_jackaudiosrc0_2
+
+jack_connect jack_rack:out_1 gst-launch-0.10-01:in_jackaudiosrc0_1
+jack_connect jack_rack:out_2 gst-launch-0.10-01:in_jackaudiosrc0_2
+
+sleep 1
+
+#Audio monitor
+deefuzzer /etc/telecaster/deefuzzer/telecaster_mp3_monitor.yaml &
+
+#Video monitor
+deefuzzer /etc/telecaster/deefuzzer/telecaster_webm_monitor.yaml &
+
+sleep 3
+
+#Wathdog for trash
+python scripts/monitor_check.py 10 /home/telecaster/trash/webm/ smtp.icp.fr informatique@icp.fr alerts@parisson.com &
+
--- /dev/null
+session.menuFile: ~/.fluxbox/menu
+session.keyFile: ~/.fluxbox/keys
+session.configVersion: 13
--- /dev/null
+session.menuFile: ~/.fluxbox/menu
+session.keyFile: ~/.fluxbox/keys
+session.configVersion: 11
+
--- /dev/null
+import sys, time, logging, socket, datetime
+from threading import Thread
+from logging.handlers import SMTPHandler
+
+from watchdog.observers import Observer
+from watchdog.events import *
+
+
+IGNORE_PATTERNS = ['*.git/*', '*.swp', '*.swpx', '*~', '*.tmp',]
+HOSTNAME = socket.gethostname()
+LOG_MAX_PERIOD = 300
+
+class EmailLogger(object):
+ """An email logging class"""
+
+ def __init__(self, mailhost, fromaddr, toaddrs, subject):
+ self.logger = logging.getLogger('telecaster')
+ self.hdlr = SMTPHandler(mailhost, fromaddr, toaddrs, subject)
+ self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
+ self.hdlr.setFormatter(self.formatter)
+ self.logger.addHandler(self.hdlr)
+ self.logger.setLevel(logging.INFO)
+
+
+class ActivityEventHandler(PatternMatchingEventHandler):
+
+ activity = True
+
+ def on_modified(self, event):
+ super(ActivityEventHandler, self).on_modified(event)
+ self.activity = True
+
+
+class ActivityCheck(Thread):
+
+ def __init__(self, period, path, mailhost, fromaddr, toaddrs):
+ Thread.__init__(self)
+ self.period = int(period)
+ self.path = path
+ self.activity = False
+ self.last_time = datetime.datetime.now()
+ self.message_sent = False
+ self.subject = 'WARNING : ' + HOSTNAME + ' : ' + 'telecaster monitor activity'
+ self.logger = EmailLogger(mailhost, fromaddr, toaddrs, self.subject)
+ self.event_handler = ActivityEventHandler(ignore_patterns=IGNORE_PATTERNS)
+ self.observer = Observer()
+ self.observer.schedule(self.event_handler, path, recursive=True)
+ self.observer.start()
+
+ def run(self):
+ while True:
+ if not self.event_handler.activity:
+ now = datetime.datetime.now()
+ delta = now - self.last_time
+ if delta.total_seconds() > LOG_MAX_PERIOD or not self.message_sent:
+ self.logger.logger.error('The monitor is NOT recording anymore in ' + self.path + ' ! ')
+ self.last_time = now
+ self.message_sent = True
+ else:
+ self.event_handler.activity = False
+ time.sleep(self.period)
+
+ def stop(self):
+ self.observer.stop()
+
+
+if __name__ == "__main__":
+ period = sys.argv[1]
+ path = sys.argv[2]
+ mailhost = sys.argv[3]
+ fromaddr = sys.argv[4]
+ toaddrs = sys.argv[5].split(',')
+ check = ActivityCheck(period, path, mailhost, fromaddr, toaddrs)
+ check.start()
+ check.join()
--- /dev/null
+#!/bin/sh
+
+gst-launch jackaudiosrc connect=1 ! audio/x-raw-float, channels=1 \
+ ! queue ! audioconvert ! queue ! lamemp3enc quality=4.0 \
+ ! queue ! shout2send ip=127.0.0.1 port=8000 password=source2parisson mount=telecaster_live.mp3
+ > /dev/null
--- /dev/null
+#!/bin/sh
+
+# Start TeleCaster video channel
+
+#WIDTH=640
+#HEIGHT=360
+WIDTH=864
+HEIGHT=480
+#WIDTH=1280
+#HEIGHT=720
+
+v4l2-ctl -d 0 -c power_line_frequency=1 -c zoom_absolute=140
+
+gst-launch v4l2src device=/dev/video0 ! video/x-raw-rgb, width=$WIDTH, height=$HEIGHT, framerate={30/1} \
+ ! queue ! videoflip method=rotate-180 \
+ ! queue ! ffmpegcolorspace \
+ ! queue ! vp8enc speed=2 threads=4 quality=10.0 max-latency=25 max-keyframe-distance=30 auto-alt-ref-frames=true ! queue ! muxout. \
+ jackaudiosrc connect=2 ! audio/x-raw-float, channels=2 \
+ ! queue ! audioconvert ! queue ! vorbisenc quality=0.4 ! queue ! muxout. \
+ webmmux streamable=true name=muxout \
+ ! tcpserversink host=127.0.0.1 port=9000 protocol=none blocksize=65536 sync-method=1 \
+ > /dev/null
--- /dev/null
+#!/bin/sh
+
+sudo /etc/init.d/telecaster-audio stop
+sudo /etc/init.d/telecaster-video stop
+sudo /etc/init.d/telecaster-vnc stop
+sudo /etc/init.d/stream-m stop
+sudo /etc/init.d/jackd stop
+
+sleep 3
+
+sudo /etc/init.d/jackd start
+sudo /etc/init.d/stream-m start
+sudo /etc/init.d/telecaster-vnc start
+
+sleep 10
+
+sudo /etc/init.d/telecaster-audio start
+sudo /etc/init.d/telecaster-video start
--- /dev/null
+#!/bin/sh
+#
+# fluxbox startup-script:
+#
+# Lines starting with a '#' are ignored.
+
+# Change your keymap:
+xmodmap "/home/telecaster/.Xmodmap"
+
+# Applications you want to run with fluxbox.
+# MAKE SURE THAT APPS THAT KEEP RUNNING HAVE AN ''&'' AT THE END.
+#
+# unclutter -idle 2 &
+# wmnd &
+# wmsmixer -w &
+# idesk &
+
+# And last but not least we start fluxbox.
+# Because it is the last app you have to run it with ''exec'' before it.
+
+fluxbox &
+# or if you want to keep a log:
+# exec fluxbox -log "/home/telecaster/.fluxbox/log"
+
+fbpid=$!
+
+sleep 1
+
+{
+
+sh ~/.fluxbox/autostart.sh
+
+} &
+
+wait $fbpid
--- /dev/null
+#!/bin/sh
+
+# Uncomment the following two lines for normal desktop:
+# unset SESSION_MANAGER
+# exec /etc/X11/xinit/xinitrc
+
+[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
+[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
+xsetroot -solid grey
+#xset s 0
+vncconfig -iconic &
+#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
+#x-window-manager &
+#jackd -R -dalsa -r44100 -p2048 -n4 -D -Chw:0,1 -Phw:0,1 -S &
+startfluxbox &
+
+++ /dev/null
-#!/bin/sh
-
-# Uncomment the following two lines for normal desktop:
-# unset SESSION_MANAGER
-# exec /etc/X11/xinit/xinitrc
-
-[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
-[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
-xsetroot -solid grey
-#xset s 0
-vncconfig -iconic &
-#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
-#x-window-manager &
-#jackd -R -dalsa -r44100 -p2048 -n4 -D -Chw:0,1 -Phw:0,1 -S &
-startfluxbox &
-
+++ /dev/null
-#!/bin/sh
-
-sudo /etc/init.d/telecaster-audio stop
-sudo /etc/init.d/telecaster-video stop
-sudo /etc/init.d/telecaster-vnc stop
-sudo /etc/init.d/stream-m stop
-
-sleep 3
-
-sudo /etc/init.d/stream-m start
-sudo /etc/init.d/telecaster-vnc start
-
-sleep 10
-
-sudo /etc/init.d/telecaster-audio start
-sudo /etc/init.d/telecaster-video start
+++ /dev/null
-#!/bin/sh
-
-sudo /etc/init.d/telecaster-audio stop
-sudo /etc/init.d/telecaster-video stop
-sudo /etc/init.d/telecaster-vnc stop
-sudo /etc/init.d/stream-m stop
-sudo /etc/init.d/jackd stop
-
-sleep 3
-
-sudo /etc/init.d/jackd start
-sudo /etc/init.d/stream-m start
-sudo /etc/init.d/telecaster-vnc start
-
-sleep 10
-
-sudo /etc/init.d/telecaster-audio start
-sudo /etc/init.d/telecaster-video start
+++ /dev/null
-import sys, time, logging, socket, datetime
-from threading import Thread
-from logging.handlers import SMTPHandler
-
-from watchdog.observers import Observer
-from watchdog.events import *
-
-
-IGNORE_PATTERNS = ['*.git/*', '*.swp', '*.swpx', '*~', '*.tmp',]
-HOSTNAME = socket.gethostname()
-LOG_MAX_PERIOD = 300
-
-class EmailLogger(object):
- """An email logging class"""
-
- def __init__(self, mailhost, fromaddr, toaddrs, subject):
- self.logger = logging.getLogger('telecaster')
- self.hdlr = SMTPHandler(mailhost, fromaddr, toaddrs, subject)
- self.formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
- self.hdlr.setFormatter(self.formatter)
- self.logger.addHandler(self.hdlr)
- self.logger.setLevel(logging.INFO)
-
-
-class ActivityEventHandler(PatternMatchingEventHandler):
-
- activity = True
-
- def on_modified(self, event):
- super(ActivityEventHandler, self).on_modified(event)
- self.activity = True
-
-
-class ActivityCheck(Thread):
-
- def __init__(self, period, path, mailhost, fromaddr, toaddrs):
- Thread.__init__(self)
- self.period = int(period)
- self.path = path
- self.activity = False
- self.last_time = datetime.datetime.now()
- self.message_sent = False
- self.subject = 'WARNING : ' + HOSTNAME + ' : ' + 'telecaster monitor activity'
- self.logger = EmailLogger(mailhost, fromaddr, toaddrs, self.subject)
- self.event_handler = ActivityEventHandler(ignore_patterns=IGNORE_PATTERNS)
- self.observer = Observer()
- self.observer.schedule(self.event_handler, path, recursive=True)
- self.observer.start()
-
- def run(self):
- while True:
- if not self.event_handler.activity:
- now = datetime.datetime.now()
- delta = now - self.last_time
- if delta.total_seconds() > LOG_MAX_PERIOD or not self.message_sent:
- self.logger.logger.error('The monitor is NOT recording anymore in ' + self.path + ' ! ')
- self.last_time = now
- self.message_sent = True
- else:
- self.event_handler.activity = False
- time.sleep(self.period)
-
- def stop(self):
- self.observer.stop()
-
-
-if __name__ == "__main__":
- period = sys.argv[1]
- path = sys.argv[2]
- mailhost = sys.argv[3]
- fromaddr = sys.argv[4]
- toaddrs = sys.argv[5].split(',')
- check = ActivityCheck(period, path, mailhost, fromaddr, toaddrs)
- check.start()
- check.join()
+++ /dev/null
-#!/bin/sh
-
-gst-launch jackaudiosrc connect=1 ! audio/x-raw-float, channels=1 \
- ! queue ! audioconvert ! queue ! lamemp3enc quality=4.0 \
- ! queue ! shout2send ip=127.0.0.1 port=8000 password=source2parisson mount=telecaster_live.mp3
- > /dev/null
+++ /dev/null
-#!/bin/sh
-
-# Start TeleCaster video channel
-
-#WIDTH=640
-#HEIGHT=360
-WIDTH=864
-HEIGHT=480
-#WIDTH=1280
-#HEIGHT=720
-
-v4l2-ctl -d 0 -c power_line_frequency=1 -c zoom_absolute=140
-
-gst-launch v4l2src device=/dev/video0 ! video/x-raw-rgb, width=$WIDTH, height=$HEIGHT, framerate={30/1} \
- ! queue ! videoflip method=rotate-180 \
- ! queue ! ffmpegcolorspace \
- ! queue ! vp8enc speed=2 threads=4 quality=10.0 max-latency=25 max-keyframe-distance=30 auto-alt-ref-frames=true ! queue ! muxout. \
- jackaudiosrc connect=2 ! audio/x-raw-float, channels=2 \
- ! queue ! audioconvert ! queue ! vorbisenc quality=0.4 ! queue ! muxout. \
- webmmux streamable=true name=muxout \
- ! tcpserversink host=127.0.0.1 port=9000 protocol=none blocksize=65536 sync-method=1 \
- > /dev/null
--- /dev/null
+Compile Gstreamer from Debian packages for backport
+=====================================================
+
+libvpx-1.3.0$ ./configure --enable-shared
+
+
+
+sudo apt-get build-dep -t wheezy-backports gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
+
+
+apt-get source gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gir1.2-gstreamer-1.0 gstreamer1.0-tools
+
+sudo apt-get purge gstreamer1.0-doc gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-base-doc gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools gstreamer1.0-x libgstreamer1.0-0 libgstreamer1.0-dev gstreamer1.0-libav
+
+./configure
+make -j4
+sudo make install
+sudo ldconfig
+
shutil.rmtree(root + os.sep + dir)
class Install(object):
+ """Live audio and video recording and streaming system based on Gstreamer,
+ JACK, Vncserver and Fluxbox"""
def __init__(self, options):
self.options = options
os.system('chown -R ' + self.user + ':' + self.user + ' ' + dir)
def install_deps(self):
+ os.system("""sudo aptitude install python python-dev python-xml python-libxml2 python-pip \
+ python-setuptools python-twitter python-liblo python-mutagen \
+ icecast2 apache2 apache2-suexec jackd libjack-dev vorbis-tools procps meterbridge fluxbox \
+ vnc4server vncviewer swh-plugins jack-rack libshout3 libshout3-dev libmad0-dev libogg-dev \
+ g++ python-yaml swatch""")
+
+ # Install DeeFuzzer
+ os.system("pip install deefuzzer")
+
# Install Stream-m
os.chdir(self.app_dir)
os.system('cp -ra lib/stream-m /usr/local/lib/')
self.chown(conf_dir)
for dir in os.listdir('conf/home'):
- home_dir = self.home + '/.' + dir
+ home_dir = self.home + dir
if not os.path.exists(home_dir):
os.makedirs(home_dir)
os.system('cp -r conf/home/'+dir + '/* ' + home_dir)
os.system('cp -ra conf/usr/* /usr/')
os.system('cp -ra conf/etc/init.d/* /etc/init.d/')
-
+
os.system('sudo update-rc.d -f jackd remove')
os.system('sudo update-rc.d -f stream-m remove')
os.system('sudo update-rc.d -f vncserver remove')
os.system('update-rc.d jackd defaults 30 30')
os.system('update-rc.d stream-m defaults 20 20')
os.system('update-rc.d telecaster-vnc defaults 80 15')
- os.system('update-rc.d telecaster-video defaults 81 14')
- os.system('update-rc.d telecaster-audio defaults 82 13')
os.system('chmod 777 ' + self.m3u_dir)
os.system('chmod 666 ' + self.m3u_dir + '/*')
os.system('chmod 775 ' + self.log_dir)
os.system('sudo adduser www-data telecaster')
-
+
def run(self):
if self.options['keepinit'] == False:
print 'Installing init files...'
Installation successfull !
Now, please :
- - configure your telecaster editing:
- /etc/telecaster/telecaster.xml
- /etc/telecaster/deefuzzer.xml
-
- configure your apache VirtualHost editing /etc/apache2/sites-available/telecaster.conf
-
- tune your audio and video servers and REBOOT!
See README for more infos.
+++ /dev/null
-# -*- coding: utf-8 -*-
-from setuptools import setup, find_packages
-
-CLASSIFIERS = ['Environment :: Web Environment', 'Framework :: Django', 'Intended Audience :: Science/Research', 'Intended Audience :: Education', 'Programming Language :: Python', 'Programming Language :: JavaScript', 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', 'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', 'Topic :: Multimedia :: Sound/Audio', 'Topic :: Multimedia :: Sound/Audio :: Analysis', 'Topic :: Multimedia :: Sound/Audio :: Players', 'Topic :: Scientific/Engineering :: Information Analysis', 'Topic :: System :: Archiving', ]
-
-setup(
- name = "telecaster-server",
- url = "https://github.com/yomguy/telecaster-server",
- description = "Live audio and video recording and streaming system based on Gstreamer, JACK, Vncserver and Fluxbox",
- long_description = open('README.rst').read(),
- author = "Guillaume Pellerin",
- author_email = "yomguy@parisson.com",
- version = '0.8',
- install_requires = [
- 'deefuzzer',
- ],
- platforms=['OS Independent'],
- license='CeCILL v2',
- classifiers = CLASSIFIERS,
- packages = find_packages(),
- include_package_data = True,
- zip_safe = False,
-)
-
-import tcserver
-tcserver.install.run()
-
-