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.

Repository @stream.place did:plc:rbvrr34edl5ddpuwcubjiost not from the namespace authority
Details · procedure
Kindprocedure
Authoritymedia.stream.place
Indexed

Procedure

procedure · POST

Input

application/json

Description of the video record.

  • maxLength: 10000

Also end any of the livestream records that were never stopped, so the streamer's page stops reading as live.

  • default: false

livestream

string · at-uri

AT-URI of the place.stream.livestream record to finalize into a VOD. Either this or livestreams is required.

Several 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.

itemsstring · at-uri

publish

boolean

Publish the place.stream.video record as soon as the VOD is finalized, instead of leaving a draft.

  • default: false

title

string

Title of the video record; the first livestream's title when empty.

  • maxLength: 1000

Output

application/json

draftUri

string

The ats:// URI of the draft VOD created for this finalize, when publish is not set. The draft reaches status 'ready' when processing completes.

ended

array

Livestream records that are now ended (already, or by endLivestream).

itemsstring · at-uri

The livestream records the VOD is made of, in recording order.

itemsstring · at-uri

objects

integer

How many recorded objects will be concatenated.

uploadId

requiredstring

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 match

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • place.stream.media.publishVideo

    procedure not from the namespace authority

    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

  • place.stream.vod.publishDraft

    procedure not from the namespace authority

    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.

  • place.stream.media.updateVideo

    procedure not from the namespace authority

    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.

  • place.stream.media.listVideos

    query not from the namespace authority

    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.

  • place.stream.vod.draftVideo

    record not from the namespace authority

    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.