This commit is contained in:
fwastring 2026-03-29 15:23:37 +02:00
parent e413d301f6
commit b1552fe3de

View file

@ -199,16 +199,25 @@ in
streamCfg.bitrateKbps * 2 streamCfg.bitrateKbps * 2
else else
null; null;
rateControlArgs = x264RateControlArgs =
if streamCfg.bitrateKbps != null then if streamCfg.bitrateKbps != null then
"-b:v ${toString streamCfg.bitrateKbps}k -maxrate ${toString maxrateKbps}k -bufsize ${toString bufsizeKbps}k" "-b:v ${toString streamCfg.bitrateKbps}k -maxrate ${toString maxrateKbps}k -bufsize ${toString bufsizeKbps}k"
else else
""; "";
vaapiRateControlArgs =
if streamCfg.bitrateKbps != null then
"-rc_mode VBR -b:v ${toString streamCfg.bitrateKbps}k -maxrate ${toString maxrateKbps}k -bufsize ${toString bufsizeKbps}k"
else
"-rc_mode CQP -qp ${toString streamCfg.vaapiQp}";
videoCodecArgs = videoCodecArgs =
if streamCfg.useVaapi then if streamCfg.useVaapi then
"-vaapi_device ${streamCfg.vaapiDevice} -vf format=nv12,hwupload -c:v h264_vaapi -qp ${toString streamCfg.vaapiQp}" "-vaapi_device ${streamCfg.vaapiDevice} -vf format=nv12,hwupload -c:v h264_vaapi ${vaapiRateControlArgs} -g ${
toString (streamCfg.framerate * 2)
} -bf 0"
else else
"-vcodec libx264 -tune zerolatency -preset ${streamCfg.preset}"; "-vcodec libx264 -tune zerolatency -preset ${streamCfg.preset} ${x264RateControlArgs} -g ${
toString (streamCfg.framerate * 2)
} -bf 0";
in in
nameValuePair "webcam-rtsp-publisher-${sanitizeName streamName}" { nameValuePair "webcam-rtsp-publisher-${sanitizeName streamName}" {
description = "Publish webcam stream '${streamName}' to MediaMTX over RTSP"; description = "Publish webcam stream '${streamName}' to MediaMTX over RTSP";
@ -221,7 +230,7 @@ in
Restart = "always"; Restart = "always";
RestartSec = "2"; RestartSec = "2";
Environment = optional (streamCfg.vaapiDriver != null) "LIBVA_DRIVER_NAME=${streamCfg.vaapiDriver}"; Environment = optional (streamCfg.vaapiDriver != null) "LIBVA_DRIVER_NAME=${streamCfg.vaapiDriver}";
ExecStart = "${pkgs.ffmpeg}/bin/ffmpeg -hide_banner -loglevel warning -f v4l2 -framerate ${toString streamCfg.framerate} -video_size ${streamCfg.videoSize} -i ${streamCfg.device} ${videoCodecArgs} ${rateControlArgs} -f rtsp ${streamCfg.rtspUrl}"; ExecStart = "${pkgs.ffmpeg}/bin/ffmpeg -hide_banner -loglevel warning -f v4l2 -framerate ${toString streamCfg.framerate} -video_size ${streamCfg.videoSize} -i ${streamCfg.device} ${videoCodecArgs} -f rtsp ${streamCfg.rtspUrl}";
}; };
} }
) effectiveStreams; ) effectiveStreams;