Skip to content

Instantly share code, notes, and snippets.

@socketsguru
Last active August 7, 2026 23:34
Show Gist options
  • Select an option

  • Save socketsguru/8a45d499d7965e2ae965200078a09ac6 to your computer and use it in GitHub Desktop.

Select an option

Save socketsguru/8a45d499d7965e2ae965200078a09ac6 to your computer and use it in GitHub Desktop.
alpha
#!/usr/bin/env bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
echo "==> 1/4. Instalando XFCE, xRDP, PipeWire y Node.js..."
sudo sed -i 's|http://us-east-1.ec2.archive.ubuntu.com/ubuntu|http://archive.ubuntu.com/ubuntu|g' /etc/apt/sources.list.d/ubuntu.sources
sudo apt update -qq
sudo apt install -y \
xfce4 xfce4-goodies ffmpeg libavcodec-extra dbus-x11 xrdp xorgxrdp xclip vlc \
pipewire pipewire-pulse wireplumber pulseaudio-utils pipewire-module-xrdp nodejs
echo "==> 2/4. Instalando Google Chrome y yt-dlp..."
wget -q -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install -y /tmp/chrome.deb && rm -f /tmp/chrome.deb
sudo wget -q -O /usr/local/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp
sudo chmod +x /usr/local/bin/yt-dlp
sudo tee /usr/local/bin/ytdl >/dev/null <<'EOF'
#!/usr/bin/env bash
yt-dlp \
--cookies-from-browser chrome \
--js-runtimes node \
-f "bv*[vcodec^=avc1]+ba[ext=m4a]/b[vcodec^=avc1]" \
--merge-output-format mp4 \
"$@"
EOF
sudo chmod +x /usr/local/bin/ytdl
echo "==> 3/4. Configurando xrdp y sesión..."
sudo sed -i 's/^allowed_users=.*/allowed_users=anybody/' /etc/X11/Xwrapper.config 2>/dev/null || echo "allowed_users=anybody" | sudo tee -a /etc/X11/Xwrapper.config >/dev/null
sudo usermod -aG ssl-cert xrdp
echo "xfce4-session" > "$HOME/.xsession"
chmod +x "$HOME/.xsession"
echo "==> 4/4. Iniciando servicios de sonido y xRDP..."
sudo loginctl enable-linger "$USER"
systemctl --user enable --now pipewire pipewire-pulse wireplumber 2>/dev/null || true
sudo systemctl enable --now xrdp
sudo systemctl restart xrdp
PUBLIC_IP=$(curl -s4 https://checkip.amazonaws.com 2>/dev/null || echo "NO_PUBLIC_IP")
echo
echo "============================================"
echo " INSTALACION COMPLETADA"
echo " Conectarse vía RDP a: ${PUBLIC_IP}"
echo " Comando de descarga: ytdl URL_YOUTUBE"
echo "============================================"
#!/usr/bin/env bash
set -euo pipefail
MEDIAMTX_VERSION="v1.18.1"
MEDIAMTX_DIR="/etc/mediamtx"
MEDIAMTX_BIN="/usr/local/bin/mediamtx"
echo "==> 1/5. Instalando MediaMTX ${MEDIAMTX_VERSION}"
cd /tmp
wget -q -O mediamtx.tar.gz \
"https://github.com/bluenviron/mediamtx/releases/download/${MEDIAMTX_VERSION}/mediamtx_${MEDIAMTX_VERSION}_linux_amd64.tar.gz"
tar xzf mediamtx.tar.gz
sudo mv mediamtx "${MEDIAMTX_BIN}"
sudo chmod +x "${MEDIAMTX_BIN}"
sudo mkdir -p "${MEDIAMTX_DIR}"
if [ ! -f "${MEDIAMTX_DIR}/mediamtx.yml" ]; then
sudo mv mediamtx.yml "${MEDIAMTX_DIR}/mediamtx.yml"
fi
echo "==> 2/5. Configurando MediaMTX"
if [ -f "${MEDIAMTX_DIR}/mediamtx.yml" ]; then
sudo cp "${MEDIAMTX_DIR}/mediamtx.yml" \
"${MEDIAMTX_DIR}/mediamtx.yml.$(date +%F-%H%M%S).backup"
sudo sed -i \
-e 's/^rtmp: true$/rtmp: false/' \
-e 's/^hls: true$/hls: false/' \
-e 's/^webrtc: true$/webrtc: false/' \
-e 's/^srt: true$/srt: false/' \
-e 's/^rtspTransports: \[udp, multicast, tcp\]$/rtspTransports: [tcp]/' \
"${MEDIAMTX_DIR}/mediamtx.yml"
fi
echo "==> 3/5. Creando servicio systemd"
sudo tee /etc/systemd/system/mediamtx.service >/dev/null <<'EOF'
[Unit]
Description=MediaMTX RTSP Server
After=network.target
[Service]
ExecStart=/usr/local/bin/mediamtx /etc/mediamtx/mediamtx.yml
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable mediamtx
sudo systemctl restart mediamtx
echo "==> 4/5. Creando comando stream"
sudo tee /usr/local/bin/stream >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
if [ $# -ne 1 ]; then
echo "Uso:"
echo " stream archivo.mp4"
exit 1
fi
FILE="$1"
if [ ! -f "$FILE" ]; then
echo "Archivo no encontrado:"
echo "$FILE"
exit 1
fi
PUBLIC_IP=$(curl -s4 https://checkip.amazonaws.com | tr -d '\n')
RTSP_URL="rtsp://${PUBLIC_IP}:8554/live"
VLC_WINDOWS="vlc ${RTSP_URL} --rtsp-tcp"
echo
echo "======================================"
echo " STREAMING ACTIVO"
echo
echo "Windows (VLC):"
echo " ${VLC_WINDOWS}"
echo
echo "======================================"
echo
# Copiar comando de Windows al portapapeles si hay display grafico
if command -v xclip >/dev/null 2>&1; then
echo "${VLC_WINDOWS}" | xclip -selection clipboard 2>/dev/null && \
echo "(Comando Windows copiado al portapapeles)" || \
echo "(No se pudo copiar al portapapeles)"
fi
ffmpeg \
-re \
-fflags +genpts \
-stream_loop -1 \
-i "$FILE" \
-c:v libx264 \
-preset ultrafast \
-tune zerolatency \
-c:a copy \
-f rtsp \
-rtsp_transport tcp \
rtsp://127.0.0.1:8554/live
EOF
sudo chmod +x /usr/local/bin/stream
echo "==> 5/5. Creando comando ytstream"
sudo tee /usr/local/bin/ytstream >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
if [ $# -ne 1 ]; then
echo "Uso:"
echo " ytstream URL_YOUTUBE"
exit 1
fi
URL="$1"
WORKDIR=$(mktemp -d /tmp/ytstream-XXXXXX)
cd "$WORKDIR"
echo
echo "Descargando temporalmente en:"
echo "$WORKDIR"
echo
ytdl "$URL"
VIDEO=$(find "$WORKDIR" -maxdepth 1 -type f -name "*.mp4" | head -n 1)
if [ -z "$VIDEO" ]; then
echo "No se encontró MP4 después de la descarga"
exit 1
fi
echo
echo "Iniciando streaming:"
echo "$VIDEO"
echo
stream "$VIDEO"
EOF
sudo chmod +x /usr/local/bin/ytstream
echo
echo "============================================"
echo " STREAMING INSTALADO"
echo
echo "Comandos:"
echo
echo " stream archivo.mp4"
echo " ytstream URL_YOUTUBE"
echo
echo "Servicio:"
echo
echo " systemctl status mediamtx"
echo "============================================"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment