#!/bin/bash # # Streaming Media Recording Script # Dependancies: bash, mplayer AlarmCatcher() { clear echo -e "Timeout... \c" KillSubs TIMERPROC= } KillSubs() { echo -e "SUBS KILL: \c" if [ -n "$CHILDPROC" ]; then kill $CHILDPROC > /dev/null if [ $? -eq 0 ]; then echo "ok" else echo "failed" fi CHILDPROC= else echo "no subs to kill..." fi } SetTimer() { if [ -z "$TIMEOUT" ]; then TIMEOUT=10 fi if [ $TIMEOUT -ne 0 ]; then sleep $TIMEOUT && kill -s 14 $$ & CHILDPROC="$CHILDPROC" TIMERPROC="$!" fi } UnsetTimer() { echo -e "STOP TIMERS: \c" if [ -n "$TIMERPROC" ]; then kill $TIMERPROC > /dev/null if [ $? -eq 0 ]; then echo "ok" else echo "failed" fi TIMERPROC= else echo "no active timers..." fi } CleanUp() { KillSubs UnsetTimer exit } if [ $# -eq 1 ]; then STREAMSOURCE=$1 else echo -e "You must specify an online audio source to record from!" echo -e "USAGE: `basename $0` " exit 1 fi OUTFILE="smrsession_`date '+%m.%d.%Y-%T'`.mp3" TIMEDREC= echo " STREAMING MEDIA RECORDING SCRIPT" echo "This script uses mplayer to record media streams from an online source" echo "The recorded media stream from source [$STREAMSOURCE] for this session" echo "will be placed in the file [`pwd`/$OUTFILE]." echo " " echo "Do you want this recording to stop after a specific amount of time?" echo "CAUTION: If you do not specify a record time, this will continue to" echo "record until manually stopped or the connection is terminated!" select CHOICE2 in Yes No Cancel do case $CHOICE2 in Yes) TIMEDREC="true" echo -e "Enter the number of minutes to record stream: \c" read TIMEOUT ; TIMEOUT=$(($TIMEOUT*60)) ; TIMEOUT=$(($TIMEOUT+5)) ; echo "NOTE: Five seconds were added to allow for connect time" ; break ;; No) break ;; Cancel) exit ;; *) echo "Invalid option, $CHOICE2" esac done # main () trap CleanUp 1 2 3 9 15 trap AlarmCatcher 14 if [ -n "$TIMEDREC" ]; then SetTimer else TIMEOUT="indefinite number of" fi echo "Recording stream from $STREAMSOURCE for $TIMEOUT seconds..." mplayer "$STREAMSOURCE" -dumpstream -dumpfile "$OUTFILE" & if [ -n "$TIMEDREC" ]; then CHILDPROC="$CHILDPROC $!" wait $! UnsetTimer else wait $! fi echo "Finished recording from [$STREAMSOURCE] at `date '+%X %r'`" exit 0