place.stream.media.finalizeLivestream
Turn a finished livestream into a VOD. The server concatenates the MUXL segments it recorded for the livestream(s) into a single content blob, derives the playback sidecars, and publishes the place.stream.media.track records. By default it leaves a draft VOD the streamer publishes later via place.stream.vod.publishDraft; with publish set it publishes the place.stream.video record as soon as the VOD is finalized. The caller must be the streamer, or a moderator they have granted livestream.manage; every record is written with the streamer's session.
Details · procedure
| Kind | procedure |
|---|---|
| Authority | media.stream.place |
| Indexed |
Procedure
procedure · POSTInput
application/jsondescription
stringDescription of the video record.
maxLength: 10000
endLivestream
booleanAlso end any of the livestream records that were never stopped, so the streamer's page stops reading as live.
default: false
livestream
string · at-uriAT-URI of the place.stream.livestream record to finalize into a VOD. Either this or livestreams is required.
livestreams
arraySeveral livestream records whose recordings make up one VOD: a streamer who started a new record mid-stream splits the recording across them. Recordings are concatenated in the records' creation order, whatever order they are listed in. All must belong to one streamer.
publish
booleanPublish the place.stream.video record as soon as the VOD is finalized, instead of leaving a draft.
default: false
title
stringTitle of the video record; the first livestream's title when empty.
maxLength: 1000
Output
application/jsondraftUri
stringThe ats:// URI of the draft VOD created for this finalize, when publish is not set. The draft reaches status 'ready' when processing completes.
ended
arrayLivestream records that are now ended (already, or by endLivestream).
livestreams
arrayThe livestream records the VOD is made of, in recording order.
objects
integerHow many recorded objects will be concatenated.
Identifier for the finalize job. Retained for backwards compatibility; the draft flow no longer requires the client to poll getUploadStatus.
Errors
LivestreamNotFound
No livestream with the given URI is known to this node, or the livestreams belong to different streamers.
NoRecording
The livestream has no recorded MUXL segments to finalize (recording was not enabled, or none completed).
NotPermitted
The caller is neither the streamer nor a moderator with livestream.manage from them.
Similar lexicons
semantic matchLexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
Publish a place.stream.video record for a finished upload, server-side. The caller supplies the record it would otherwise putRecord itself; the server overrides the fields it is authoritative about (source tracks and durationMs, taken from the processed upload) and, if the record carries no thumb, generates one from the video and attaches it. The record is written to the authenticated user's repo. The caller must own the upload, or hold livestream.manage from its owner; the record is written wit
-
Promote a ready draft VOD to a public place.stream.video record. The server carries over source and durationMs from the draft, backfills a generated thumbnail if the draft has none, writes the video record via putRecord, then deletes the draft.
-
Rewrite a place.stream.video record in place: retitle, redescribe or retag it, or point it at a finished upload's tracks (publishing them if the upload has none yet: the repair for a record published without tracks, or the way to point a record at a re-finalized VOD). Fields left out are kept; an empty description or tag list clears it. The caller must be the record's owner or hold livestream.manage from them; the record is written with the owner's session.
-
A streamer's place.stream.video records (read from their PDS) and this node's uploads for them: everything updateVideo, deleteVideo and publishVideo take. The caller must be the streamer or hold livestream.manage from them.
-
A draft VOD: pre-publication video metadata and processing state. Modeled as a permissioned-data-style record (CBOR-serialized, addressed by an ats:// URI) stored in statedb until the permissioned-data spec ships (bluesky-social/proposals PR #94, the 0016-permissioned-data proposal). Publishing promotes it to a public place.stream.video record.