From 9ae28eedaaeb3c076bf85b4ec6297d29a47e8150 Mon Sep 17 00:00:00 2001 From: WeebDataHoarder <57538841+WeebDataHoarder@users.noreply.github.com> Date: Fri, 3 Nov 2023 05:43:04 +0100 Subject: [PATCH] Proper mime type for encode server --- cli/encode-server/encode.go | 7 ++++++- cli/encode-server/encoder_libaom.go | 5 +++-- cli/encode-server/encoder_libx264.go | 5 +++-- cli/encode-server/encoders.go | 17 ++++++++++++++--- cli/encode-server/job.go | 8 ++++---- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/cli/encode-server/encode.go b/cli/encode-server/encode.go index af23f8a..940d6f2 100644 --- a/cli/encode-server/encode.go +++ b/cli/encode-server/encode.go @@ -79,7 +79,12 @@ func encodeFromReader(reader io.ReadCloser, job *Job, w http.ResponseWriter) { return } - w.Header().Set("Content-Type", "application/octet-stream") + mimeType := "application/octet-stream" + if e := GetEncoder(job.Config.Encoder.Name); e != nil { + mimeType = e.MimeType + } + + w.Header().Set("Content-Type", mimeType) w.Header().Add("Trailer", "x-encoder-error, x-decoder-error") w.WriteHeader(http.StatusOK) job.Logger = log.New(os.Stderr, fmt.Sprintf("[job %s] ", job.Id), log.LstdFlags) diff --git a/cli/encode-server/encoder_libaom.go b/cli/encode-server/encoder_libaom.go index fe346b3..e58b0be 100644 --- a/cli/encode-server/encoder_libaom.go +++ b/cli/encode-server/encoder_libaom.go @@ -12,8 +12,9 @@ import ( func init() { Encoders = append(Encoders, EncoderEntry{ - Name: EncoderAOM, - Version: libaom.Version, + Name: EncoderAOM, + Version: libaom.Version, + MimeType: "video/x-ivf", New: func(w io.Writer, properties frame.StreamProperties, settings map[string]any, logger utilities.Logger) (encoder.Encoder, error) { return libaom.NewEncoder(w, properties, settings, logger) }, diff --git a/cli/encode-server/encoder_libx264.go b/cli/encode-server/encoder_libx264.go index b1bff65..797417a 100644 --- a/cli/encode-server/encoder_libx264.go +++ b/cli/encode-server/encoder_libx264.go @@ -12,8 +12,9 @@ import ( func init() { Encoders = append(Encoders, EncoderEntry{ - Name: EncoderX264, - Version: libx264.Version, + Name: EncoderX264, + Version: libx264.Version, + MimeType: "video/h264", New: func(w io.Writer, properties frame.StreamProperties, settings map[string]any, logger utilities.Logger) (encoder.Encoder, error) { return libx264.NewEncoder(w, properties, settings, logger) }, diff --git a/cli/encode-server/encoders.go b/cli/encode-server/encoders.go index d70b7c8..89d344a 100644 --- a/cli/encode-server/encoders.go +++ b/cli/encode-server/encoders.go @@ -5,6 +5,7 @@ import ( "git.gammaspectra.live/S.O.N.G/Ignite/frame" "git.gammaspectra.live/S.O.N.G/Ignite/utilities" "io" + "slices" ) const ( @@ -13,9 +14,19 @@ const ( ) type EncoderEntry struct { - Name string - Version func() string - New func(w io.Writer, properties frame.StreamProperties, settings map[string]any, logger utilities.Logger) (encoder.Encoder, error) + Name string + Version func() string + MimeType string + New func(w io.Writer, properties frame.StreamProperties, settings map[string]any, logger utilities.Logger) (encoder.Encoder, error) } var Encoders []EncoderEntry + +func GetEncoder(name string) *EncoderEntry { + if i := slices.IndexFunc(Encoders, func(entry EncoderEntry) bool { + return entry.Name == name + }); i != -1 { + return &Encoders[i] + } + return nil +} diff --git a/cli/encode-server/job.go b/cli/encode-server/job.go index 4211338..2975369 100644 --- a/cli/encode-server/job.go +++ b/cli/encode-server/job.go @@ -43,10 +43,10 @@ func (j *Job) Init(w io.Writer) error { var err error - for _, e := range Encoders { - if e.Name == j.Config.Encoder.Name { - j.Encoder, err = e.New(w, j.Config.Properties, settings, j.Logger) - } + if e := GetEncoder(j.Config.Encoder.Name); e == nil { + return errors.New("encoder not found") + } else { + j.Encoder, err = e.New(w, j.Config.Properties, settings, j.Logger) } if err != nil { return err