diff --git a/src/audio/player.test.ts b/src/audio/player.test.ts index 9c85d31..e3aca27 100644 --- a/src/audio/player.test.ts +++ b/src/audio/player.test.ts @@ -55,13 +55,13 @@ describe("buildFfmpegArgs", () => { expect(idx).toBeLessThan(args.indexOf("-i")); // input options must precede -i }); - it("inserts -ss before -i when seekSeconds > 0", () => { + it("inserts -ss after -i when seekSeconds > 0", () => { const args = buildFfmpegArgs("https://example.com/song.mp3", 42); const ssIdx = args.indexOf("-ss"); const iIdx = args.indexOf("-i"); expect(ssIdx).toBeGreaterThan(-1); expect(args[ssIdx + 1]).toBe("42"); - expect(ssIdx).toBeLessThan(iIdx); + expect(ssIdx).toBeGreaterThan(iIdx); }); it("does not insert -ss when seekSeconds is 0", () => { diff --git a/src/audio/player.ts b/src/audio/player.ts index 888bd11..a47c722 100644 --- a/src/audio/player.ts +++ b/src/audio/player.ts @@ -103,8 +103,10 @@ export function buildFfmpegArgs(url: string, seekSeconds: number): string[] { "-reconnect_on_http_error", "4xx,5xx", ); } + args.push("-i", url); + // Output-side seek (after -i): works on CDNs that reject Range/keyframe seeks (NetEase music.126.net). if (seekSeconds > 0) args.push("-ss", String(seekSeconds)); - args.push("-i", url, "-f", "s16le", "-ar", "48000", "-ac", "2", "-acodec", "pcm_s16le", "-"); + args.push("-f", "s16le", "-ar", "48000", "-ac", "2", "-acodec", "pcm_s16le", "-"); return args; }