From 3c371e70465933c8a96cb9646db4680fb861d313 Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Thu, 4 May 2023 07:38:49 +0300 Subject: [PATCH] Change FFmpeg output for MJPEG to pipe --- internal/ffmpeg/device/devices.go | 4 ++-- internal/ffmpeg/ffmpeg.go | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/internal/ffmpeg/device/devices.go b/internal/ffmpeg/device/devices.go index a02cb896..3e657906 100644 --- a/internal/ffmpeg/device/devices.go +++ b/internal/ffmpeg/device/devices.go @@ -33,10 +33,10 @@ func GetInput(src string) (string, error) { video = value[0] case "audio": audio = value[0] - case "framerate": - input += " -framerate " + value[0] case "resolution": input += " -video_size " + value[0] + default: // "input_format", "framerate", "video_size" + input += " -" + key + " " + value[0] } } } diff --git a/internal/ffmpeg/ffmpeg.go b/internal/ffmpeg/ffmpeg.go index c69ad822..51d6c74a 100644 --- a/internal/ffmpeg/ffmpeg.go +++ b/internal/ffmpeg/ffmpeg.go @@ -51,14 +51,16 @@ var defaults = map[string]string{ "rtsp/udp": "-fflags nobuffer -flags low_delay -timeout 5000000 -user_agent go2rtc/ffmpeg -i {input}", // output - "output": "-user_agent ffmpeg/go2rtc -rtsp_transport tcp -f rtsp {output}", + "output": "-user_agent ffmpeg/go2rtc -rtsp_transport tcp -f rtsp {output}", + "output/mjpeg": "-f mjpeg -", // `-preset superfast` - we can't use ultrafast because it doesn't support `-profile main -level 4.1` // `-tune zerolatency` - for minimal latency // `-profile high -level 4.1` - most used streaming profile "h264": "-c:v libx264 -g 50 -profile:v high -level:v 4.1 -preset:v superfast -tune:v zerolatency -pix_fmt:v yuvj420p", "h265": "-c:v libx265 -g 50 -profile:v high -level:v 5.1 -preset:v superfast -tune:v zerolatency", - "mjpeg": "-c:v mjpeg -force_duplicated_matrix:v 1 -huffman:v 0 -pix_fmt:v yuvj420p", + "mjpeg": "-c:v mjpeg", + //"mjpeg": "-c:v mjpeg -force_duplicated_matrix:v 1 -huffman:v 0 -pix_fmt:v yuvj420p", // https://ffmpeg.org/ffmpeg-codecs.html#libopus-1 "opus": "-c:a libopus -ar:a 48000 -ac:a 2 -application:a voip -compression_level:a 0", @@ -268,6 +270,13 @@ func parseArgs(s string) *ffmpeg.Args { args.AddCodec("-c copy") } + // transcoding to only mjpeg + if (args.Video == 1 && args.Audio == 0 && query.Get("video") == "mjpeg") || + // no transcoding from mjpeg input + (args.Video == 0 && args.Audio == 0 && strings.Contains(args.Input, " mjpeg ")) { + args.Output = defaults["output/mjpeg"] + } + return args }