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:
Gabe Kangas
2021-04-15 13:55:51 -07:00
committed by GitHub
parent 7dec4fe063
commit 5214d81264
21 changed files with 845 additions and 180 deletions

View File

@@ -182,9 +182,9 @@ components:
framerate:
type: integer
description: The target frames per second of the video.
encoderPreset:
type: string
description: "The [H.264 preset value](https://trac.ffmpeg.org/wiki/Encode/H.264) selected for this HLS variant."
cpuUsageLevel:
type: integer
description: "The amount of hardware utilization selected for this HLS variant."
TimestampedValue:
type: object
@@ -984,13 +984,35 @@ paths:
- framerate: 30
videoPassthrough: false
videoBitrate: 1800
encoderPreset: veryfast
cpuUsageLevel: 2
audioPassthrough: true
- framerate: 24
videoPassthrough: false
videoBitrate: 1000
encoderPreset: superfast
audioPassthrough: true
cpuUsageLevel: 3
audioPassthrough: true
/api/admin/config/video/codec:
post:
summary: Set the video codec.
description: Sets the specific video codec that will be used for video encoding. Some codecs will support hardware acceleration. Not all codecs will be supported for all systems.
tags: ["Admin"]
security:
- AdminBasicAuth: []
responses:
'200':
$ref: "#/components/responses/BasicResponse"
requestBody:
content:
application/json:
schema:
type: object
properties:
value:
description: The video codec to change to.
type: string
example:
value: libx264
/api/admin/config/s3:
post: