Fix available streaming modes

This commit is contained in:
Nick Mowen 2024-01-16 14:30:05 -07:00
parent 2ac3173b4a
commit 066fdc469c
3 changed files with 76 additions and 57 deletions

View File

@ -54,7 +54,6 @@ export default function DynamicCameraImage({
if (eventIndex == -1) { if (eventIndex == -1) {
const newActiveObjects = [...activeObjects, event.after.id]; const newActiveObjects = [...activeObjects, event.after.id];
setActiveObjects(newActiveObjects); setActiveObjects(newActiveObjects);
setKey(Date.now());
} }
} }
} }

View File

@ -48,7 +48,7 @@ function Live() {
const defaultLiveMode = useMemo(() => { const defaultLiveMode = useMemo(() => {
if (cameraConfig) { if (cameraConfig) {
if (restreamEnabled) { if (restreamEnabled) {
return cameraConfig.ui.live_mode; return cameraConfig.ui.live_mode || config?.ui.live_mode;
} }
return "jsmpeg"; return "jsmpeg";
@ -65,7 +65,8 @@ function Live() {
<div className=" w-full"> <div className=" w-full">
<div className="flex justify-between"> <div className="flex justify-between">
<Heading as="h2">Live</Heading> <Heading as="h2">Live</Heading>
<div> <div className="flex">
<div className="mx-1">
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<Button className="capitalize" variant="outline"> <Button className="capitalize" variant="outline">
@ -75,7 +76,15 @@ function Live() {
<DropdownMenuContent> <DropdownMenuContent>
<DropdownMenuLabel>Select A Camera</DropdownMenuLabel> <DropdownMenuLabel>Select A Camera</DropdownMenuLabel>
<DropdownMenuSeparator /> <DropdownMenuSeparator />
<DropdownMenuRadioGroup value={camera} onValueChange={setCamera}> <DropdownMenuRadioGroup
value={camera}
onValueChange={setCamera}
>
{config?.birdseye.enabled && (
<DropdownMenuRadioItem value="birdseye">
Birdseye
</DropdownMenuRadioItem>
)}
{sortedCameras.map((item) => ( {sortedCameras.map((item) => (
<DropdownMenuRadioItem <DropdownMenuRadioItem
className="capitalize" className="capitalize"
@ -88,6 +97,8 @@ function Live() {
</DropdownMenuRadioGroup> </DropdownMenuRadioGroup>
</DropdownMenuContent> </DropdownMenuContent>
</DropdownMenu> </DropdownMenu>
</div>
<div className="mx-1">
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger asChild> <DropdownMenuTrigger asChild>
<Button className="capitalize" variant="outline"> <Button className="capitalize" variant="outline">
@ -101,21 +112,30 @@ function Live() {
value={`${viewSource}`} value={`${viewSource}`}
onValueChange={setViewSource} onValueChange={setViewSource}
> >
{restreamEnabled && (
<DropdownMenuRadioItem value="webrtc"> <DropdownMenuRadioItem value="webrtc">
Webrtc Webrtc
</DropdownMenuRadioItem> </DropdownMenuRadioItem>
<DropdownMenuRadioItem value="mse">MSE</DropdownMenuRadioItem> )}
{restreamEnabled && (
<DropdownMenuRadioItem value="mse">
MSE
</DropdownMenuRadioItem>
)}
<DropdownMenuRadioItem value="jsmpeg"> <DropdownMenuRadioItem value="jsmpeg">
Jsmpeg Jsmpeg
</DropdownMenuRadioItem> </DropdownMenuRadioItem>
{camera != "birdseye" && (
<DropdownMenuRadioItem value="debug"> <DropdownMenuRadioItem value="debug">
Debug Debug
</DropdownMenuRadioItem> </DropdownMenuRadioItem>
)}
</DropdownMenuRadioGroup> </DropdownMenuRadioGroup>
</DropdownMenuContent> </DropdownMenuContent>
</DropdownMenu> </DropdownMenu>
</div> </div>
</div> </div>
</div>
{config && camera == "birdseye" && sourceIsLoaded && ( {config && camera == "birdseye" && sourceIsLoaded && (
<BirdseyeLivePlayer <BirdseyeLivePlayer
birdseyeConfig={config?.birdseye} birdseyeConfig={config?.birdseye}

View File

@ -16,7 +16,7 @@ export function getHourlyTimelineData(
// build a map of course to the types that are included in this hour // build a map of course to the types that are included in this hour
// which allows us to know what items to keep depending on detail level // which allows us to know what items to keep depending on detail level
const source_to_types: { [key: string]: string[] } = {}; const sourceToTypes: { [key: string]: string[] } = {};
let cardTypeStart: { [camera: string]: number } = {}; let cardTypeStart: { [camera: string]: number } = {};
Object.values(hourlyTimeline["hours"][hour]).forEach((i) => { Object.values(hourlyTimeline["hours"][hour]).forEach((i) => {
if (i.timestamp > (cardTypeStart[i.camera] ?? 0) + GROUP_SECONDS) { if (i.timestamp > (cardTypeStart[i.camera] ?? 0) + GROUP_SECONDS) {
@ -25,10 +25,10 @@ export function getHourlyTimelineData(
const groupKey = `${i.source_id}-${cardTypeStart[i.camera]}`; const groupKey = `${i.source_id}-${cardTypeStart[i.camera]}`;
if (groupKey in source_to_types) { if (groupKey in sourceToTypes) {
source_to_types[groupKey].push(i.class_type); sourceToTypes[groupKey].push(i.class_type);
} else { } else {
source_to_types[groupKey] = [i.class_type]; sourceToTypes[groupKey] = [i.class_type];
} }
}); });
@ -61,7 +61,7 @@ export function getHourlyTimelineData(
let add = true; let add = true;
if (detailLevel == "normal") { if (detailLevel == "normal") {
if ( if (
source_to_types[sourceKey].length > 1 && sourceToTypes[sourceKey].length > 1 &&
["active", "attribute", "gone", "stationary", "visible"].includes( ["active", "attribute", "gone", "stationary", "visible"].includes(
i.class_type i.class_type
) )
@ -70,8 +70,8 @@ export function getHourlyTimelineData(
} }
} else if (detailLevel == "extra") { } else if (detailLevel == "extra") {
if ( if (
source_to_types[sourceKey].length > 1 && sourceToTypes[sourceKey].length > 1 &&
i.class_type in ["attribute", "gone", "visible"] ["attribute", "gone", "visible"].includes(i.class_type)
) { ) {
add = false; add = false;
} }