mirror of
https://github.com/blakeblackshear/frigate.git
synced 2025-12-06 05:24:11 +03:00
Improve matching go2rtc stream names with cameras (#20586)
Some checks are pending
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
Some checks are pending
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
* improve matching go2rtc stream names with cameras * fix unrelated lint issue
This commit is contained in:
parent
0743cb57c2
commit
c5fec3271f
@ -150,7 +150,9 @@ export default function SearchThumbnail({
|
||||
.filter(
|
||||
(item) => item !== undefined && !item.includes("-verified"),
|
||||
)
|
||||
.map((text) => getTranslatedLabel(text, searchResult.data.type))
|
||||
.map((text) =>
|
||||
getTranslatedLabel(text, searchResult.data.type),
|
||||
)
|
||||
.sort()
|
||||
.join(", ")
|
||||
.replaceAll("-verified", "")}
|
||||
|
||||
@ -152,36 +152,38 @@ export default function CameraEditForm({
|
||||
}))
|
||||
: defaultValues.ffmpeg.inputs;
|
||||
|
||||
// Load go2rtc streams for this camera
|
||||
const go2rtcStreams = config.go2rtc?.streams || {};
|
||||
const cameraStreams: Record<string, string[]> = {};
|
||||
|
||||
// Find streams that match this camera's name pattern
|
||||
Object.entries(go2rtcStreams).forEach(([streamName, urls]) => {
|
||||
if (streamName.startsWith(cameraName) || streamName === cameraName) {
|
||||
cameraStreams[streamName] = Array.isArray(urls) ? urls : [urls];
|
||||
}
|
||||
});
|
||||
// get candidate stream names for this camera. could be the camera's own name,
|
||||
// any restream names referenced by this camera, or any keys under live --> streams
|
||||
const validNames = new Set<string>();
|
||||
validNames.add(cameraName);
|
||||
|
||||
// Also deduce go2rtc streams from restream URLs in camera inputs
|
||||
camera.ffmpeg?.inputs?.forEach((input, index) => {
|
||||
// deduce go2rtc stream names from rtsp restream inputs
|
||||
camera.ffmpeg?.inputs?.forEach((input) => {
|
||||
// exclude any query strings or trailing slashes from the stream name
|
||||
const restreamMatch = input.path.match(
|
||||
/^rtsp:\/\/127\.0\.0\.1:8554\/(.+)$/,
|
||||
/^rtsp:\/\/127\.0\.0\.1:8554\/([^?#/]+)(?:[?#].*)?$/,
|
||||
);
|
||||
if (restreamMatch) {
|
||||
const streamName = restreamMatch[1];
|
||||
// Find the corresponding go2rtc stream
|
||||
const go2rtcStream = Object.entries(go2rtcStreams).find(
|
||||
([name]) =>
|
||||
name === streamName ||
|
||||
name === `${cameraName}_${index + 1}` ||
|
||||
name === cameraName,
|
||||
);
|
||||
if (go2rtcStream) {
|
||||
cameraStreams[go2rtcStream[0]] = Array.isArray(go2rtcStream[1])
|
||||
? go2rtcStream[1]
|
||||
: [go2rtcStream[1]];
|
||||
validNames.add(streamName);
|
||||
}
|
||||
});
|
||||
|
||||
// Include live --> streams keys
|
||||
const liveStreams = camera?.live?.streams;
|
||||
if (liveStreams) {
|
||||
Object.keys(liveStreams).forEach((key) => {
|
||||
validNames.add(key);
|
||||
});
|
||||
}
|
||||
|
||||
// Map only go2rtc entries that match the collected names
|
||||
Object.entries(go2rtcStreams).forEach(([name, urls]) => {
|
||||
if (validNames.has(name)) {
|
||||
cameraStreams[name] = Array.isArray(urls) ? urls : [urls];
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user