#!/usr/bin/env bash cd "$(dirname "$(realpath "$BASH_SOURCE")")" function getValue() { var="$1" if ! [ "${!var}" == "" ]; then return fi if [ "$3" == "fail" ]; then echo "ERROR: $1 is not defined." exit 1 fi declare -g "$1"="$2" } # USER SETTINGS getValue fstream_profile "profile_broadcast-screen.sh" source "$fstream_profile" getValue fstream_resolution "480" getValue fstream_framerate "15" getValue fstream_bitrate "1M" getValue fstream_264profile "ultrafast" getValue fstream_ip "fier.me:61920" fail getValue fstream_user "user" fail getValue fstream_password "123" fail getValue fstream_channel "default" getValue fstream_channelpass "" getValue fstream_python "python3" getValue fstream_aespass "" getValue fstream_aesbuffer "4096" getValue fstream_buffer "$((fstream_aesbuffer + 16))" getValue fstream_ssl "0" getValue fstream_ssl_ignoreCert "0" fstream_encodercmd=( ffmpeg # INPUT -strict experimental -avioflags direct -thread_queue_size 1 -hwaccel auto -probesize 32 -fflags nobuffer -flags low_delay -flags2 fast # delay hack -f x11grab -framerate "$fstream_framerate" -i "$DISPLAY" # linux #-f gdigrab -framerate "$fstream_framerate" -i desktop # windows -vf scale=-2:$fstream_resolution # ENCODING -max_probe_packets 0 -max_delay 0 -flags2 fast # delay hack -c:v libx264 -pix_fmt yuv420p -preset $fstream_264profile -tune zerolatency -x264-params "nal-hrd=cbr" -b:v $fstream_bitrate -minrate $fstream_bitrate -maxrate $fstream_bitrate -bufsize $fstream_bitrate*2 -x264opts intra-refresh=1 # delay hack # OUTPUT -flags2 fast # delay hack -f mpegts -flags2 fast -muxdelay 0 -muxpreload 0 -max_delay 0 -flush_packets 1 # delay hack - ) fstream_clientarg="broadcast,user=$fstream_user,user-password=$fstream_password,channel=$fstream_channel,channel-password=$fstream_channelpass" if [ "$fstream_buffer" -gt "0" ]; then fstream_clientarg="$fstream_clientarg,bufsize=$fstream_buffer" fi fstream_clientcmd=( "$fstream_python" fstream.py "$fstream_ip" "$fstream_clientarg" ) if [ "$fstream_aespass" == "" ]; then "${fstream_encodercmd[@]}" | "${fstream_clientcmd[@]}" else "${fstream_encodercmd[@]}" | fstream_aespass="$fstream_aespass" fstream_aesbuffer="$fstream_aesbuffer" "$fstream_python" fstream-util-pipe_to_aes.py | "${fstream_clientcmd[@]}" fi