fstream/client/broadcast-screen
2023-11-01 08:20:12 +01:00

76 lines
2.2 KiB
Bash
Executable File

#!/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