You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.5 KiB
59 lines
1.5 KiB
package controllers |
|
|
|
import ( |
|
"net/http" |
|
"sort" |
|
|
|
"github.com/owncast/owncast/core/data" |
|
) |
|
|
|
type variantsSort struct { |
|
Name string |
|
Index int |
|
VideoBitrate int |
|
IsVideoPassthrough bool |
|
} |
|
|
|
type variantsResponse struct { |
|
Name string `json:"name"` |
|
Index int `json:"index"` |
|
} |
|
|
|
// GetVideoStreamOutputVariants will return the video variants available. |
|
func GetVideoStreamOutputVariants(w http.ResponseWriter, r *http.Request) { |
|
outputVariants := data.GetStreamOutputVariants() |
|
|
|
streamSortVariants := make([]variantsSort, len(outputVariants)) |
|
for i, variant := range outputVariants { |
|
variantSort := variantsSort{ |
|
Index: i, |
|
Name: variant.GetName(), |
|
IsVideoPassthrough: variant.IsVideoPassthrough, |
|
VideoBitrate: variant.VideoBitrate, |
|
} |
|
streamSortVariants[i] = variantSort |
|
} |
|
|
|
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) |
|
}
|
|
|