diff --git a/apps/api-daemon/src/capture/streamIngest.ts b/apps/api-daemon/src/capture/streamIngest.ts index 5c73632..bf1ca15 100644 --- a/apps/api-daemon/src/capture/streamIngest.ts +++ b/apps/api-daemon/src/capture/streamIngest.ts @@ -71,9 +71,11 @@ async function runCapture(job: Job): Promise { console.log(`[stream-ingest] starting capture for session ${sessionId}: ${youtubeUrl}`); - const ytdlp = spawn("yt-dlp", ["-f", "best", "-o", "-", youtubeUrl], { - stdio: ["ignore", "pipe", "pipe"], - }); + const ytdlp = spawn( + "yt-dlp", + ["--extractor-args", "youtube:player_client=android", "-f", "best", "-o", "-", youtubeUrl], + { stdio: ["ignore", "pipe", "pipe"] }, + ); const ffmpeg = spawn( "ffmpeg", diff --git a/apps/api-daemon/src/youtubePolling.ts b/apps/api-daemon/src/youtubePolling.ts index 6ad6c12..1f401f2 100644 --- a/apps/api-daemon/src/youtubePolling.ts +++ b/apps/api-daemon/src/youtubePolling.ts @@ -28,7 +28,13 @@ async function findLiveVideoId(channelId: string): Promise { try { const { stdout } = await execFileAsync( "yt-dlp", - ["--simulate", "--no-warnings", "--print", "%(id)s", liveUrl], + [ + "--simulate", + "--no-warnings", + "--extractor-args", "youtube:player_client=android", + "--print", "%(id)s", + liveUrl, + ], { timeout: 20_000 }, ); lastPollErrors.delete(channelId);