From 177961c62d1b10b67f06f2d4c8a6bdba73e74903 Mon Sep 17 00:00:00 2001 From: MickaelK Date: Mon, 2 Dec 2024 17:24:03 +1100 Subject: [PATCH] fix (plg_video_thumbnail): error when backend doesn't support fileseek --- server/ctrl/files.go | 15 +++++++++++---- server/plugin/plg_video_thumbnail/index.go | 9 +++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/server/ctrl/files.go b/server/ctrl/files.go index 6775d313..7a199557 100644 --- a/server/ctrl/files.go +++ b/server/ctrl/files.go @@ -286,6 +286,7 @@ func FileCat(ctx *App, res http.ResponseWriter, req *http.Request) { SendErrorResult(res, err) return } + file_cache.Set(ctx.Session, tmpPath) if _, err = io.Copy(f, file); err != nil { f.Close() file.Close() @@ -293,14 +294,20 @@ func FileCat(ctx *App, res http.ResponseWriter, req *http.Request) { SendErrorResult(res, err) return } - f.Close() - file.Close() - if f, err = os.OpenFile(tmpPath, os.O_RDONLY, os.ModePerm); err != nil { + if err = f.Sync(); err != nil { + f.Close() + file.Close() Log.Debug("cat::range2 '%s'", err.Error()) SendErrorResult(res, err) return } - file_cache.Set(ctx.Session, tmpPath) + f.Close() + file.Close() + if f, err = os.OpenFile(tmpPath, os.O_RDONLY, os.ModePerm); err != nil { + Log.Debug("cat::range3 '%s'", err.Error()) + SendErrorResult(res, err) + return + } if fi, err := f.Stat(); err == nil { contentLength = fi.Size() } diff --git a/server/plugin/plg_video_thumbnail/index.go b/server/plugin/plg_video_thumbnail/index.go index efd17afc..b77b56a1 100644 --- a/server/plugin/plg_video_thumbnail/index.go +++ b/server/plugin/plg_video_thumbnail/index.go @@ -2,6 +2,7 @@ package plg_video_thumbnail import ( "bytes" + "encoding/base64" "fmt" "io" "net/http" @@ -59,7 +60,7 @@ func (this *ffmpegThumbnail) Generate(reader io.ReadCloser, ctx *App, res *http. errBuff bytes.Buffer fullURL = strings.Replace( fmt.Sprintf("http://127.0.0.1:%d%s?%s", Config.Get("general.port").Int(), req.URL.Path, req.URL.RawQuery), - "&thumbnail=true", "", 1, + "&thumbnail=true", "&origin=plg_video_thumbnail", 1, ) cacheName = "thumb_" + GenerateID(ctx.Session) + "_" + QuickHash(req.URL.Query().Get("path"), 10) + ".jpeg" cachePath = GetAbsolutePath(VideoCachePath, cacheName) @@ -73,17 +74,17 @@ func (this *ffmpegThumbnail) Generate(reader io.ReadCloser, ctx *App, res *http. } cmd := exec.CommandContext(req.Context(), "ffmpeg", []string{ - "-headers", "cookie: " + req.Header.Get("Cookie"), + "-hide_banner", "-headers", "cookie: " + req.Header.Get("Cookie") + "\r\n", "-skip_frame", "nokey", "-i", fullURL, "-y", "-an", "-sn", - "-vf", "thumbnail, scale=320:320: force_original_aspect_ratio=decrease", "-vsync", "passthrough", "-frames:v", "1", + "-vf", "thumbnail, scale=320:320: force_original_aspect_ratio=decrease", "-fps_mode", "passthrough", "-frames:v", "1", "-c:v", "mjpeg", cachePath, }...) cmd.Stderr = &errBuff if err := cmd.Run(); err != nil { if req.Context().Err() == nil { - Log.Error("plg_video_thumbnail::generate::run err=%s", errBuff.String()) + Log.Debug("plg_video_thumbnail::generate::run path=%s err=%s", req.URL.Query().Get("path"), base64.StdEncoding.EncodeToString(errBuff.Bytes())) return nil, err } return nil, err