Remove x-route header and use a env var instead

This commit is contained in:
Zoe Roux 2024-04-28 00:32:02 +02:00
parent da0f415ecf
commit 2eecb5174c
No known key found for this signature in database
9 changed files with 41 additions and 21 deletions

View File

@ -7,6 +7,8 @@ x-transcoder: &transcoder-base
restart: on-failure restart: on-failure
env_file: env_file:
- ./.env - ./.env
environment:
- GOCODER_PREFIX=/video
volumes: volumes:
- ${LIBRARY_ROOT}:/video:ro - ${LIBRARY_ROOT}:/video:ro
- ${CACHE_ROOT}:/cache - ${CACHE_ROOT}:/cache
@ -95,6 +97,7 @@ services:
devices: devices:
- capabilities: [gpu] - capabilities: [gpu]
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=nvidia - GOCODER_HWACCEL=nvidia
profiles: ['nvidia'] profiles: ['nvidia']
@ -103,6 +106,7 @@ services:
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=vaapi - GOCODER_HWACCEL=vaapi
- GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
profiles: ['vaapi'] profiles: ['vaapi']
@ -112,6 +116,7 @@ services:
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=qsv - GOCODER_HWACCEL=qsv
- GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
profiles: ['qsv'] profiles: ['qsv']

View File

@ -12,6 +12,8 @@ x-transcoder: &transcoder-base
cpus: 1 cpus: 1
env_file: env_file:
- ./.env - ./.env
environment:
- GOCODER_PREFIX=/video
volumes: volumes:
- ./transcoder:/app - ./transcoder:/app
- ${LIBRARY_ROOT}:/video:ro - ${LIBRARY_ROOT}:/video:ro
@ -119,6 +121,7 @@ services:
devices: devices:
- capabilities: [gpu] - capabilities: [gpu]
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=nvidia - GOCODER_HWACCEL=nvidia
profiles: ['nvidia'] profiles: ['nvidia']
@ -127,6 +130,7 @@ services:
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=vaapi - GOCODER_HWACCEL=vaapi
- GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
profiles: ['vaapi'] profiles: ['vaapi']
@ -136,6 +140,7 @@ services:
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=qsv - GOCODER_HWACCEL=qsv
- GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
profiles: ['qsv'] profiles: ['qsv']

View File

@ -7,6 +7,8 @@ x-transcoder: &transcoder-base
restart: unless-stopped restart: unless-stopped
env_file: env_file:
- ./.env - ./.env
environment:
- GOCODER_PREFIX=/video
volumes: volumes:
- ${LIBRARY_ROOT}:/video:ro - ${LIBRARY_ROOT}:/video:ro
- ${CACHE_ROOT}:/cache - ${CACHE_ROOT}:/cache
@ -94,6 +96,7 @@ services:
devices: devices:
- capabilities: [gpu] - capabilities: [gpu]
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=nvidia - GOCODER_HWACCEL=nvidia
profiles: ['nvidia'] profiles: ['nvidia']
@ -102,6 +105,7 @@ services:
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=vaapi - GOCODER_HWACCEL=vaapi
- GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
profiles: ['vaapi'] profiles: ['vaapi']
@ -111,6 +115,7 @@ services:
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
environment: environment:
- GOCODER_PREFIX=/video
- GOCODER_HWACCEL=qsv - GOCODER_HWACCEL=qsv
- GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128} - GOCODER_VAAPI_RENDERER=${GOCODER_VAAPI_RENDERER:-/dev/dri/renderD128}
profiles: ['qsv'] profiles: ['qsv']

View File

