35 lines
1.3 KiB
Bash
Executable File
35 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# stream - Stream video when called from crontab
|
|
# Usage: stream <tag>
|
|
# The tag refers to video files in ./web/streams without the
|
|
# '.mp4', that should have been re-encoded by `encode`. The tag has no path
|
|
# information, has the "streamkey" at the start before the first dot (there
|
|
# has to be a dot!) and the "target" at the very end, after the last '@'.
|
|
# Required: ffmpeg coreutils(tail rm)
|
|
|
|
|
|
_=$(readlink -f -- "${BASH_SOURCE:-$0}") repopath=${_%/*}
|
|
log=$repopath/process.log
|
|
in=$repopath/web/streams/$1.mp4 key=${1%%.*} target=${1##*@}
|
|
case $target in
|
|
Facebook) rtmp=rtmps://live-api-s.facebook.com:443/rtmp/$key ;;
|
|
YouTube) rtmp=rtmp://a.rtmp.youtube.com/live2/$key ;;
|
|
RestreamSG) rtmp=rtmp://singapore.restream.io/live/$key ;;
|
|
*) rtmp=rtmp://live.restream.io/live/$key
|
|
esac
|
|
source "$repopath/vars" # I:savedir
|
|
|
|
# Stream, log it, and remove all files if successful
|
|
set -o pipefail # to get ffmpeg's returncode
|
|
if ffmpeg -re -y -i "$in" -c:v copy -c:a copy -f flv "$rtmp" 2>&1 |tail -n 20 >"$in.log"
|
|
then
|
|
rm "$in.log" "${in%.mp4}"
|
|
[[ $savedir && -d $savedir ]] && mv "$in" "$savedir" || rm "$in"
|
|
else
|
|
echo "Error while streaming $1" >>"$log"
|
|
fi
|
|
|
|
# In any case, comment-out the crontab entry so it's not waiting for next year
|
|
crontab -l| sed "/$1/ s/^/#/" |crontab -
|