Codec selection (#892)
* Query for installed codecs * Start modeling out codecs * Can now specify a codec and get the correct settings returned from the model * Return codecs in admin/serverconfig * Start handling transcoding errors and return messages to user * filter available codecs against a whitelist * Fix merge * Codecs are working * Switching between codecs work * Add apis for setting a custom video codec * Cleanup the logging of transcoder errors * Add v4l codec * Add fetching v4l * Add support for per-codec presets * Use updated nvenc encoding parameters * Update log message * Some more codec WIP * Turn off v4l. It is a mess. * Try to make the lowest latency level a bit more playable * Use a human redable display name in console messages * Turn on transcoder persistent connections * Add more codec-related user-facing error messages * Give the initial offline state transcoder an id * Force a minimum segment count of 3 * Disable qsv for now. set x264 specific params in VariantFlags * Close body in case * Ignore vbv underflow message, it is not actionable * Determine a dynamic gop value based on the length of segments * Add codec-specific tests * Cleanup * Ignore goconst lint warnings in codec file * Troubleshoot omx * Add more codec tests * Remove no longer accurate comment * Bundle admin from codec branch * Revert back to old setting * Cleanup list of codecs a bit * Remove old references to the encoder preset * Commit updated API documentation * Update admin bundle * Commit updated API documentation * Add codec setting to api spec * Commit updated API documentation Co-authored-by: Owncast <owncast@owncast.online>
This commit is contained in:
@@ -25,8 +25,7 @@ type StreamOutputVariant struct {
|
||||
ScaledWidth int `yaml:"scaledWidth" json:"scaledWidth,omitempty"`
|
||||
ScaledHeight int `yaml:"scaledHeight" json:"scaledHeight,omitempty"`
|
||||
|
||||
Framerate int `yaml:"framerate" json:"framerate"`
|
||||
EncoderPreset string `yaml:"encoderPreset" json:"encoderPreset"` // Remove after migration is no longer used
|
||||
Framerate int `yaml:"framerate" json:"framerate"`
|
||||
// CPUUsageLevel represents a codec preset to configure CPU usage.
|
||||
CPUUsageLevel int `json:"cpuUsageLevel"`
|
||||
}
|
||||
@@ -44,32 +43,6 @@ func (q *StreamOutputVariant) GetFramerate() int {
|
||||
return 24
|
||||
}
|
||||
|
||||
// GetEncoderPreset returns the preset or default.
|
||||
func (q *StreamOutputVariant) GetEncoderPreset() string {
|
||||
if q.IsVideoPassthrough {
|
||||
return ""
|
||||
}
|
||||
|
||||
if q.EncoderPreset != "" {
|
||||
return q.EncoderPreset
|
||||
}
|
||||
|
||||
return "veryfast"
|
||||
}
|
||||
|
||||
// GetCPUUsageLevel will return the libx264 codec encoder preset that maps to a level.
|
||||
func (q *StreamOutputVariant) GetCPUUsageLevel() int {
|
||||
presetMapping := map[string]int{
|
||||
"ultrafast": 1,
|
||||
"superfast": 2,
|
||||
"veryfast": 3,
|
||||
"faster": 4,
|
||||
"fast": 5,
|
||||
}
|
||||
|
||||
return presetMapping[q.GetEncoderPreset()]
|
||||
}
|
||||
|
||||
// GetIsAudioPassthrough will return if this variant audio is passthrough.
|
||||
func (q *StreamOutputVariant) GetIsAudioPassthrough() bool {
|
||||
if q.IsAudioPassthrough {
|
||||
|
||||
Reference in New Issue
Block a user