60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# ECP-0095: Native macOS Webview First for NBC Auth and Playback
|
|
|
|
Status: Proposed
|
|
|
|
## Decision
|
|
|
|
On macOS, the Tauri app should attempt NBC playback through an in-app `WebviewWindow` backed by
|
|
`WKWebView` before launching an external browser.
|
|
|
|
The native path will:
|
|
|
|
- create a dedicated NBC auth/player window inside the app with a persistent webview data
|
|
directory
|
|
- keep Adobe Pass / MVPD interaction inside the native app window, including popup sign-in flows
|
|
- use native `WKWebView` JavaScript evaluation and snapshot APIs to drive readiness checks and
|
|
capture rendered frames for ffmpeg
|
|
|
|
The existing Chrome-backed path remains as a fallback when native playback cannot become ready.
|
|
|
|
## Motivation
|
|
|
|
The first NBC implementation proved that browser-backed capture is the right source model, but it
|
|
still pushes authentication into an external Chrome session. For the desktop app, that is a worse
|
|
operator experience than a native in-app window and makes session management less coherent.
|
|
|
|
Tauri 2 already exposes the platform webview and, on macOS, gives access to the underlying
|
|
`WKWebView`. That is enough to move the login and capture loop in-process without redesigning the
|
|
rest of the CMAF ladder or MoQ publish flow.
|
|
|
|
## Scope
|
|
|
|
In scope:
|
|
|
|
- macOS-only `WKWebView` session creation for NBC sources
|
|
- popup/new-window handling for MVPD login flows
|
|
- native JavaScript probing plus native snapshot capture for the existing frame pipeline
|
|
- automatic fallback to the existing Chrome path when native playback fails to get ready
|
|
|
|
Out of scope:
|
|
|
|
- removing the Chrome fallback entirely
|
|
- guaranteeing DRM parity with Chrome across every NBC playback variant
|
|
- audio capture changes beyond the current video-first path
|
|
|
|
## Alternatives Considered
|
|
|
|
- Keep the external Chrome-only path. Rejected because the native app can host the auth/player
|
|
surface directly on macOS.
|
|
- Replace the entire source implementation with custom CEF/Chromium embedding. Rejected because it
|
|
is materially heavier than using Tauri's existing native webview APIs.
|
|
- Use an in-app webview only for login, then continue playback in Chrome. Rejected for the first
|
|
pass because it still splits operator state across two browser stacks.
|
|
|
|
## Rollout / Reversibility
|
|
|
|
- The change is additive and scoped to NBC handling in the Tauri app on macOS.
|
|
- If native playback proves unreliable for a given stream/auth path, the app falls back to the
|
|
existing Chrome implementation automatically.
|
|
- Roll back by removing the native webview path and retaining the Chrome-backed implementation from
|
|
ECP-0094.
|