Monorepo for Aesthetic.Computer aesthetic.computer
at main 52 lines 1.3 kB view raw
1#!/bin/bash 2set -e 3 4XVFB_RESOLUTION="${XVFB_RESOLUTION:-320x240x24}" 5DISPLAY="${DISPLAY:-:1}" 6CHROME_URL="https://aesthetic.computer" 7OUTPUT_URL="rtmp://localhost/live/test" 8 9cleanup() { 10 pkill -TERM chromium-browser || true 11 pkill -TERM ffmpeg || true 12 pkill -TERM Xvfb || true 13 pulseaudio --kill || true 14} 15trap cleanup SIGINT SIGTERM 16 17echo "Starting Xvfb..." 18Xvfb "$DISPLAY" -screen 0 "$XVFB_RESOLUTION" -ac & 19sleep 2 20 21echo "Starting PulseAudio..." 22pulseaudio --start --exit-idle-time=-1 --log-level=error 23sleep 2 24 25echo "Loading null sink..." 26pactl load-module module-null-sink sink_name=dummy_sink 27pactl set-default-sink dummy_sink 28sleep 2 29 30echo "Starting nginx RTMP server..." 31/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 32 33echo "Launching Chromium..." 34chromium-browser \ 35 --no-sandbox \ 36 --window-size=320,240 "$CHROME_URL" \ 37 --disable-infobars \ 38 --no-first-run \ 39 --no-default-browser-check \ 40 --disable-dev-shm-usage \ 41 --remote-debugging-port=9222 & 42 43sleep 5 44 45echo "Starting ffmpeg stream..." 46ffmpeg -y \ 47 -f x11grab -video_size 320x240 -i "$DISPLAY" \ 48 -f pulse -ac 2 -i default \ 49 -c:v libx264 -preset ultrafast -maxrate 800k -bufsize 400k \ 50 -g 60 -r 30 -pix_fmt yuv420p \ 51 -c:a aac -b:a 128k -ar 44100 \ 52 -f flv "$OUTPUT_URL"