94 lines
3.7 KiB
Markdown
94 lines
3.7 KiB
Markdown
# ytLive — Task List
|
|
|
|
## TASK 1 — Initial Scaffold
|
|
|
|
**Goal:** Working C# / WPF project with MVVM architecture, dark-theme main window, and YouTube service stubs.
|
|
|
|
### Status: ✅ Done
|
|
- Models: Scene, Source, StreamConfig, StreamHealth, YouTubeChannel, ChatMessage
|
|
- Services: YouTubeAuthService (OAuth2), YouTubeStreamService (broadcast/health), YouTubeChatService (chat polling)
|
|
- MainViewModel: scene management, stream controls, chat
|
|
- MainWindow: scene/source panel, preview area, chat panel, status bar
|
|
- Clean build, 0 warnings (WSL + Windows)
|
|
|
|
---
|
|
|
|
## TASK 2 — YouTube OAuth2 Authentication
|
|
|
|
**Goal:** Fully working Google OAuth2 flow — user clicks "YouTube", browser opens, authorization callback lands, channel info is stored.
|
|
|
|
**Design constraint:** Sign-in must NEVER block core exploration. Users can build scenes, add sources, and audition the software without authenticating. But **going live requires authentication** — "Go Live" only appears once connected. OAuth is what unlocks the actual broadcast (plus live chat, scheduling, and YouTube-side health).
|
|
|
|
### Requirements:
|
|
|
|
1. **Google Cloud OAuth credentials** — client ID + secret (user provides; needs "Localhost" redirect URI)
|
|
2. **Local HTTP listener** — `HttpListener` on `http://localhost:PORT/oauth2/callback` to catch the redirect
|
|
3. **Browser launch** — open the authorization URL in the default browser
|
|
4. **Token persistence** — store access/refresh tokens securely (Windows DPAPI), reload on startup
|
|
5. **UI state** — account name/avatar shown when connected; "sign in (optional)" affordance, never a gate
|
|
6. **Go Live gated on auth** — "Go Live" button only visible once authenticated; scene building works without it
|
|
|
|
### Tests:
|
|
|
|
- Mock token exchange response, verify channel info parsed
|
|
- Verify token refresh triggers when near expiry
|
|
- Verify credential load/save roundtrip
|
|
|
|
### Status: Not started
|
|
|
|
---
|
|
|
|
## TASK 3 — Capture Pipeline (Scenes/Sources)
|
|
|
|
**Goal:** Real video preview in the center panel — display capture, window capture, webcam, images, text overlays, composited per scene.
|
|
|
|
### Requirements:
|
|
|
|
1. **Display capture** — Windows.Graphics.Capture API (WinRT), enumerate monitors
|
|
2. **Window capture** — enumerate top-level windows, capture per-window
|
|
3. **Webcam** — MediaCapture (WinRT) with device enumeration
|
|
4. **Image / text overlay** — static sources positioned/scaled/opacity
|
|
5. **Scene compositing** — per-scene source layering (z-order), preview rendered via D3DImage or MediaElement
|
|
6. **Drag/drop source placement** — intuitive, visual (per design principle)
|
|
|
|
### Status: Not started
|
|
|
|
---
|
|
|
|
## TASK 4 — RTMP Ingest to YouTube
|
|
|
|
**Goal:** Push encoded video to YouTube's RTMP ingest.
|
|
|
|
### Requirements:
|
|
|
|
1. **Encoding** — H.264 (hardware via NVENC/AMD, fallback x264) + AAC audio
|
|
2. **RTMP push** — FFmpeg subprocess or native RTMP library
|
|
3. **Stream key management** — save keys securely, prefill default YouTube ingest URL `rtmp://a.rtmp.youtube.com/live2`
|
|
4. **Health stats** — bitrate, FPS, dropped frames reported live in the bottom bar
|
|
5. **One-click go live** — defaults that work out of the box
|
|
|
|
### Status: Not started
|
|
|
|
---
|
|
|
|
## TASK 5 — YouTube Live Stream Management
|
|
|
|
**Goal:** Create/bind broadcasts, monitor YouTube-side stream health.
|
|
|
|
### Requirements:
|
|
|
|
1. **Broadcast creation** — title/description/visibility via API
|
|
2. **Stream binding** — create stream, bind to broadcast
|
|
3. **Health monitoring** — poll `liveBroadcasts` lifecycle status, surface YouTube health messages
|
|
4. **Live chat** — poll `liveChat/messages`, render in right panel, support Super Chat + membership badges
|
|
|
|
### Status: Not started
|
|
|
|
---
|
|
|
|
## Backlog (future versions)
|
|
|
|
- v0.2 — Recording to local file
|
|
- v0.3 — Stream scheduling
|
|
- v0.4 — Multi-destination restreaming
|