#! /bin/bash trap do_exit INT PIDS="" do_exit() { kill $PIDS >/dev/null 2>&1 sleep 10 kill -9 $PIDS >/dev/null 2>&1 pkill -9 gst-launch-1.0 } v4l2-ctl -d /dev/video0 --set-ctrl=power_line_frequency=1 --set-ctrl=backlight_compensation=1 # provide video stream ( while true; do gst-launch-1.0 -e rtpbin name=b rtp-profile=avpf uvch264src device=/dev/video0 name=src auto-start=true \ src.vidsrc ! video/x-raw,framerate=30/1,profile=high ! videoscale ! video/x-raw,width=1920,height=1080 ! videoconvert ! x264enc tune=zerolatency bitrate=5000 speed-preset=superfast psy-tune=film key-int-max=15 ! rtph264pay ! rtpulpfecenc percentage=50 percentage-important=75 ! rtprtxqueue max-size-packets=5000 ! b.send_rtp_sink_0 \ b.send_rtp_src_0 ! udpsink host=terminal1 port=5001 \ udpsrc address=:: port=5002 ! b.recv_rtcp_sink_0 \ b.send_rtcp_src_0 ! udpsink host=terminal1 port=5003 sync=false async=false sleep 1 done ) & PIDS="$PIDS $!" # send audio stream amixer -c2 sset 'Mic' 100% ( while true; do gst-launch-1.0 alsasrc device=plughw:2,0 ! audioconvert ! audioresample ! opusenc ! rtpopuspay ! udpsink host=terminal1 port=5008 sleep 1 done ) & PIDS="$PIDS $!" # receive audio stream amixer -c1 sset 'Speaker' 100% ( while true; do gst-launch-1.0 udpsrc address=:: port=5007 caps="application/x-rtp" ! rtpjitterbuffer latency=20 do-lost=True ! rtpopusdepay ! opusdec plc=true ! alsasink device=hw:1 sleep 1 done ) & PIDS="$PIDS $!" wait $PIDS