From 33a4c90228198bbb586ecf10d5c78d8e89db5851 Mon Sep 17 00:00:00 2001 From: ihexon <14349453+ihexon@users.noreply.github.com> Date: Tue, 13 May 2025 12:03:53 +0800 Subject: [PATCH] refactor(handler): downgrade the ffmpeg from 7 to 6 for compatibility --- pkg/define/const.go | 28 ++++++++++++++------ pkg/define/whitelist.go | 6 ++--- pkg/handler/ffmpeg/handler.go | 15 ++++++----- pkg/handler/handler.go | 3 ++- pkg/logger/log.go | 4 +-- pkg/provider/ffmpeg/stubber.go | 48 +++++++++++++++++++++++++--------- 6 files changed, 71 insertions(+), 33 deletions(-) diff --git a/pkg/define/const.go b/pkg/define/const.go index 1ef8fa6..49ae05b 100644 --- a/pkg/define/const.go +++ b/pkg/define/const.go @@ -1,17 +1,29 @@ package define const ( - FFMPEG = "ffmpeg" - FFPROBE = "ffprobe" - InstallFFMPEG = "install_ffmpeg" - StudioDir = ".oomol-studio" - HostShared = "host-shared" - FFReleaseURLForVentura = "https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v7.1.1-2/jellyfin-ffmpeg_7.1.1-2_portable_macarm64-gpl.tar.xz" - FFMSha256ForVentura = "8ff4ed4eba151346d6d1ee894bbfcbd9f507dc82b34260f4567954136449001d" + ARCH = "arm64" + + FFMPEGPkgName = "ffmpeg_macos_arm64" + + // FFMPEG VERSION v7.1.1 info + FFMPEG7Version = "v7.1.1" + FF7ReleaseURL = "https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v7.1.1-2/jellyfin-ffmpeg_7.1.1-2_portable_macarm64-gpl.tar.xz" + FF7Sha256 = "8ff4ed4eba151346d6d1ee894bbfcbd9f507dc82b34260f4567954136449001d" + + // // FFMPEG VERSION v6.0.1 info + FFMPEG6Version = "v6.0.1" + FF6ReleaseURL = "https://github.com/jellyfin/jellyfin-ffmpeg/releases/download/v6.0.1-8/jellyfin-ffmpeg_6.0.1-8_portable_macarm64-gpl.tar.xz" + FF6Sha256 = "efce8779d5f35127ec7dcd500669e00a2e13f2b099c7bf11ab5acee467dc5d57" ) const ( - DYLD_LIBRARY_PATH = "DYLD_LIBRARY_PATH" //nolint:stylecheck + InstallFFMPEGVersion7 = "install_ffmpeg_7" + InstallFFMPEGVersion6 = "install_ffmpeg_6" + StudioDir = ".oomol-studio" + HostShared = "host-shared" + + FFMPEGBin = "ffmpeg" + FFPROBEBin = "ffprobe" ) var ( diff --git a/pkg/define/whitelist.go b/pkg/define/whitelist.go index 031327e..d1576b7 100644 --- a/pkg/define/whitelist.go +++ b/pkg/define/whitelist.go @@ -1,9 +1,9 @@ package define var Whitelist = []string{ - FFMPEG, - FFPROBE, - InstallFFMPEG, + FFPROBEBin, + FFMPEGBin, + InstallFFMPEGVersion6, } func IsWhitelisted(command string) bool { diff --git a/pkg/handler/ffmpeg/handler.go b/pkg/handler/ffmpeg/handler.go index 24c8614..20642b1 100644 --- a/pkg/handler/ffmpeg/handler.go +++ b/pkg/handler/ffmpeg/handler.go @@ -15,9 +15,9 @@ const RunFFMPEGStage = "ffmpeg run handler" func Run(next ssh.Handler) ssh.Handler { return func(s ssh.Session) { targetBin := s.Command()[0] - if targetBin == define.FFPROBE || targetBin == define.FFMPEG { - logrus.Infof("run middleware: %q", RunFFMPEGStage) - stubber := ffmpeg.New(s) + if targetBin == define.FFPROBEBin || targetBin == define.FFMPEGBin { + logrus.Infof("run middleware: %q\r\n", RunFFMPEGStage) + stubber := ffmpeg.NewVersion6(s) args, err := exec.DoArgsSanitizers(s.Command()[1:]) if err != nil { slog.Fatalf(s, "DoArgsSanitizers error: %v\r\n", err) @@ -39,10 +39,11 @@ const InstallStage = "ffmpeg install handler" func Install(next ssh.Handler) ssh.Handler { return func(s ssh.Session) { - // if the command is not define.InstallFFMPEG, do nothing and run next handler - if s.Command()[0] == define.InstallFFMPEG { - slog.Infof(s, "run middleware: %q", InstallStage) - stubber := ffmpeg.New(s) + // if the command is not InstallFFMPEGVersion6, do nothing and run the next handler + if s.Command()[0] == define.InstallFFMPEGVersion6 { + slog.Infof(s, "run middleware: %q\r\n", InstallStage) + stubber := ffmpeg.NewVersion6(s) + if err := stubber.Download(s.Context()); err != nil { slog.Fatalf(s, "Download ffmpeg error: %v\r\n", err) return diff --git a/pkg/handler/handler.go b/pkg/handler/handler.go index f7f5106..9c45e30 100644 --- a/pkg/handler/handler.go +++ b/pkg/handler/handler.go @@ -1,10 +1,11 @@ package handler import ( - "github.com/sirupsen/logrus" "sshd/pkg/define" slog "sshd/pkg/logger" + "github.com/sirupsen/logrus" + "github.com/gliderlabs/ssh" ) diff --git a/pkg/logger/log.go b/pkg/logger/log.go index bd17487..a0cc3b4 100644 --- a/pkg/logger/log.go +++ b/pkg/logger/log.go @@ -32,8 +32,8 @@ func Infof(s ssh.Session, f string, v ...interface{}) { func SetupLogger() error { logrus.SetFormatter(&logrus.TextFormatter{ FullTimestamp: true, - ForceColors: true, - DisableColors: false, + ForceColors: false, + DisableColors: true, TimestampFormat: "2006-01-02 15:04:05.000", }) homeDir, err := os.UserHomeDir() diff --git a/pkg/provider/ffmpeg/stubber.go b/pkg/provider/ffmpeg/stubber.go index 45e0369..b78249f 100644 --- a/pkg/provider/ffmpeg/stubber.go +++ b/pkg/provider/ffmpeg/stubber.go @@ -26,10 +26,7 @@ type Stubber struct { Version define.Version } -const VERSION = "7" -const NAME = "ffmpeg_macos_arm64" - -func New(s ssh.Session) *Stubber { +func NewVersion6(s ssh.Session) *Stubber { stdioHome, err := utils.GetStudioHomeDir() if err != nil { logrus.Errorf("GetStudioHomeDir error: %v", err) @@ -41,28 +38,55 @@ func New(s ssh.Session) *Stubber { return &Stubber{ Session: s, Version: define.Version{ - PkgName: NAME, - PkgVer: VERSION, + PkgName: define.FFMPEGPkgName, + PkgVer: define.FFMPEG6Version, }, Installer: define.InstallOpts{ - URL: define.FFReleaseURLForVentura, - Sha256Sum: define.FFMSha256ForVentura, - Prefix: filepath.Join(stdioHome, define.HostShared, NAME, VERSION), + URL: define.FF6ReleaseURL, + Sha256Sum: define.FF6Sha256, + Prefix: filepath.Join(stdioHome, define.HostShared, define.FFMPEGPkgName, define.FFMPEG6Version), }, Runner: define.RunOpts{ - FFMPEGPath: filepath.Join(stdioHome, define.HostShared, NAME, VERSION, define.FFMPEG), - FFPROBEPath: filepath.Join(stdioHome, define.HostShared, NAME, VERSION, define.FFPROBE), + FFMPEGPath: filepath.Join(stdioHome, define.HostShared, define.FFMPEGPkgName, define.FFMPEG6Version, define.FFMPEGBin), + FFPROBEPath: filepath.Join(stdioHome, define.HostShared, define.FFMPEGPkgName, define.FFMPEG6Version, define.FFPROBEBin), }, } } +// func NewVersion7(s ssh.Session) *Stubber { +// stdioHome, err := utils.GetStudioHomeDir() +// if err != nil { +// logrus.Errorf("GetStudioHomeDir error: %v", err) +// return nil +// } +// +// logrus.Infof("GetStudioHomeDir: %q", stdioHome) +// +// return &Stubber{ +// Session: s, +// Version: define.Version{ +// PkgName: define.FFMPEGPkgName, +// PkgVer: define.FFMPEG7Version, +// }, +// Installer: define.InstallOpts{ +// URL: define.FF7ReleaseURL, +// Sha256Sum: define.FF7Sha256, +// Prefix: filepath.Join(stdioHome, define.HostShared, define.FFMPEGPkgName, define.FFMPEG7Version), +// }, +// Runner: define.RunOpts{ +// FFMPEGPath: filepath.Join(stdioHome, define.HostShared, define.FFMPEGPkgName, define.FFMPEG7Version, define.FFMPEGBin), +// FFPROBEPath: filepath.Join(stdioHome, define.HostShared, define.FFMPEGPkgName, define.FFMPEG7Version, define.FFPROBEBin), +// }, +// } +//} + func (l *Stubber) Run(ctx context.Context, target string, args, envs []string) error { l.Runner.Args = args l.Runner.Envs = envs cmd := exec.CommandContext(ctx, l.Runner.FFMPEGPath, l.Runner.Args...) - if target == define.FFPROBE { + if target == define.FFPROBEBin { cmd = exec.CommandContext(ctx, l.Runner.FFPROBEPath, l.Runner.Args...) }