54 lines
1.3 KiB
Bash
Executable File
54 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# 유튜브 재생 (자비스 메인 프로세스 밖 — fork 데드락 방지)
|
|
# 사용: jarvis_yt_play.sh "검색어" ["https://youtube.com/watch?v=..."]
|
|
set -euo pipefail
|
|
|
|
QUERY="${1:-}"
|
|
WATCH_URL="${2:-}"
|
|
BASE="/home/hoon/projects/jarvis"
|
|
YT="${BASE}/jarvis_env/bin/yt-dlp"
|
|
LOG="${BASE}/jarvis_logs/yt.log"
|
|
PIDFILE="${BASE}/jarvis_logs/media.pid"
|
|
|
|
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >>"$LOG"; }
|
|
|
|
if [[ -z "$QUERY" ]]; then
|
|
log "빈 검색어"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -f "$PIDFILE" ]]; then
|
|
old_pid="$(cat "$PIDFILE" 2>/dev/null || true)"
|
|
if [[ -n "$old_pid" ]]; then
|
|
kill "$old_pid" 2>/dev/null || true
|
|
sleep 0.2
|
|
kill -9 "$old_pid" 2>/dev/null || true
|
|
fi
|
|
rm -f "$PIDFILE"
|
|
fi
|
|
|
|
log "검색: $QUERY"
|
|
|
|
URL=""
|
|
if [[ -x "$YT" ]]; then
|
|
if [[ -n "$WATCH_URL" && "$WATCH_URL" =~ ^https?:// ]]; then
|
|
log "API/사전확정 URL: $WATCH_URL"
|
|
URL="$("$YT" -f bestaudio/best --no-playlist -g "$WATCH_URL" 2>>"$LOG" | head -1 || true)"
|
|
else
|
|
URL="$("$YT" -f bestaudio/best --no-playlist -g "ytsearch1:${QUERY}" 2>>"$LOG" | head -1 || true)"
|
|
fi
|
|
fi
|
|
|
|
if [[ ! "$URL" =~ ^https?:// ]]; then
|
|
log "URL 실패: $QUERY"
|
|
exit 1
|
|
fi
|
|
|
|
log "재생 시작: $QUERY"
|
|
|
|
cvlc --play-and-exit --no-video --quiet --no-repeat "$URL" &
|
|
echo $! >"$PIDFILE"
|
|
wait
|
|
rm -f "$PIDFILE"
|
|
log "재생 종료: $QUERY"
|