@ -68,7 +68,7 @@ export const useScrubber = (url: string) => {
ret[i] = { ret[i] = {
from: parseTs(times[0]), from: parseTs(times[0]),
to: parseTs(times[1]), to: parseTs(times[1]),
url: imageFn("/video/" + url[0]), url: imageFn(url[0]),
x: xywh[0], x: xywh[0],
y: xywh[1], y: xywh[1],
width: xywh[2], width: xywh[2],

View File

@ -9,7 +9,7 @@ import (
var extracted = NewCMap[string, <-chan struct{}]() 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{}) ret := make(chan struct{})
existing, created := extracted.GetOrSet(sha, ret) existing, created := extracted.GetOrSet(sha, ret)
if !created { if !created {
@ -18,7 +18,7 @@ func Extract(path string, sha string, route string) (<-chan struct{}, error) {
go func() { go func() {
defer printExecTime("Starting extraction of %s", path)() defer printExecTime("Starting extraction of %s", path)()
info, err := GetInfo(path, sha, route) info, err := GetInfo(path, sha)
if err != nil { if err != nil {
extracted.Remove(sha) extracted.Remove(sha)
close(ret) close(ret)

View File

@ -19,7 +19,7 @@ type FileStream struct {
audios CMap[int32, *AudioStream] audios CMap[int32, *AudioStream]
} }
func NewFileStream(path string, sha string, route string) *FileStream { func NewFileStream(path string, sha string) *FileStream {
ret := &FileStream{ ret := &FileStream{
Path: path, Path: path,
Out: fmt.Sprintf("%s/%s", Settings.Outpath, sha), 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) ret.ready.Add(1)
go func() { go func() {
defer ret.ready.Done() defer ret.ready.Done()
info, err := GetInfo(path, sha, route) info, err := GetInfo(path, sha)
ret.Info = info ret.Info = info
if err != nil { if err != nil {
ret.err = err ret.err = err

View File

@ -1,6 +1,7 @@
package src package src
import ( import (
"encoding/base64"
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
@ -180,7 +181,7 @@ type MICache struct {
var infos = NewCMap[string, *MICache]() 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 var err error
ret, _ := infos.GetOrCreate(sha, func() *MICache { ret, _ := infos.GetOrCreate(sha, func() *MICache {
@ -195,7 +196,7 @@ func GetInfo(path string, sha string, route string) (*MediaInfo, error) {
} }
var val *MediaInfo var val *MediaInfo
val, err = getInfo(path, route) val, err = getInfo(path)
*mi.info = *val *mi.info = *val
mi.info.Sha = sha mi.info.Sha = sha
mi.ready.Done() mi.ready.Done()
@ -231,7 +232,7 @@ func saveInfo[T any](save_path string, mi *T) error {
return os.WriteFile(save_path, content, 0o644) 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)() defer printExecTime("mediainfo for %s", path)()
mi, err := mediainfo.Open(path) mi, err := mediainfo.Open(path)
@ -294,7 +295,7 @@ func getInfo(path string, route string) (*MediaInfo, error) {
extension := OrNull(SubtitleExtensions[format]) extension := OrNull(SubtitleExtensions[format])
var link *string var link *string
if extension != nil { 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 link = &x
} }
return Subtitle{ return Subtitle{
@ -319,7 +320,7 @@ func getInfo(path string, route string) (*MediaInfo, error) {
Fonts: Map( Fonts: Map(
attachments, attachments,
func(font string, _ int) string { 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 { if len(ret.Videos) > 0 {

View File

@ -11,9 +11,10 @@ func GetEnvOr(env string, def string) string {
} }
type SettingsT struct { type SettingsT struct {
Outpath string Outpath string
Metadata string Metadata string
HwAccel HwAccelT RoutePrefix string
HwAccel HwAccelT
} }
type HwAccelT struct { type HwAccelT struct {
@ -24,7 +25,8 @@ type HwAccelT struct {
} }
var Settings = SettingsT{ var Settings = SettingsT{
Outpath: GetEnvOr("GOCODER_CACHE_ROOT", "/cache"), Outpath: GetEnvOr("GOCODER_CACHE_ROOT", "/cache"),
Metadata: GetEnvOr("GOCODER_METADATA_ROOT", "/metadata"), Metadata: GetEnvOr("GOCODER_METADATA_ROOT", "/metadata"),
HwAccel: DetectHardwareAccel(), RoutePrefix: GetEnvOr("GOCODER_PREFIX", ""),
HwAccel: DetectHardwareAccel(),
} }

View File

@ -1,6 +1,7 @@
package src package src
import ( import (
"encoding/base64"
"fmt" "fmt"
"image" "image"
"image/color" "image/color"
@ -27,14 +28,14 @@ type Thumbnail struct {
var thumbnails = NewCMap[string, *Thumbnail]() 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, _ := thumbnails.GetOrCreate(sha, func() *Thumbnail {
ret := &Thumbnail{ ret := &Thumbnail{
path: fmt.Sprintf("%s/%s", Settings.Metadata, sha), path: fmt.Sprintf("%s/%s", Settings.Metadata, sha),
} }
ret.ready.Add(1) ret.ready.Add(1)
go func() { go func() {
extractThumbnail(path, ret.path, fmt.Sprintf("%s/thumbnails.png", route)) extractThumbnail(path, ret.path)
ret.ready.Done() ret.ready.Done()
}() }()
return ret return ret
@ -43,7 +44,7 @@ func ExtractThumbnail(path string, route string, sha string) (string, error) {
return ret.path, nil 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)() defer printExecTime("extracting thumbnails for %s", path)()
os.MkdirAll(out, 0o755) os.MkdirAll(out, 0o755)
sprite_path := fmt.Sprintf("%s/sprite.png", out) sprite_path := fmt.Sprintf("%s/sprite.png", out)
@ -97,10 +98,11 @@ func extractThumbnail(path string, out string, name string) error {
timestamps := ts timestamps := ts
ts += interval ts += interval
vtt += fmt.Sprintf( 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(timestamps),
tsToVttTime(ts), tsToVttTime(ts),
name, Settings.RoutePrefix,
base64.StdEncoding.EncodeToString([]byte(path)),
x, x,
y, y,
width, width,