#! /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 # 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=7000 speed-preset=superfast key-int-max=15 ! rtph264pay ! rtpulpfecenc percentage=50 percentage-important=75 ! rtprtxqueue max-size-packets=1000 ! 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 ( while true; do gst-launch-1.0 alsasrc device=plughw:2,0 ! audioconvert ! audioresample ! opusenc ! rtpopuspay ! udpsink host=terminal2 port=5003 sleep 1 done ) & PIDS="$PIDS $!" # receive audio stream ( while true; do gst-launch-1.0 udpsrc port=5002 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