Renders an interactive player (MCP Apps UI component) so the user can watch
a transcoded result without leaving the conversation. When a job in this
conversation is already Done with a playable URL, call this in the same
reply as `list_jobs` — do not only paste the link. Pass a playback URL from
`list_jobs` / `get_job_status_detailed`: a progressive file (`.mp4` /
`.webm`) or an HLS/DASH manifest (`.m3u8` / `.mpd`). QuickTime / `.mov`
and a presigned manifest succeed with `client_note` (Chromium cannot play
that container, and a signed playlist cannot load its segments). The card
shows that sentence. Some clients cannot play HLS/DASH in the widget: the
call succeeds the same way. Do not retry `open_player` on that URL and do
not transcode only to get a player.
A manifest MUST be a PUBLIC URL. A presigned one cannot play, because the
signature covers only the playlist while its segments are relative and
would 403 (the player would spin forever). A public Media Storage object
plays from `cdn_url` on `list_objects`. A private progressive file
(`.mp4` / `.webm`, no `cdn_url`) plays from `get_download_url` — pass that
URL here and do not append anything. A private HLS/DASH manifest cannot;
do not substitute a presign. Job temp-storage output URLs from `list_jobs`
stay valid for playback.
It resolves the per-user Qencode Player license key (a public client-side
site-key) via the portal bridge and hands it to the widget; the actual
playback happens client-side in a sandboxed iframe.
Args:
source_url: https:// URL on the configured Qencode player allowlist —
mp4, webm, or an HLS/DASH manifest. A presigned manifest URL is rejected.
Pass a public manifest.
`.mov` / QuickTime is rejected — submit `output: "mp4"` instead.
poster_url: optional https:// image on the configured Qencode player
allowlist, shown before playback starts.
source_type: optional MIME hint, e.g. "video/mp4", "video/webm",
"application/x-mpegURL" or "application/dash+xml". The player
infers a sensible default when omitted.
title: optional display title for the player.
The player accepts Qencode-hosted video and poster URLs: the fixed storage
and CDN hosts, plus public Media Storage hosts
`*.media-storage.us-west.qencode.com` and
`*.media-storage.eu-central.qencode.com` (`cdn_url` from `list_objects`).
Another host still returns a result, with no license key: `client_note`
says this chat can only play Qencode-hosted video, and the card shows
that sentence instead of a player. Do not transcode or upload the file
unless the user asks.
Follow `client_note` when it is set — do not improvise:
- Presigned manifest: re-open the player on the public URL of the same
playlist (see above). Do not transcode to mp4 to dodge it.
- QuickTime / `.mov`: do NOT retry `open_player`. Tell the user in-chat
playback needs MP4, then submit `output: "mp4"` (not `repack` +
`container: "mov"`) and open the resulting `.mp4`.
- Unlisted origin: the result is the note above, not an error. Do not
retry `open_player` on that URL. A public Media Storage object in
us-west or eu-central uses `cdn_url`.
When the result carries a non-null `client_note`, pass its point on to the
user in the same reply. It describes how THIS client presents the player —
e.g. hosts that put the widget in a collapsed tool-call block, where the
user sees no video until they expand it.
Note: only public / temporary-storage outputs are supported for now.
Signed-cookie / DRM playback does not work inside the chat sandbox yet.