Skip to content

Commit ea06510

Browse files
committed
fix(player): pass referer to direct streams
1 parent 3df11da commit ea06510

2 files changed

Lines changed: 71 additions & 8 deletions

File tree

internal/player/playvideo.go

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,25 @@ var ErrBackToDownloadOptions = errors.New("back to download options")
3636
// dubSubTagRe strips parenthesized dub/sub tags from anime names for display
3737
var dubSubTagRe = regexp.MustCompile(`\s*\((?i:Dublado|Legendado|SUB|DUB|Subbed|Dubbed)\)\s*`)
3838

39+
const defaultHLSReferer = "https://streameeeeee.site/"
40+
41+
func appendPlaybackRefererArgs(mpvArgs []string, videoURL string, isHLSStream bool) ([]string, string) {
42+
lowerURL := strings.ToLower(strings.TrimSpace(videoURL))
43+
if !strings.HasPrefix(lowerURL, "http://") && !strings.HasPrefix(lowerURL, "https://") {
44+
return mpvArgs, ""
45+
}
46+
47+
referer := util.GetGlobalReferer()
48+
if referer == "" && isHLSStream {
49+
referer = defaultHLSReferer
50+
}
51+
if referer == "" {
52+
return mpvArgs, ""
53+
}
54+
55+
return append(mpvArgs, fmt.Sprintf("--http-header-fields=Referer: %s", referer)), referer
56+
}
57+
3958
// waitForVideoReady waits for the HLS video to be ready for playback
4059
// Returns true if video is ready, false if timeout
4160
func waitForVideoReady(socketPath string) bool {
@@ -350,17 +369,20 @@ func playVideo(
350369
is9Anime = updater.GetAnime().Source == "9Anime"
351370
}
352371

372+
mpvArgs, playbackReferer := appendPlaybackRefererArgs(mpvArgs, videoURL, isHLSStream)
373+
if playbackReferer != "" {
374+
if isHLSStream {
375+
util.Debugf("HLS stream detected - Referer: %s", playbackReferer)
376+
} else {
377+
util.Debugf("HTTP stream detected - Referer: %s", playbackReferer)
378+
}
379+
}
380+
353381
if isHLSStream {
354-
// Use the stored global referer if available (set by source-specific stream resolvers),
355-
// otherwise fall back to the default referer for legacy sources
356-
referer := util.GetGlobalReferer()
382+
referer := playbackReferer
357383
if referer == "" {
358-
referer = "https://streameeeeee.site/"
384+
referer = defaultHLSReferer
359385
}
360-
mpvArgs = append(mpvArgs,
361-
fmt.Sprintf("--http-header-fields=Referer: %s", referer),
362-
)
363-
util.Debugf("HLS stream detected - Referer: %s", referer)
364386

365387
// For 9Anime (and other Cloudflare-protected CDNs), route playback through
366388
// yt-dlp with Chrome TLS impersonation to bypass Cloudflare fingerprint checks.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package player
2+
3+
import (
4+
"testing"
5+
6+
"github.com/alvarorichard/Goanime/internal/util"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
func TestAppendPlaybackRefererArgsAddsGlobalRefererForDirectHTTP(t *testing.T) {
11+
restore := snapshotGlobalReferer()
12+
defer restore()
13+
util.SetGlobalReferer("https://allmanga.to")
14+
15+
args, referer := appendPlaybackRefererArgs(nil, "https://tools.fast4speed.rsvp//media9/videos/id/sub/4?v=22", false)
16+
17+
assert.Equal(t, "https://allmanga.to", referer)
18+
assert.Contains(t, args, "--http-header-fields=Referer: https://allmanga.to")
19+
}
20+
21+
func TestAppendPlaybackRefererArgsKeepsHLSFallbackReferer(t *testing.T) {
22+
restore := snapshotGlobalReferer()
23+
defer restore()
24+
util.ClearGlobalReferer()
25+
26+
args, referer := appendPlaybackRefererArgs(nil, "https://cdn.example.com/master.m3u8", true)
27+
28+
assert.Equal(t, defaultHLSReferer, referer)
29+
assert.Contains(t, args, "--http-header-fields=Referer: "+defaultHLSReferer)
30+
}
31+
32+
func TestAppendPlaybackRefererArgsSkipsLocalFiles(t *testing.T) {
33+
restore := snapshotGlobalReferer()
34+
defer restore()
35+
util.SetGlobalReferer("https://allmanga.to")
36+
37+
args, referer := appendPlaybackRefererArgs([]string{"--cache=yes"}, "/tmp/episode.mp4", false)
38+
39+
assert.Empty(t, referer)
40+
assert.Equal(t, []string{"--cache=yes"}, args)
41+
}

0 commit comments

Comments
 (0)