Skip to content

Instantly share code, notes, and snippets.

@solexious
Created April 4, 2014 17:39
Show Gist options
  • Save solexious/9979387 to your computer and use it in GitHub Desktop.
Save solexious/9979387 to your computer and use it in GitHub Desktop.
#!/bin/bash
#
# IMPORTANT >>>>>You need to get port, ip and feed_id right<<<<<
port=9999
ip=127.0.0.1
if [ $# -lt 1 ] ; then
echo parameter error. Usage $0 feed
exit 1
fi
# Set video feed and audio feed id
feed_id=$1
audio_feed_id=$1
# Check for SM variable and the snowmix and gstreamer settings
if [ X$SM = X -o ! -f $SM/scripts/gstreamer-settings -o ! -f $SM/scripts/snowmix-settings ] ; then
echo "You need to se the environment variable SM to the base of the Snowmix directory"
exit 1
fi
# Load the Snowmix and GStreamer settings
. $SM/scripts/gstreamer-settings
. $SM/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="rtspsrc location=rtsp://admin:123456@10.0.0.51:554/mpeg4 ! $decodebin name=decoder "
# SRC="filesrc location=../test/LES_TDS_launch.mp4 ! $decodebin name=decoder "
SHMSIZE='shm-size=40000000'
SHMOPTION="wait-for-connection=0"
SHMSINK1="shmsink socket-path=$feed_control_pipe $SHMSIZE $SHMOPTION"
#SCALE="$VIDEOCONVERT ! videoscale ! $VIDEOCONVERT"
SCALE="videoscale ! $VIDEOCONVERT"
AUDIOFORMAT="$AUDIOS16LE"', rate=(int)'$feed_rate', channels=(int)'$feed_channels
VIDEOFORMAT=$VIDEOBGRA', width=(int)'$feed_width', height=(int)'$feed_height', framerate=(fraction)'$ratefraction
while true ; do
# Remove the named pipe if it exist
rm -f $feed_control_pipe
snowmix=`ps c |cut -c28-34 | grep snowmix | head -1`
if [ X$snowmix != X ] ; then
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 '$feed_id
$gstlaunch -q $SRC ! \
videorate ! $SCALE ! $VIDEOFORMAT ! $SHMSINK1 decoder. \
! queue ! audioconvert ! audioresample ! $AUDIOFORMAT ! fdsink fd=1 sync=true
) | nc 127.0.0.1 $port
else
$gstlaunch -q $SRC ! \
videorate ! \
$SCALE ! \
$VIDEOFORMAT ! \
$SHMSINK1
fi
else
echo Snowmix is not running. Quitting $0
exit 1
fi
sleep 2
done
exit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment