Add ffmpeg auto codec selection logic

This commit is contained in:
Alex X
2024-05-22 18:49:43 +03:00
parent 82fa803a37
commit 8a7712a4c8
2 changed files with 120 additions and 4 deletions

View File

@@ -2,6 +2,7 @@ package ffmpeg
import (
"net/url"
"slices"
"strings"
"github.com/AlexxIT/go2rtc/internal/app"
@@ -28,9 +29,14 @@ func Init() {
streams.RedirectFunc("ffmpeg", func(url string) (string, error) {
args := parseArgs(url[7:])
if slices.Contains(args.Codecs, "auto") {
return "", nil // force call streams.HandleFunc("ffmpeg")
}
return "exec:" + args.String(), nil
})
streams.HandleFunc("ffmpeg", NewProducer)
device.Init(defaults["bin"])
hardware.Init(defaults["bin"])
}
@@ -85,6 +91,8 @@ var defaults = map[string]string{
"pcml/8000": "-c:a pcm_s16le -ar:a 8000 -ac:a 1",
"pcml/44100": "-c:a pcm_s16le -ar:a 44100 -ac:a 1",
"opus/48000/2": "-c:a libopus -application:a lowdelay -min_comp 0 -ar:a 48000 -ac:a 2",
// hardware Intel and AMD on Linux
// better not to set `-async_depth:v 1` like for QSV, because framedrops
// `-bf 0` - disable B-frames is very important
@@ -202,10 +210,6 @@ func parseArgs(s string) *ffmpeg.Args {
args.Input = inputTemplate("file", s, query)
}
if args.Input == "" {
return nil
}
if query["async"] != nil {
args.Input = "-use_wallclock_as_timestamps 1 -async 1 " + args.Input
}