Sort after build variants index number, fix broken index for HLS path. (#1282)

* safely generate the thumbnail.jpg & preview.gif

* Sort after build variants index number, fix broken index for HLS path.

* Don't export VideoBitrate and IsVideoPassthrough

* Unused variables deleted

* Solution for sorting not working correctly.

* Rename StreamSortVariants to streamSortVariants
This commit is contained in:
Christian
2021-08-04 20:34:02 +02:00
committed by GitHub
parent dcc7a7c5c3
commit 521681e1b8

View File

@@ -7,28 +7,53 @@ import (
"github.com/owncast/owncast/core/data" "github.com/owncast/owncast/core/data"
) )
type variantsSort struct {
Index int
Name string
IsVideoPassthrough bool
VideoBitrate int
}
type variantsResponse struct { type variantsResponse struct {
Name string `json:"name"`
Index int `json:"index"` Index int `json:"index"`
Name string `json:"name"`
} }
// GetVideoStreamOutputVariants will return the video variants available. // GetVideoStreamOutputVariants will return the video variants available.
func GetVideoStreamOutputVariants(w http.ResponseWriter, r *http.Request) { func GetVideoStreamOutputVariants(w http.ResponseWriter, r *http.Request) {
outputVariants := data.GetStreamOutputVariants() outputVariants := data.GetStreamOutputVariants()
sort.Slice(outputVariants, func(i, j int) bool { streamSortVariants := make([]variantsSort, len(outputVariants))
return outputVariants[j].VideoBitrate < outputVariants[i].VideoBitrate
})
result := make([]variantsResponse, len(outputVariants))
for i, variant := range outputVariants { for i, variant := range outputVariants {
variantResponse := variantsResponse{ variantSort := variantsSort{
Index: i, Index: i,
Name: variant.GetName(), Name: variant.GetName(),
IsVideoPassthrough: variant.IsVideoPassthrough,
VideoBitrate: variant.VideoBitrate,
} }
result[i] = variantResponse streamSortVariants[i] = variantSort
} }
WriteResponse(w, result) sort.Slice(streamSortVariants, func(i, j int) bool {
if streamSortVariants[i].IsVideoPassthrough && !streamSortVariants[j].IsVideoPassthrough {
return true
}
if !streamSortVariants[i].IsVideoPassthrough && streamSortVariants[j].IsVideoPassthrough {
return false
}
return streamSortVariants[i].VideoBitrate > streamSortVariants[j].VideoBitrate
})
response := make([]variantsResponse, len(streamSortVariants))
for i, variant := range streamSortVariants {
variantResponse := variantsResponse{
Index: variant.Index,
Name: variant.Name,
}
response[i] = variantResponse
}
WriteResponse(w, response)
} }