Use the highest quality video segment to creat thumbnails from. Closes

This commit is contained in:
Gabe Kangas
2020-07-06 19:45:58 -07:00
parent 9357192947
commit 1133edf716
4 changed files with 48 additions and 11 deletions

View File

@@ -5,10 +5,9 @@ import (
"fmt"
"io/ioutil"
"github.com/gabek/owncast/utils"
log "github.com/sirupsen/logrus"
"gopkg.in/yaml.v2"
"github.com/gabek/owncast/utils"
)
//Config contains a reference to the configuration
@@ -45,10 +44,11 @@ type socialHandle struct {
}
type videoSettings struct {
ChunkLengthInSeconds int `yaml:"chunkLengthInSeconds"`
StreamingKey string `yaml:"streamingKey"`
StreamQualities []StreamQuality `yaml:"streamQualities"`
OfflineContent string `yaml:"offlineContent"`
ChunkLengthInSeconds int `yaml:"chunkLengthInSeconds"`
StreamingKey string `yaml:"streamingKey"`
StreamQualities []StreamQuality `yaml:"streamQualities"`
OfflineContent string `yaml:"offlineContent"`
HighestQualityStreamIndex int `yaml"-"`
}
// StreamQuality defines the specifics of a single HLS stream variant.
@@ -106,6 +106,8 @@ func (c *config) load(filePath string) error {
return err
}
c.VideoSettings.HighestQualityStreamIndex = findHighestQuality(c.VideoSettings.StreamQualities)
return nil
}

34
config/configUtils.go Normal file
View File

@@ -0,0 +1,34 @@
package config
import "sort"
func findHighestQuality(qualities []StreamQuality) int {
type IndexedQuality struct {
index int
quality StreamQuality
}
if len(qualities) < 2 {
return 0
}
indexedQualities := make([]IndexedQuality, 0)
for index, quality := range qualities {
indexedQuality := IndexedQuality{index, quality}
indexedQualities = append(indexedQualities, indexedQuality)
}
sort.Slice(indexedQualities, func(a, b int) bool {
if indexedQualities[a].quality.IsVideoPassthrough && !indexedQualities[b].quality.IsVideoPassthrough {
return true
}
if !indexedQualities[a].quality.IsVideoPassthrough && indexedQualities[b].quality.IsVideoPassthrough {
return false
}
return indexedQualities[a].quality.VideoBitrate > indexedQualities[b].quality.VideoBitrate
})
return indexedQualities[0].index
}