mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Remove x-route header and use a env var instead
This commit is contained in:
parent
da0f415ecf
commit
2eecb5174c
@ -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']
|
||||||
|
@ -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']
|
||||||
|
@ -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']
|
||||||
|
@ -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],
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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(),
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user