feat(stream)!: retire WebRTC, HLS-only, bump 0.9.4
Drops the custom WebRTC DataChannel pipeline + pion deps + WSS signaling client + wire framing. Every in-browser playback now uses HLS over HTTP from the daemon (Tailscale/LAN/UPnP). Browser P2P never re-enabled. Wire renames (incompatible with web < 2026-05-26): agent.WebRTCSession => agent.StreamSession, SyncResponse.WebRTCSessions (JSON: webrtcSessions) => StreamSessions (JSON: streamSessions). MIN_AGENT_VERSION is bumped to 0.9.4 on the web side so older agents see an upgrade card. Also fixes the libx264 'VBV bitrate > level limit' abort by clamping the encoder bitrate to the effective output height instead of the requested label (carried over from the prior 0.9.3 unreleased work). The seed_file vertical (mode=seed_file handler + engine.SeedFile) was retired with the in-browser P2P player. [downloads.webrtc] config block deleted; existing TOML files with the section still parse fine.
This commit is contained in:
parent
9176e877eb
commit
ca7de23a56
33 changed files with 207 additions and 2854 deletions
|
|
@ -51,7 +51,6 @@ type DownloadConfig struct {
|
|||
StreamPort int `toml:"stream_port"` // fixed port for streaming HTTP server (default: 11818)
|
||||
EnableUPnP bool `toml:"enable_upnp"` // map StreamPort to the WAN via UPnP/NAT-PMP (default: false; opt-in because it exposes the unauthenticated /stream + /hls endpoints to the public internet)
|
||||
CORSExtraOrigins []string `toml:"cors_extra_origins"` // extra browser origins added on top of the baked-in allowlist (torrentclaw.com, app.torrentclaw.com, localhost:3030)
|
||||
WebRTC WebRTCConfig `toml:"webrtc"`
|
||||
Transcode TranscodeConfig `toml:"transcode"`
|
||||
VPN VPNConfig `toml:"vpn"`
|
||||
}
|
||||
|
|
@ -84,19 +83,6 @@ type TranscodeConfig struct {
|
|||
MaxConcurrent int `toml:"max_concurrent"` // safety cap on simultaneous transcoder processes
|
||||
}
|
||||
|
||||
// WebRTCConfig opts the daemon into acting as a WebTorrent peer so browsers
|
||||
// can fetch pieces via WebRTC data channels — required by the in-browser
|
||||
// player on torrentclaw.com. Disabled by default; enabling implies upload
|
||||
// is allowed for active torrents (browsers can't download otherwise).
|
||||
type WebRTCConfig struct {
|
||||
Enabled bool `toml:"enabled"` // master switch
|
||||
Trackers []string `toml:"trackers"` // wss:// signaling trackers
|
||||
STUNServers []string `toml:"stun_servers"` // stun:host:port
|
||||
TURNServers []string `toml:"turn_servers"` // turn:host:port (no auth) — see TURNCredentials for authed
|
||||
TURNUser string `toml:"turn_user"` // optional, applied to all TURNServers
|
||||
TURNPass string `toml:"turn_pass"` // optional
|
||||
}
|
||||
|
||||
type OrganizeConfig struct {
|
||||
Enabled bool `toml:"enabled"`
|
||||
MoviesDir string `toml:"movies_dir"`
|
||||
|
|
@ -121,7 +107,7 @@ type LibraryConfig struct {
|
|||
ScanPath string `toml:"scan_path"` // remembered from last scan
|
||||
Workers int `toml:"workers"` // concurrent ffprobe (default 8)
|
||||
FFprobePath string `toml:"ffprobe_path"` // optional explicit path
|
||||
FFmpegPath string `toml:"ffmpeg_path"` // optional explicit path (used by WebRTC streaming transcoder)
|
||||
FFmpegPath string `toml:"ffmpeg_path"` // optional explicit path (used by the HLS streaming transcoder)
|
||||
BackupDir string `toml:"backup_dir"` // for replaced files
|
||||
AutoScan bool `toml:"auto_scan"` // enable daily auto-scan in daemon (default true)
|
||||
ScanInterval string `toml:"scan_interval"` // e.g. "24h", "12h", "6h" (default "24h")
|
||||
|
|
@ -146,11 +132,6 @@ func Default() Config {
|
|||
PreferredMethod: "auto",
|
||||
MaxConcurrent: 3,
|
||||
StreamPort: 11818,
|
||||
WebRTC: WebRTCConfig{
|
||||
Enabled: true,
|
||||
Trackers: []string{"wss://tracker.torrentclaw.com"},
|
||||
STUNServers: []string{"stun:stun.l.google.com:19302", "stun:stun1.l.google.com:19302"},
|
||||
},
|
||||
Transcode: TranscodeConfig{
|
||||
Enabled: true,
|
||||
HWAccel: "auto",
|
||||
|
|
@ -231,19 +212,6 @@ func applyDefaults(cfg *Config, meta toml.MetaData) {
|
|||
cfg.General.Country = "US"
|
||||
}
|
||||
|
||||
if !meta.IsDefined("downloads", "webrtc", "enabled") {
|
||||
cfg.Download.WebRTC.Enabled = true
|
||||
}
|
||||
if !meta.IsDefined("downloads", "webrtc", "trackers") {
|
||||
cfg.Download.WebRTC.Trackers = []string{"wss://tracker.torrentclaw.com"}
|
||||
}
|
||||
if !meta.IsDefined("downloads", "webrtc", "stun_servers") {
|
||||
cfg.Download.WebRTC.STUNServers = []string{
|
||||
"stun:stun.l.google.com:19302",
|
||||
"stun:stun1.l.google.com:19302",
|
||||
}
|
||||
}
|
||||
|
||||
if !meta.IsDefined("downloads", "transcode", "enabled") {
|
||||
cfg.Download.Transcode.Enabled = true
|
||||
}
|
||||
|
|
|
|||
|
|
@ -208,17 +208,6 @@ name = "Test"
|
|||
t.Fatalf("Load failed: %v", err)
|
||||
}
|
||||
|
||||
// WebRTC should be on by default for fresh installs.
|
||||
if !cfg.Download.WebRTC.Enabled {
|
||||
t.Error("WebRTC.Enabled should default to true when [downloads.webrtc] is absent")
|
||||
}
|
||||
if len(cfg.Download.WebRTC.Trackers) == 0 {
|
||||
t.Error("WebRTC.Trackers should default to torrentclaw tracker when absent")
|
||||
}
|
||||
if len(cfg.Download.WebRTC.STUNServers) == 0 {
|
||||
t.Error("WebRTC.STUNServers should default to public STUN list when absent")
|
||||
}
|
||||
|
||||
// Transcode should be on by default.
|
||||
if !cfg.Download.Transcode.Enabled {
|
||||
t.Error("Transcode.Enabled should default to true when [downloads.transcode] is absent")
|
||||
|
|
@ -238,12 +227,9 @@ func TestLoadRespectsExplicitlyDisabledStreaming(t *testing.T) {
|
|||
tmp := t.TempDir()
|
||||
path := filepath.Join(tmp, "config.toml")
|
||||
|
||||
// User explicitly opted out of webrtc + transcode. Defaults must NOT
|
||||
// override them — that would silently re-enable features the user disabled.
|
||||
os.WriteFile(path, []byte(`[downloads.webrtc]
|
||||
enabled = false
|
||||
|
||||
[downloads.transcode]
|
||||
// User explicitly opted out of transcode. Defaults must NOT override
|
||||
// it — that would silently re-enable a feature the user disabled.
|
||||
os.WriteFile(path, []byte(`[downloads.transcode]
|
||||
enabled = false
|
||||
`), 0o644)
|
||||
|
||||
|
|
@ -252,9 +238,6 @@ enabled = false
|
|||
t.Fatalf("Load failed: %v", err)
|
||||
}
|
||||
|
||||
if cfg.Download.WebRTC.Enabled {
|
||||
t.Error("WebRTC.Enabled = true, want false (user explicitly disabled)")
|
||||
}
|
||||
if cfg.Download.Transcode.Enabled {
|
||||
t.Error("Transcode.Enabled = true, want false (user explicitly disabled)")
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue