- #!/bin/sh
- # Receive RTP video and audio streams
- set -e
- CAMIP=${CAMIP:-$1} # origin host - default: use multicast group
- VCOUNT=${VCOUNT:-$2} # number of video stream(s) to display - default: 1
- ACOUNT=${ACOUNT:-$3} # number of audio stream(s) to play - default: 0
- VIDEO=${VIDEO:-$4} # H264 VP8 RAW - default: H264
- AUDIO=${AUDIO:-$5} # AMR - default: AMR
- set -u
- # set multicast groups (also for recorder host) if camera host is wildcard
- [ -n "$CAMIP" ] || RECMIP=239.255.0.1
- [ -n "$CAMIP" ] || CAMMIP=239.255.0.2
- RECHOST="${RECMIP:+address=$RECMIP auto-multicast=true}"
- CAMHOST="${CAMIP:+host=$CAMIP}${CAMMIP:+host=$CAMMIP auto-multicast=true}"
- case "$VIDEO" in
- H264|'')
- VCAPS=application/x-rtp,media=video,clock-rate=90000,payload=96,encoding-name=H264
- VDEC="rtph264depay ! avdec_h264"
- ;;
- VP8)
- VCAPS=application/x-rtp,media=video,clock-rate=90000,payload=96,encoding-name=VP8
- VDEC="rtpvp8depay ! vp8dec"
- ;;
- RAW)
- VCAPS=application/x-rtp,media=video,clock-rate=90000,encoding-name=RAW,sampling=YCbCr-4:2:0,depth="(string)8",width="(string)432",height="(string)240",colorimetry=BT601-5,payload=96,ssrc="(uint)2753200816",timestamp-offset="(uint)2145434971",seqnum-offset="(uint)15312",a-framerate="(string)30"
- VDEC="rtpvrawdepay ! videoconvert ! queue"
- ;;
- esac
- case "$AUDIO" in
- AMR|'')
- ACAPS=application/x-rtp,media=audio,clock-rate=8000,encoding-name=AMR,encoding-params=1,octet-align=1
- ADEC="rtpamrdepay ! amrnbdec"
- ;;
- esac
- stream() {
- ID=$1
- CAPS=$2
- PLAYBIN=$3
- echo \
- udpsrc port=$((5000+ID-1)) $RECHOST caps=\""$CAPS"\" \
- ! rtpbin."recv_rtp_sink_$ID" rtpbin. \
- ! $PLAYBIN \
- udpsrc port=$((5010+ID-1)) $RECHOST \
- ! rtpbin."recv_rtcp_sink_$ID" \
- rtpbin."send_rtcp_src_$ID" \
- ! udpsink port=$((5020+ID-1)) $CAMHOST sync=false async=false
- }
- gst-launch-1.0 -v \
- rtpbin name=rtpbin \
- $(for i in $(seq "${VCOUNT:-1}"); do stream "$i" "$VCAPS" "$VDEC ! autovideosink"; done) \
- $(for j in $(seq "${ACOUNT:-0}"); do stream $((VCOUNT+j)) "$ACAPS" "$ADEC ! autoaudiosink"; done)
|