audio stufs

This commit is contained in:
legop3
2026-06-27 02:39:31 -04:00
parent d2007976b0
commit 0172ea5150
5 changed files with 64 additions and 16 deletions
+3 -3
View File
@@ -314,9 +314,9 @@ log "Installed audio-forward listener helper + systemd unit"
install -d -o roverd -g roverd /var/lib/roverd
cat > /var/lib/roverd/video.env <<'ENV'
# Managed by roverd; placeholder values will be overwritten at runtime.
PUBLISH_URL=srt://192.168.0.86:9000?streamid=#!::r=CHANGE_ME,m=publish&latency=10&mode=caller&transtype=live&pkt_size=1316
AUDIO_PUBLISH_URL=srt://192.168.0.86:9000?streamid=#!::r=CHANGE_ME-audio,m=publish&latency=10&mode=caller&transtype=live&pkt_size=1316
AUDIO_FORWARD_URL=srt://192.168.0.86:9000?streamid=#!::r=CHANGE_ME-fwd,m=request&latency=10&mode=caller&transtype=live&pkt_size=1316
PUBLISH_URL=srt://192.168.0.86:9000?streamid=%23%21::r=CHANGE_ME,m=publish&latency=20000&mode=caller&transtype=live&pkt_size=1316
AUDIO_PUBLISH_URL=srt://192.168.0.86:9000?streamid=%23%21::r=CHANGE_ME-audio,m=publish&latency=20000&mode=caller&transtype=live&pkt_size=1316
AUDIO_FORWARD_URL=srt://192.168.0.86:9000?streamid=%23%21::r=CHANGE_ME-fwd,m=request&latency=20000&mode=caller&transtype=live&pkt_size=1316
VIDEO_BITRATE=2000000
AUDIO_ENABLE=0
AUDIO_DEVICE=hw:0,0
+35 -1
View File
@@ -296,6 +296,9 @@ func LoadConfig(path string) (*Config, error) {
}
cfg.Media.AudioForwardURL = derived
}
cfg.Media.PublishURL = normalizeSRTURLForLowLatency(cfg.Media.PublishURL)
cfg.Media.AudioPublishURL = normalizeSRTURLForLowLatency(cfg.Media.AudioPublishURL)
cfg.Media.AudioForwardURL = normalizeSRTURLForLowLatency(cfg.Media.AudioForwardURL)
if err := validateServoConfig(&cfg.CameraServo); err != nil {
return nil, fmt.Errorf("cameraServo: %w", err)
}
@@ -440,9 +443,40 @@ func deriveSRTURL(serverURL, streamName string, port int, mode string) (string,
port = 9000
}
escaped := url.PathEscape(streamName)
return fmt.Sprintf("srt://%s:%d?streamid=#!::r=%s,m=%s&latency=10&mode=caller&transtype=live&pkt_size=1316", host, port, escaped, mode), nil
return fmt.Sprintf("srt://%s:%d?streamid=%%23%%21::r=%s,m=%s&latency=20000&mode=caller&transtype=live&pkt_size=1316", host, port, escaped, mode), nil
}
func normalizeSRTURLForLowLatency(raw string) string {
trimmed := strings.TrimSpace(raw)
if trimmed == "" || !strings.HasPrefix(trimmed, "srt://") {
return raw
}
// SRT stream IDs commonly start with "#!::". In a URL, a literal "#"
// begins the fragment section, so ffmpeg/libsrt can ignore query options
// placed after it. MediaMTX then falls back to the SRT default latency,
// which showed up in diagnostics as a 120 ms receive delay even though the
// URL text contained latency=10. Percent-encoding only the "#!" prefix keeps
// MediaMTX's stream ID parser behavior while allowing latency/mode/transtype
// to remain real SRT query parameters.
normalized := strings.ReplaceAll(trimmed, "streamid=#!::", "streamid=%23%21::")
// ffmpeg's SRT latency URL option is expressed in microseconds. Use 20 ms as
// the default interactive rover target: much lower than the 120 ms fallback,
// but not so aggressive that tiny LAN jitter immediately causes drops.
if srtLegacyLatencyRe.MatchString(normalized) {
normalized = srtLegacyLatencyRe.ReplaceAllString(normalized, "${1}20000${2}")
} else if !strings.Contains(normalized, "latency=") {
separator := "&"
if !strings.Contains(normalized, "?") {
separator = "?"
}
normalized += separator + "latency=20000"
}
return normalized
}
var srtLegacyLatencyRe = regexp.MustCompile(`([?&]latency=)10($|&)`)
var hexColorRe = regexp.MustCompile(`^#[0-9A-Fa-f]{6}$`)
func normalizeHexColor(raw string) (string, error) {
+2 -2
View File
@@ -17,8 +17,8 @@ battery:
urgent: 1650
maxWheelSpeed: 350
media:
publishUrl: srt://192.168.0.86:9000?streamid=#!::r=roomba-alpha,m=publish&latency=10&mode=caller&transtype=live&pkt_size=1316
audioForwardUrl: srt://192.168.0.86:9000?streamid=#!::r=roomba-alpha-fwd,m=request&latency=10&mode=caller&transtype=live&pkt_size=1316
publishUrl: srt://192.168.0.86:9000?streamid=%23%21::r=roomba-alpha,m=publish&latency=20000&mode=caller&transtype=live&pkt_size=1316
audioForwardUrl: srt://192.168.0.86:9000?streamid=%23%21::r=roomba-alpha-fwd,m=request&latency=20000&mode=caller&transtype=live&pkt_size=1316
publishPort: 9000
# Default assumes camera is mounted upside down; set false for upright mounts.
cameraInverted: true
@@ -29,19 +29,35 @@ function createAudioForwardPolicy(deps) {
function forcePublishStreamMode(rawUrl) {
const value = String(rawUrl || '').trim();
if (!value) return '';
if (!/[?&]streamid=#!::/.test(value)) return value;
if (/,m=publish\b/.test(value)) return value;
if (/,m=[a-zA-Z]+\b/.test(value)) return value.replace(/,m=[a-zA-Z]+\b/, ',m=publish');
return value.replace(/([?&]streamid=#!::[^&]*)/, '$1,m=publish');
const normalized = value
/*
A literal "#" inside the SRT stream ID turns the rest of the URL into a
fragment for normal URL parsers. Encoding the "#!" prefix keeps MediaMTX
receiving the same stream ID while allowing latency/mode/transtype to be
parsed as real SRT options instead of being accidentally hidden inside
the stream ID text.
*/
.replace(/([?&]streamid=)#!::/, '$1%23%21::')
/*
SRT latency is expressed in microseconds by ffmpeg/libsrt. The previous
latency=10 value was both too small to be a sane target and, because of
the unescaped stream ID, was not being applied in practice. Use the same
20 ms target as rover publishing.
*/
.replace(/([?&]latency=)10\b/, (_, prefix) => `${prefix}20000`);
if (!/[?&]streamid=(?:#!::|%23%21::)/.test(normalized)) return normalized;
if (/,m=publish\b/.test(normalized)) return normalized;
if (/,m=[a-zA-Z]+\b/.test(normalized)) return normalized.replace(/,m=[a-zA-Z]+\b/, ',m=publish');
return normalized.replace(/([?&]streamid=(?:#!::|%23%21::)[^&]*)/, '$1,m=publish');
}
function resolveForwardUrl(roverId) {
const record = roverManager.rovers.get(roverId);
const configured = record?.meta?.media?.audioForwardUrl;
if (configured) return forcePublishStreamMode(configured);
return `srt://127.0.0.1:9000?streamid=#!::r=${encodeURIComponent(
return `srt://127.0.0.1:9000?streamid=%23%21::r=${encodeURIComponent(
roverId + streamSuffix,
)},m=publish&latency=10&mode=caller&transtype=live&pkt_size=1316`;
)},m=publish&latency=20000&mode=caller&transtype=live&pkt_size=1316`;
}
function resolveForwardPathId(roverId) {
+2 -4
View File
@@ -1,7 +1,5 @@
1. add camera filter indicator for when youre changing it
2. make alert feed better with fadeout and stuff and it stays when you hover over one
3. fix rover request spam queue cheat
4. fix this:
1. fix rover request spam queue cheat
2. fix this:
`Jun 18 15:14:18 roombaserver.local node[216731]: /home/daniel/MultiRoombaRover/server/src/services/roverManager/socketHandlers.js:92
Jun 18 15:14:18 roombaserver.local node[216731]: cb({ error: err.message });
Jun 18 15:14:18 roombaserver.local node[216731]: ^