Files
Piik/docs/research/platform-output.md
AAA 1332473513 feat: rename product and runtime to Piik
Rename the active product, Go module, binaries, configuration, protocols and documentation to Piik while retaining the TV mascot and existing media/room behavior.

Use one current private contract without old-name aliases. Preserve SQLite authority and copy compatible local settings once; other settings start fresh. Git-message cleanup and the infrastructure name cutover are coordinated with this phase, with original history and deployment data archived externally.

Validated locally with Web and Go checks, Windows capture compilation, matched Client/Server builds, packaged Client control handshake and history-rewrite integrity checks. Skip duplicate hosted CI for this owner-authorized local release.

[skip ci]
2026-09-10 11:10:12 +08:00

4.5 KiB

Browser Platform Output

Last reviewed: 2026-08-31

This document owns evidence for showing a live Piik session on an AirPlay, Cast, or Presentation API display. It does not add a product output surface.

Current Decision

Do not add an application Cast or AirPlay button yet. Browser or operating-system tab/screen mirroring is already usable without Piik integration. The Web platform does not give the current video.srcObject = MediaStream a portable remote-playback contract.

The only application design worth a physical prototype is a custom Cast receiver acting as another authenticated Piik Viewer. It would receive its own WebRTC route and count toward room and endpoint capacity; it would not reuse or fling the controlling Browser's decoded video element.

Three Different Capabilities

System Or Tab Mirroring

Browser and operating-system UI can mirror a tab, window, screen, or media element. The W3C Remote Playback model explicitly permits this implementation shape but does not standardize its transport, latency, quality, lifecycle, or device coverage. Piik needs no adapter for it and cannot claim its result.

Media Remoting Or Flinging

Remote Playback selects a compatible source from an HTML media element's availability source set. The specification never defines MediaStream or srcObject as a remote playback source. Local Media Capture support for rendering a MediaStream in an HTML media element does not create a cross-device source.

The product implementations have the same boundary:

  • WebKit documents that AirPlay needs a unique playback URL; even local MSE/MMS data needs a separate HTTP/HLS alternative.
  • Google's default and styled Web Receivers load a media URL and document containers plus progressive HTTP, HLS, DASH, and SmoothStreaming. Their supported-media contract does not include a WebRTC MediaStream.

Creating an HLS, DASH, MSE, MediaRecorder, or WebCodecs bridge would introduce a second media plane, buffering, packaging, server delivery, codec policy, and cleanup. It is not a small output adapter for the current low-latency route.

Receiver As A Viewer

The Presentation API can ask a receiving user agent to load a presentation URL and provides two-way messaging between the controlling and receiving browsing contexts. A Google Custom Web Receiver is likewise a registered, hosted HTML5 application with custom messaging.

That makes a narrow architecture possible: launch a receiver page, deliver a short-lived room-scoped Viewer grant over the established control channel, and let that page join through the normal Piik Viewer and routing contracts. The grant must not appear in the presentation URL, logs, storage, or device metadata.

This is not accepted product behavior. Google's documented media matrix does not promise WebRTC in a Custom Web Receiver, the Presentation API is not a cross-Browser surface, and no target receiver has proved Piik's codec, autoplay, audio, network, or lifecycle requirements.

Physical Acceptance Gate

A prototype needs a named sender Browser and physical receiver. It must prove:

  • receiver-page HTTPS/WSS, RTCPeerConnection, H.264/VP8 negotiation, decoded progress, screen audio, autoplay, and user-visible failure;
  • end-to-end latency, cadence, resolution, recovery, pause/resume, and receiver teardown on Cast session end;
  • exact room admission, one Viewer identity, one route, endpoint-cap accounting, and no credential in URLs or retained receiver state; and
  • comparison with built-in tab/screen mirroring on the same sender and display.

Until that gate exists, feature detection alone cannot justify a control. A native helper, custom encoded transport, or server restream is not authorized by this research.

Primary Sources