From 2eecb5174c251763fa266a1ab70c6371894eee42 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sun, 28 Apr 2024 00:32:02 +0200 Subject: [PATCH] Remove x-route header and use a env var instead --- docker-compose.build.yml | 5 +++++ docker-compose.dev.yml | 5 +++++ docker-compose.yml | 5 +++++ .../packages/ui/src/player/components/scrubber.tsx | 2 +- transcoder/src/extract.go | 4 ++-- transcoder/src/filestream.go | 4 ++-- transcoder/src/info.go | 11 ++++++----- transcoder/src/settings.go | 14 ++++++++------ transcoder/src/thumbnails.go | 12 +++++++----- 9 files changed, 41 insertions(+), 21 deletions(-) diff --git a/docker-compose.build.yml b/docker-compose.build.yml index b03a6d87..4ff0419e 100644 --- a/docker-compose.build.yml +++ b/docker-compose.build.yml @@ -7,6 +7,8 @@ x-transcoder: &transcoder-base restart: on-failure env_file: - ./.env + environment: + - GOCODER_PREFIX=/video volumes: - ${LIBRARY_ROOT}:/video:ro - ${CACHE_ROOT}:/cache @@ -95,6 +97,7 @@ services: devices: - capabilities: [gpu] environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=nvidia profiles: ['nvidia'] @@ -103,6 +106,7 @@ services: devices: - /dev/dri:/dev/dri environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=vaapi - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['vaapi'] @@ -112,6 +116,7 @@ services: devices: - /dev/dri:/dev/dri environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=qsv - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['qsv'] diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 4ee3f10a..6f2fa693 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -12,6 +12,8 @@ x-transcoder: &transcoder-base cpus: 1 env_file: - ./.env + environment: + - GOCODER_PREFIX=/video volumes: - ./transcoder:/app - ${LIBRARY_ROOT}:/video:ro @@ -119,6 +121,7 @@ services: devices: - capabilities: [gpu] environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=nvidia profiles: ['nvidia'] @@ -127,6 +130,7 @@ services: devices: - /dev/dri:/dev/dri environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=vaapi - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['vaapi'] @@ -136,6 +140,7 @@ services: devices: - /dev/dri:/dev/dri environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=qsv - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['qsv'] diff --git a/docker-compose.yml b/docker-compose.yml index 9185a6dd..fa10ead6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,8 @@ x-transcoder: &transcoder-base restart: unless-stopped env_file: - ./.env + environment: + - GOCODER_PREFIX=/video volumes: - ${LIBRARY_ROOT}:/video:ro - ${CACHE_ROOT}:/cache @@ -94,6 +96,7 @@ services: devices: - capabilities: [gpu] environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=nvidia profiles: ['nvidia'] @@ -102,6 +105,7 @@ services: devices: - /dev/dri:/dev/dri environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=vaapi - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['vaapi'] @@ -111,6 +115,7 @@ services: devices: - /dev/dri:/dev/dri environment: + - GOCODER_PREFIX=/video - GOCODER_HWACCEL=qsv - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} profiles: ['qsv'] diff --git a/front/packages/ui/src/player/components/scrubber.tsx b/front/packages/ui/src/player/components/scrubber.tsx index e2757312..acc9670a 100644 --- a/front/packages/ui/src/player/components/scrubber.tsx +++ b/front/packages/ui/src/player/components/scrubber.tsx @@ -68,7 +68,7 @@ export const useScrubber = (url: string) => { ret[i] = { from: parseTs(times[0]), to: parseTs(times[1]), - url: imageFn("/video/" + url[0]), + url: imageFn(url[0]), x: xywh[0], y: xywh[1], width: xywh[2], diff --git a/transcoder/src/extract.go b/transcoder/src/extract.go index 55478dfc..cb6b77f7 100644 --- a/transcoder/src/extract.go +++ b/transcoder/src/extract.go @@ -9,7 +9,7 @@ import ( var extracted = NewCMap[string, <-chan struct{}]() -func Extract(path string, sha string, route string) (<-chan struct{}, error) { +func Extract(path string, sha string) (<-chan struct{}, error) { ret := make(chan struct{}) existing, created := extracted.GetOrSet(sha, ret) if !created { @@ -18,7 +18,7 @@ func Extract(path string, sha string, route string) (<-chan struct{}, error) { go func() { defer printExecTime("Starting extraction of %s", path)() - info, err := GetInfo(path, sha, route) + info, err := GetInfo(path, sha) if err != nil { extracted.Remove(sha) close(ret) diff --git a/transcoder/src/filestream.go b/transcoder/src/filestream.go index 984cafb1..f5fd2cfa 100644 --- a/transcoder/src/filestream.go +++ b/transcoder/src/filestream.go @@ -19,7 +19,7 @@ type FileStream struct { audios CMap[int32, *AudioStream] } -func NewFileStream(path string, sha string, route string) *FileStream { +func NewFileStream(path string, sha string) *FileStream { ret := &FileStream{ Path: path, Out: fmt.Sprintf("%s/%s", Settings.Outpath, sha), @@ -30,7 +30,7 @@ func NewFileStream(path string, sha string, route string) *FileStream { ret.ready.Add(1) go func() { defer ret.ready.Done() - info, err := GetInfo(path, sha, route) + info, err := GetInfo(path, sha) ret.Info = info if err != nil { ret.err = err diff --git a/transcoder/src/info.go b/transcoder/src/info.go index 75f4a80f..b79fdeb8 100644 --- a/transcoder/src/info.go +++ b/transcoder/src/info.go @@ -1,6 +1,7 @@ package src import ( + "encoding/base64" "encoding/json" "fmt" "io" @@ -180,7 +181,7 @@ type MICache struct { var infos = NewCMap[string, *MICache]() -func GetInfo(path string, sha string, route string) (*MediaInfo, error) { +func GetInfo(path string, sha string) (*MediaInfo, error) { var err error ret, _ := infos.GetOrCreate(sha, func() *MICache { @@ -195,7 +196,7 @@ func GetInfo(path string, sha string, route string) (*MediaInfo, error) { } var val *MediaInfo - val, err = getInfo(path, route) + val, err = getInfo(path) *mi.info = *val mi.info.Sha = sha mi.ready.Done() @@ -231,7 +232,7 @@ func saveInfo[T any](save_path string, mi *T) error { return os.WriteFile(save_path, content, 0o644) } -func getInfo(path string, route string) (*MediaInfo, error) { +func getInfo(path string) (*MediaInfo, error) { defer printExecTime("mediainfo for %s", path)() mi, err := mediainfo.Open(path) @@ -294,7 +295,7 @@ func getInfo(path string, route string) (*MediaInfo, error) { extension := OrNull(SubtitleExtensions[format]) var link *string if extension != nil { - x := fmt.Sprintf("%s/subtitle/%d.%s", route, i, *extension) + x := fmt.Sprintf("%s/%s/subtitle/%d.%s", Settings.RoutePrefix, base64.StdEncoding.EncodeToString([]byte(path)), i, *extension) link = &x } return Subtitle{ @@ -319,7 +320,7 @@ func getInfo(path string, route string) (*MediaInfo, error) { Fonts: Map( attachments, func(font string, _ int) string { - return fmt.Sprintf("%s/attachment/%s", route, font) + return fmt.Sprintf("%s/%s/attachment/%s", Settings.RoutePrefix, base64.StdEncoding.EncodeToString([]byte(path)), font) }), } if len(ret.Videos) > 0 { diff --git a/transcoder/src/settings.go b/transcoder/src/settings.go index c6af123d..8039759b 100644 --- a/transcoder/src/settings.go +++ b/transcoder/src/settings.go @@ -11,9 +11,10 @@ func GetEnvOr(env string, def string) string { } type SettingsT struct { - Outpath string - Metadata string - HwAccel HwAccelT + Outpath string + Metadata string + RoutePrefix string + HwAccel HwAccelT } type HwAccelT struct { @@ -24,7 +25,8 @@ type HwAccelT struct { } var Settings = SettingsT{ - Outpath: GetEnvOr("GOCODER_CACHE_ROOT", "/cache"), - Metadata: GetEnvOr("GOCODER_METADATA_ROOT", "/metadata"), - HwAccel: DetectHardwareAccel(), + Outpath: GetEnvOr("GOCODER_CACHE_ROOT", "/cache"), + Metadata: GetEnvOr("GOCODER_METADATA_ROOT", "/metadata"), + RoutePrefix: GetEnvOr("GOCODER_PREFIX", ""), + HwAccel: DetectHardwareAccel(), } diff --git a/transcoder/src/thumbnails.go b/transcoder/src/thumbnails.go index ed8e24c5..fde155b9 100644 --- a/transcoder/src/thumbnails.go +++ b/transcoder/src/thumbnails.go @@ -1,6 +1,7 @@ package src import ( + "encoding/base64" "fmt" "image" "image/color" @@ -27,14 +28,14 @@ type Thumbnail struct { var thumbnails = NewCMap[string, *Thumbnail]() -func ExtractThumbnail(path string, route string, sha string) (string, error) { +func ExtractThumbnail(path string, sha string) (string, error) { ret, _ := thumbnails.GetOrCreate(sha, func() *Thumbnail { ret := &Thumbnail{ path: fmt.Sprintf("%s/%s", Settings.Metadata, sha), } ret.ready.Add(1) go func() { - extractThumbnail(path, ret.path, fmt.Sprintf("%s/thumbnails.png", route)) + extractThumbnail(path, ret.path) ret.ready.Done() }() return ret @@ -43,7 +44,7 @@ func ExtractThumbnail(path string, route string, sha string) (string, error) { return ret.path, nil } -func extractThumbnail(path string, out string, name string) error { +func extractThumbnail(path string, out string) error { defer printExecTime("extracting thumbnails for %s", path)() os.MkdirAll(out, 0o755) sprite_path := fmt.Sprintf("%s/sprite.png", out) @@ -97,10 +98,11 @@ func extractThumbnail(path string, out string, name string) error { timestamps := ts ts += interval vtt += fmt.Sprintf( - "%s --> %s\n%s#xywh=%d,%d,%d,%d\n\n", + "%s --> %s\n%s/%s/thumbnails.png#xywh=%d,%d,%d,%d\n\n", tsToVttTime(timestamps), tsToVttTime(ts), - name, + Settings.RoutePrefix, + base64.StdEncoding.EncodeToString([]byte(path)), x, y, width,