Proper mime type for encode server

This commit is contained in:
DataHoarder 2023-11-03 05:43:04 +01:00
parent 6c20429b0d
commit 9ae28eedaa
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
5 changed files with 30 additions and 12 deletions

View file

@ -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)

View file

@ -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)
},

View file

@ -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)
},

View file

@ -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
}

View file

@ -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