[1] 재생 중 끊김(~55초) 해결 시도 — 전부 실패
- poToken 정상 주입 + 프로덕션 동일 설정 : 55초 끊김 동일
- 클라이언트 WEB 단독(SABR 경로 강제) : 55초 끊김 동일(decode 오류)
- 프록시(.4:3128) 제거 : 55초 끊김 동일
원인: 첫 청크 재생 후 '이어받기' 요청이 실패(정적 경로 403 / SABR 경로 decode).
feat/sabr-support 는 열린 PR #229, 마지막 커밋 2026-07-27 로 미병합 진행 중 기능.
=> 우리 쪽 설정으로 고칠 수 없음. SABR 직결 보류 확정.
[2] 새 방식: yt-dlp 를 '상주 라이브러리'로 호출하는 리졸버(프로토타입 첨부)
- zipapp(/usr/local/bin/yt-dlp) 을 sys.path 에 넣어 import, YoutubeDL 인스턴스 1회 생성
- 매 요청 프로세스 기동(0.40s) 제거 + player_client=default 단독
- 실패 시 기존 subprocess 경로로 자동 폴백(안전)
리졸브 실측: 1.58~2.30s (기존 subprocess 3곡 평균 4.2~4.7s)
재생 검증(프로덕션 Lavalink .6 + 이 리졸버):
일반곡 2656ms / 해외곡 2968ms / 직접URL 1900ms / 곡전환 성공
90초 장시간: 85초 진행, 끊김 0/17 ← SABR(55초 실패) 대비 안정
프로덕션(리졸버 8779, Lavalink, master)은 변경하지 않음. 테스트는 8780 포트로만 수행.
googlevideo 재생 403(스트림 거절)은 Lavalink youtube-plugin에 유효한
poToken/visitorData가 없어서 발생. 봇이 노드 ready 시점과 2시간 주기로
poToken을 생성해 Lavalink의 POST /youtube 엔드포인트에 주입한다.
- scripts/potoken-refresh.mjs: youtubei.js+bgutils-js+jsdom로 생성 후 주입 (독립 ESM 프로세스)
- LavalinkManager: ready 이벤트 + 2h 인터벌로 자식 프로세스 실행
- deps: bgutils-js 3.2.0, jsdom, youtubei.js 추가 / Docker base node:22-alpine
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>