Add Frigate-backed starter camera config
This commit is contained in:
18
README.md
18
README.md
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
visionLabs Roku is a private Roku app scaffold for viewing home security cameras on a TV.
|
visionLabs Roku is a private Roku app scaffold for viewing home security cameras on a TV.
|
||||||
|
|
||||||
|
The current starter path is Frigate-backed, with Roku reading a static inventory of cameras that are managed by Frigate instead of embedding raw camera credentials in the app.
|
||||||
|
|
||||||
## Product direction
|
## Product direction
|
||||||
|
|
||||||
- Brand family follows the user's existing `Labs` naming pattern.
|
- Brand family follows the user's existing `Labs` naming pattern.
|
||||||
@@ -12,7 +14,7 @@ visionLabs Roku is a private Roku app scaffold for viewing home security cameras
|
|||||||
## Technical direction
|
## Technical direction
|
||||||
|
|
||||||
- Roku SceneGraph app
|
- Roku SceneGraph app
|
||||||
- Camera feeds delivered as HLS where possible
|
- Camera feeds delivered from Frigate in a Roku-friendly format, ideally HLS
|
||||||
- Static JSON config for the first prototype
|
- Static JSON config for the first prototype
|
||||||
- Future backend for editing, persistence, and auth
|
- Future backend for editing, persistence, and auth
|
||||||
|
|
||||||
@@ -22,16 +24,18 @@ visionLabs Roku is a private Roku app scaffold for viewing home security cameras
|
|||||||
- `source/main.brs` - app entry point
|
- `source/main.brs` - app entry point
|
||||||
- `components/MainScene.xml` - initial SceneGraph UI
|
- `components/MainScene.xml` - initial SceneGraph UI
|
||||||
- `components/MainScene.brs` - scene behavior
|
- `components/MainScene.brs` - scene behavior
|
||||||
- `config/cameras.json` - static sample camera config
|
- `config/cameras.json` - static Frigate-backed starter camera config
|
||||||
|
- `docs/FRIGATE_SETUP.md` - notes for mapping cameras through Frigate
|
||||||
- `docs/ROADMAP.md` - delivery phases and constraints
|
- `docs/ROADMAP.md` - delivery phases and constraints
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
Roku is not a great target for raw RTSP feeds. The clean path is to expose camera streams as HLS, either directly from the NVR or through a relay/transcoder layer.
|
Roku is not a great target for raw RTSP feeds. With Frigate in the middle, the clean path is to let Frigate manage discovery, auth, and stream brokering, then expose a Roku-friendly live feed format from there.
|
||||||
|
|
||||||
## Next steps
|
## Next steps
|
||||||
|
|
||||||
1. Replace sample camera URLs in `config/cameras.json`
|
1. Set the real Frigate base URL in `config/cameras.json`
|
||||||
2. Load config into the UI
|
2. Map the four starter cameras in Frigate using the same IDs as the Roku config
|
||||||
3. Render a static multi-camera grid
|
3. Load config into the UI
|
||||||
4. Add edit mode and persistence strategy
|
4. Render a static multi-camera grid
|
||||||
|
5. Add edit mode and persistence strategy
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
translation="[80, 260]"
|
translation="[80, 260]"
|
||||||
width="1760"
|
width="1760"
|
||||||
height="120"
|
height="120"
|
||||||
text="Project scaffold is live. Next step: load static cameras.json and render HLS camera tiles."
|
text="Project scaffold is live. Next step: load Frigate camera config and render the first Roku camera grid."
|
||||||
font="font:MediumSystemFont"
|
font="font:MediumSystemFont"
|
||||||
color="0x8B949EFF" />
|
color="0x8B949EFF" />
|
||||||
</children>
|
</children>
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
{
|
{
|
||||||
"appName": "visionLabs",
|
"appName": "visionLabs",
|
||||||
|
"backend": {
|
||||||
|
"type": "frigate",
|
||||||
|
"baseUrl": "http://YOUR-FRIGATE-HOST:5000",
|
||||||
|
"notes": "Keep raw camera credentials in Frigate or go2rtc, not in the Roku repo."
|
||||||
|
},
|
||||||
"layout": {
|
"layout": {
|
||||||
"type": "grid",
|
"type": "grid",
|
||||||
"columns": 2,
|
"columns": 2,
|
||||||
@@ -7,28 +12,32 @@
|
|||||||
},
|
},
|
||||||
"cameras": [
|
"cameras": [
|
||||||
{
|
{
|
||||||
"id": "front-door",
|
"id": "cam195",
|
||||||
"name": "Front Door",
|
"name": "Cam 195",
|
||||||
"streamUrl": "https://example.invalid/front-door/index.m3u8",
|
"frigateCamera": "cam195",
|
||||||
"snapshotUrl": "https://example.invalid/front-door.jpg"
|
"host": "192.168.0.195",
|
||||||
|
"onvif": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "driveway",
|
"id": "cam196",
|
||||||
"name": "Driveway",
|
"name": "Cam 196",
|
||||||
"streamUrl": "https://example.invalid/driveway/index.m3u8",
|
"frigateCamera": "cam196",
|
||||||
"snapshotUrl": "https://example.invalid/driveway.jpg"
|
"host": "192.168.0.196",
|
||||||
|
"onvif": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "garage",
|
"id": "cam201",
|
||||||
"name": "Garage",
|
"name": "Cam 201",
|
||||||
"streamUrl": "https://example.invalid/garage/index.m3u8",
|
"frigateCamera": "cam201",
|
||||||
"snapshotUrl": "https://example.invalid/garage.jpg"
|
"host": "192.168.0.201",
|
||||||
|
"onvif": true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "back-yard",
|
"id": "cam228",
|
||||||
"name": "Back Yard",
|
"name": "Cam 228",
|
||||||
"streamUrl": "https://example.invalid/back-yard/index.m3u8",
|
"frigateCamera": "cam228",
|
||||||
"snapshotUrl": "https://example.invalid/back-yard.jpg"
|
"host": "192.168.0.228",
|
||||||
|
"onvif": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
37
docs/FRIGATE_SETUP.md
Normal file
37
docs/FRIGATE_SETUP.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
# visionLabs Frigate setup
|
||||||
|
|
||||||
|
This project now assumes Frigate is the backend that owns camera auth, camera discovery, and stream handling.
|
||||||
|
|
||||||
|
## Starter inventory
|
||||||
|
|
||||||
|
The first four cameras are currently modeled as:
|
||||||
|
|
||||||
|
- `cam195` -> `192.168.0.195`
|
||||||
|
- `cam196` -> `192.168.0.196`
|
||||||
|
- `cam201` -> `192.168.0.201`
|
||||||
|
- `cam228` -> `192.168.0.228`
|
||||||
|
|
||||||
|
All four are ONVIF-capable and should be added to Frigate using matching camera IDs where possible.
|
||||||
|
|
||||||
|
## Important rule
|
||||||
|
|
||||||
|
Do not commit raw camera passwords to this repo.
|
||||||
|
|
||||||
|
Keep camera credentials inside:
|
||||||
|
|
||||||
|
- Frigate config
|
||||||
|
- go2rtc config
|
||||||
|
- a local secret file outside version control
|
||||||
|
|
||||||
|
## What to update next
|
||||||
|
|
||||||
|
1. Set the real Frigate base URL in `config/cameras.json`
|
||||||
|
2. Confirm the Frigate camera IDs match `cam195`, `cam196`, `cam201`, and `cam228`
|
||||||
|
3. Decide which Frigate live endpoint format the Roku app should consume first
|
||||||
|
4. Add snapshot and live tile loading in the SceneGraph UI
|
||||||
|
|
||||||
|
## Why this shape works
|
||||||
|
|
||||||
|
- Roku does not want to manage ONVIF directly
|
||||||
|
- Roku is happier when Frigate handles the camera-side protocol mess
|
||||||
|
- This keeps the app focused on layout, browsing, and playback
|
||||||
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
## Phase 1
|
## Phase 1
|
||||||
|
|
||||||
- Static packaged camera config
|
- Static packaged Frigate-backed camera config
|
||||||
- Simple Roku SceneGraph shell
|
- Simple Roku SceneGraph shell
|
||||||
- One screen with a fixed camera grid
|
- One screen with a fixed camera grid
|
||||||
- HLS-backed streams only
|
- Frigate-managed live feeds in a Roku-friendly format
|
||||||
|
|
||||||
## Phase 2
|
## Phase 2
|
||||||
|
|
||||||
@@ -28,5 +28,6 @@
|
|||||||
## Constraints
|
## Constraints
|
||||||
|
|
||||||
- Roku does not directly fit raw RTSP workflows well
|
- Roku does not directly fit raw RTSP workflows well
|
||||||
|
- Frigate should own camera auth and camera-side protocol details
|
||||||
- HLS is the safest first-class playback target
|
- HLS is the safest first-class playback target
|
||||||
- Packaged JSON is fine for V1 but not enough for runtime editing
|
- Packaged JSON is fine for V1 but not enough for runtime editing
|
||||||
|
|||||||
Reference in New Issue
Block a user