fix(media): yt-dlp ins Runtime-Image + Fallback bei ytdl HTTP 410/403; sollte YouTube-Streams stabilisieren

This commit is contained in:
vibe-bot 2025-08-08 16:35:20 +02:00
parent cfc3f899a2
commit 9e12f2a208
2 changed files with 14 additions and 2 deletions

View file

@ -26,7 +26,10 @@ ENV NODE_ENV=production
ENV PORT=8080 ENV PORT=8080
ENV SOUNDS_DIR=/data/sounds ENV SOUNDS_DIR=/data/sounds
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y ffmpeg curl ca-certificates && rm -rf /var/lib/apt/lists/* \
&& curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp \
&& chmod a+rx /usr/local/bin/yt-dlp \
&& yt-dlp --version || true
COPY --from=server-build /app/server/dist ./server/dist COPY --from=server-build /app/server/dist ./server/dist
COPY --from=server-build /app/server/node_modules ./server/node_modules COPY --from=server-build /app/server/node_modules ./server/node_modules

View file

@ -625,7 +625,16 @@ app.post('/api/play-url', async (req: Request, res: Response) => {
// Audio-Stream besorgen // Audio-Stream besorgen
let stream: any; let stream: any;
if (ytdl.validateURL(url)) { if (ytdl.validateURL(url)) {
stream = ytdl(url, { filter: 'audioonly', quality: 'highestaudio', highWaterMark: 1 << 25 }); // Nutze ytdl-core, fallback auf yt-dlp bei HTTP Fehlern (410/403 etc.)
try {
stream = ytdl(url, { filter: 'audioonly', quality: 'highestaudio', highWaterMark: 1 << 25 });
stream.on('error', (e: any) => { throw e; });
} catch (e) {
console.warn('ytdl-core fehlgeschlagen, versuche yt-dlp:', e);
const yt = child_process.spawn('yt-dlp', ['-f', 'bestaudio', '-o', '-', url]);
yt.on('error', (err) => console.error('yt-dlp spawn error:', err));
stream = yt.stdout;
}
} else { } else {
// Fallback via yt-dlp, benötigt binary im Image/Host // Fallback via yt-dlp, benötigt binary im Image/Host
// wir nutzen stdout mit ffmpeg pipe // wir nutzen stdout mit ffmpeg pipe