2.4 KiB
2.4 KiB
Services — index
External-facing logic: YouTube API, persistence. See
schema.md for the memory-map conventions.
| File | Purpose |
|---|---|
YouTubeAuthService.cs |
OAuth2 via Google: loopback callback (http://localhost:8765/oauth2/callback), token exchange, refresh, channel fetch. Constructor takes optional HttpClient + sessionChanged callback (test seam + save hook); session persists via Helpers/TokenStore (DPAPI); ClearSession() signs out (called by MainViewModel.StopStream on End Livestream) |
YouTubeStreamService.cs |
Broadcast/stream management via the v3 API (enableAutoStart/Stop). Not yet switched to the variable reusable stream |
YouTubeChatService.cs |
Polls liveChat/messages, raises MessageReceived; IDisposable |
LayoutStore.cs |
SQLite persistence (Microsoft.Data.Sqlite) at %APPDATA%\ytLlive\ytLlive.db; assets stored as BLOBs keyed by SHA-256 content hash; save/open layout files; schema user_version 2 (Source.ClipShape/IsMirrored — added by ALTER TABLE for pre-v2 DBs) |
VideoFrame.cs |
Normalized CPU frame seam (Width/Height/tightly-packed BGRA byte[]) — the only pixel type the rest of the app knows about; future capture sources (screen, background-removed webcam) feed the same seam |
CameraDeviceInfo.cs |
(Id, DisplayName) for a physical capture device |
ICameraEnumerator.cs |
GetCamerasAsync() — seam so the picker/CameraManager never touch WinRT (tests inject fakes) |
ICameraFrameSource.cs |
StartAsync/StopAsync/FrameAvailable(VideoFrame) — seam for a running capture source |
MediaCaptureCameraEnumerator.cs |
WinRT enumeration via DeviceInformation.FindAllAsync(DeviceClass.VideoCapture) |
MediaCaptureFrameSource.cs |
CPU-first MediaCapture source (MemoryPreference = Cpu, BGRA8 via CreateFrameReaderAsync); frames arrive on a worker thread |
CameraManager.cs |
Webcam capture ownership: refcounted by DeviceId, one shared WriteableBitmap per camera, dispatcher-coalesced ~render-rate UI updates (latest-frame drop); PreviewBitmapChanged/CameraFailed events |
Related: constructed in ViewModels/MainViewModel.cs
(no DI container yet). Models in Models/index.md.
OAuth credentials live in Helpers/OAuthCredentials.cs.