--- /dev/null
+#!/usr/bin/env bash
+
+set -e
+
+# Default TeleCaster video parameters
+
+# v4l2
+V4L2_ID=0
+V4L2_ZOOM=140
+V4L2_SHARPNESS=128
+
+# C920
+#VIDEO_WIDTH=864
+#VIDEO_HEIGHT=480
+#VIDEO_FRAMERATE=24
+
+# C922
+VIDEO_WIDTH=864
+VIDEO_HEIGHT=480
+VIDEO_FRAMERATE=24
+VIDEO_FLIP=none
+
+# Audio
+AUDIO_CHANNELS=2
+AUDIO_OPUS_BITRATE=96000
+AUDIO_GAIN_PRE=2.5
+AUDIO_GAIN_POST=1.5
+
+source /etc/telecaster/telecaster.conf
+
+# V4L2 setup
+v4l2-ctl -d $V4L2_ID -c power_line_frequency=1
+v4l2-ctl -d $V4L2_ID -c zoom_absolute=$V4L2_ZOOM
+v4l2-ctl -d $V4L2_ID -c focus_auto=0
+v4l2-ctl -d $V4L2_ID -c focus_absolute=1
+v4l2-ctl -d $V4L2_ID -c sharpness=$V4L2_SHARPNESS
+
+# GST launch
+gst-launch-1.0 v4l2src device=/dev/video$V4L2_ID ! video/x-h264, width=$VIDEO_WIDTH, height=$VIDEO_HEIGHT, framerate=$VIDEO_FRAMERATE/1 \
+ ! queue ! avdec_h264 \
+ ! queue ! videoflip method=$VIDEO_FLIP \
+ ! queue ! videoconvert \
+ ! queue ! vp8enc threads=4 deadline=2 \
+ ! queue ! muxout. \
+ jackaudiosrc connect=2 ! audio/x-raw, format=F32LE, channels=$AUDIO_CHANNELS \
+ ! queue ! audiocheblimit mode=high-pass cutoff=120 poles=4 \
+ ! queue ! volume volume=$AUDIO_GAIN_PRE \
+ ! queue ! audiodynamic characteristics=soft-knee mode=compressor threshold=0.125 ratio=0.125 \
+ ! queue ! volume volume=$AUDIO_GAIN_POST \
+ ! queue ! audiodynamic characteristics=hard-knee mode=compressor threshold=0.95 ratio=0.001 \
+ ! queue ! audioconvert \
+ ! queue ! opusenc bitrate=$AUDIO_OPUS_BITRATE \
+ ! queue ! muxout. \
+ webmmux streamable=true name=muxout \
+ ! queue ! shout2send ip=127.0.0.1 port=8000 password=source2parisson mount=telecaster_live.webm
+ > /dev/null
source /etc/telecaster/telecaster.conf
-# V4L2 setup
-if [ ! -z "${V4L2_ZOOM-}" ]; then
-v4l2-ctl -d $V4L2_ID_1 -c power_line_frequency=1
-v4l2-ctl -d $V4L2_ID_1 -c zoom_absolute=$V4L2_ZOOM
-v4l2-ctl -d $V4L2_ID_1 -c focus_auto=0
-v4l2-ctl -d $V4L2_ID_1 -c focus_absolute=1
-v4l2-ctl -d $V4L2_ID_1 -c sharpness=$V4L2_SHARPNESS
+# VIDEO setup
+if [ ! -z "${VIDEO_ZOOM_1-}" ]; then
+v4l2-ctl -d $VIDEO_ID_1 -c power_line_frequency=1
+v4l2-ctl -d $VIDEO_ID_1 -c zoom_absolute=$VIDEO_ZOOM_1
+v4l2-ctl -d $VIDEO_ID_1 -c focus_auto=0
+v4l2-ctl -d $VIDEO_ID_1 -c focus_absolute=1
+v4l2-ctl -d $VIDEO_ID_1 -c sharpness=$VIDEO_SHARPNESS_1
fi
-gst-launch-1.0 v4l2src device=/dev/video$V4L2_ID_1 ! $V4L2_FORMAT, width=$VIDEO_WIDTH, height=$VIDEO_HEIGHT, framerate=$VIDEO_FRAMERATE/1 \
- ! queue ! $V4L2_DEC \
- ! queue ! videoflip method=$VIDEO_FLIP \
+gst-launch-1.0 v4l2src device=/dev/video$VIDEO_ID_1 ! $VIDEO_FORMAT_1, width=$VIDEO_WIDTH_1, height=$VIDEO_HEIGHT_1, framerate=$VIDEO_FRAMERATE_1/1 \
+ ! queue ! $VIDEO_DEC_1 \
+ ! queue ! videoflip method=$VIDEO_FLIP_1 \
! queue ! videoconvert \
! queue ! vp8enc threads=4 deadline=2 \
! queue ! muxout. \
! queue ! opusenc bitrate=$AUDIO_OPUS_BITRATE \
! queue ! muxout. \
webmmux streamable=true name=muxout \
- ! queue ! shout2send ip=127.0.0.1 port=8000 password=source2parisson mount=telecaster_live_$V4L2_ID_1.webm
+ ! queue ! shout2send ip=127.0.0.1 port=8000 password=source2parisson mount=telecaster_live_$VIDEO_ID_1.webm
> /dev/null
-# V4L2 setup
-if [ ! -z "${V4L2_ZOOM-}" ]; then
-v4l2-ctl -d $V4L2_ID_2 -c power_line_frequency=1
-v4l2-ctl -d $V4L2_ID_2 -c zoom_absolute=$V4L2_ZOOM
-v4l2-ctl -d $V4L2_ID_2 -c focus_auto=0
-v4l2-ctl -d $V4L2_ID_2 -c focus_absolute=1
-v4l2-ctl -d $V4L2_ID_2 -c sharpness=$V4L2_SHARPNESS
+# VIDEO setup
+if [ ! -z "${VIDEO_ZOOM_2-}" ]; then
+v4l2-ctl -d $VIDEO_ID_2 -c power_line_frequency=1
+v4l2-ctl -d $VIDEO_ID_2 -c zoom_absolute=$VIDEO_ZOOM_2
+v4l2-ctl -d $VIDEO_ID_2 -c focus_auto=0
+v4l2-ctl -d $VIDEO_ID_2 -c focus_absolute=1
+v4l2-ctl -d $VIDEO_ID_2 -c sharpness=$VIDEO_SHARPNESS_2
fi
-gst-launch-1.0 v4l2src device=/dev/video$V4L2_ID_2 ! $V4L2_FORMAT, width=$VIDEO_WIDTH, height=$VIDEO_HEIGHT, framerate=$VIDEO_FRAMERATE/1 \
- ! queue ! $V4L2_DEC \
- ! queue ! videoflip method=$VIDEO_FLIP \
+
+gst-launch-1.0 v4l2src device=/dev/video$VIDEO_ID_2 ! $VIDEO_FORMAT_2, width=$VIDEO_WIDTH_2, height=$VIDEO_HEIGHT_2, framerate=$VIDEO_FRAMERATE_2/1 \
+ ! queue ! $VIDEO_DEC_2 \
+ ! queue ! videoflip method=$VIDEO_FLIP_2 \
! queue ! videoconvert \
! queue ! vp8enc threads=4 deadline=2 \
! queue ! muxout. \
! queue ! opusenc bitrate=$AUDIO_OPUS_BITRATE \
! queue ! muxout. \
webmmux streamable=true name=muxout \
- ! queue ! shout2send ip=127.0.0.1 port=8000 password=source2parisson mount=telecaster_live_$V4L2_ID_2.webm
+ ! queue ! shout2send ip=127.0.0.1 port=8000 password=source2parisson mount=telecaster_live_$VIDEO_ID_2.webm
> /dev/null
-done