|
|
@@ -0,0 +1,99 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+SNOWMIX=/usr/local/lib/Snowmix-0.5.1
|
|
|
+
|
|
|
+if [ "X$SNOWMIX_PORT" = X ] ; then export SNOWMIX_PORT=9999 ;fi
|
|
|
+if [ "X$SNOWMIX_IP" = X ] ; then export SNOWMIX_IP=127.0.0.1 ;fi
|
|
|
+
|
|
|
+if [ $# -lt 1 ] ; then
|
|
|
+ echo -e "Missing argument \nUsage $0 <input file>"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+# Set video feed and audio feed id
|
|
|
+feed_id=2
|
|
|
+audio_feed_id=2
|
|
|
+source="$1"
|
|
|
+
|
|
|
+if [ ! -f "$source" ]; then
|
|
|
+ echo "'$source' is not a file or whatever"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+# Check for SNOWMIX variable and the snowmix and gstreamer settings
|
|
|
+if [ ! -f "$SNOWMIX/scripts/gstreamer-settings" -o ! -f "$SNOWMIX/scripts/snowmix-settings" ] ; then
|
|
|
+ echo "Can not find the the file scripts/gstreamer-settings or scripts/snowmix-settings"
|
|
|
+ echo "in the directory set by the enviroment variable SNOWMIX"
|
|
|
+ echo "You need to se the environment variable SNOWMIX to the base of the Snowmix installed directory"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+# Load the Snowmix and GStreamer settings
|
|
|
+. $SNOWMIX/scripts/gstreamer-settings
|
|
|
+. $SNOWMIX/scripts/snowmix-settings
|
|
|
+# This will set
|
|
|
+# a) feed_rate
|
|
|
+# b) feed_channels
|
|
|
+# c) feed_control_pipe
|
|
|
+# d) feed_width
|
|
|
+# e) feed_height
|
|
|
+# f) ctrsocket
|
|
|
+# g) system_width
|
|
|
+# h) system_height
|
|
|
+# i) ratefraction
|
|
|
+# j) snowmix
|
|
|
+# k) channels
|
|
|
+# l) rate
|
|
|
+
|
|
|
+
|
|
|
+if [ X$feed_control_pipe = X -o X$system_width = X -o X$system_height = X ] ; then
|
|
|
+ echo Failed to get control pipe or width or height from running snowmix
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+#echo "Snowmix Geometry : $system_width x $system_height"
|
|
|
+#echo "Snowmix control socket : $ctrsocket"
|
|
|
+echo "Video feed geometry : $feed_width x $feed_height"
|
|
|
+echo "Video control socket : $feed_control_pipe"
|
|
|
+echo "Video and audio feed id : $feed_id $audio_feed_id"
|
|
|
+
|
|
|
+if [ X$feed_rate = X -o X$feed_channels = X ] ; then
|
|
|
+ echo Failed to get rate or channels from running snowmix
|
|
|
+ echo Disabling audio
|
|
|
+else
|
|
|
+ echo "Audio rate and channels : $feed_rate $feed_channels"
|
|
|
+fi
|
|
|
+
|
|
|
+
|
|
|
+SRC="filesrc location=$source ! $decodebin name=decoder ! $VIDEOCONVERT "
|
|
|
+SHMSIZE='shm-size='`echo "$feed_width * $feed_height * 4 * 26"|bc`
|
|
|
+SHMOPTION="wait-for-connection=1 sync=true"
|
|
|
+SHMSINK1="shmsink socket-path=$feed_control_pipe $SHMSIZE $SHMOPTION"
|
|
|
+#SCALE="$VIDEOCONVERT ! videoscale ! $VIDEOCONVERT"
|
|
|
+SCALE="videoscale ! $VIDEOCONVERT"
|
|
|
+AUDIOFORMAT="$AUDIOS16LE"', rate='$feed_rate', channels='$feed_channels
|
|
|
+VIDEOFORMAT=$VIDEOBGRA', width='$feed_width', height='$feed_height', framerate='$ratefraction
|
|
|
+VIDEOFORMAT=$VIDEOBGRA', width='$feed_width', height='$feed_height
|
|
|
+
|
|
|
+rm -f $feed_control_pipe
|
|
|
+
|
|
|
+if [ X$feed_rate != X -a X$feed_channels != X ] ; then
|
|
|
+ echo $gstlaunch -q $SRC ! \
|
|
|
+ videorate ! $SCALE ! $VIDEOFORMAT ! $SHMSINK1 decoder. \
|
|
|
+ ! queue ! audioconvert ! audioresample ! $AUDIOFORMAT ! fdsink fd=1 sync=true
|
|
|
+ (
|
|
|
+ echo 'audio feed ctr isaudio '$audio_feed_id
|
|
|
+ $gstlaunch -v $SRC ! \
|
|
|
+ videorate ! $SCALE ! $VIDEOFORMAT ! $SHMSINK1 decoder. \
|
|
|
+ ! queue ! audioconvert ! audioresample ! $AUDIOFORMAT ! fdsink fd=3 sync=true 3>&1 1>&2
|
|
|
+ ) | nc $SNOWMIX_IP $SNOWMIX_PORT
|
|
|
+else
|
|
|
+ $gstlaunch -e -q $SRC ! \
|
|
|
+ $SCALE ! \
|
|
|
+ $VIDEOFORMAT ! \
|
|
|
+ $SHMSINK1
|
|
|
+ $gstlaunch -e -q $SRC ! \
|
|
|
+ $SCALE ! \
|
|
|
+ $VIDEOFORMAT ! \
|
|
|
+ $SHMSINK1
|
|
|
+fi
|