Last active
August 7, 2026 23:34
-
-
Save socketsguru/8a45d499d7965e2ae965200078a09ac6 to your computer and use it in GitHub Desktop.
alpha
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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 "============================================" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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