123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package handlers
- import (
- "net/http"
- "sort"
- "github.com/owncast/owncast/core/data"
- webutils "github.com/owncast/owncast/webserver/utils"
- )
- 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
- }
- webutils.WriteResponse(w, response)
- }
|