Skip to content

place.stream.livestream

Lexicon Version: 1

Type: record

Record announcing a livestream is happening

Record Key: tid

Record Properties:

NameTypeReq’dDescriptionConstraints
titlestringThe title of the livestream, as it will be announced to followers.Max Length: 1400
Max Graphemes: 140
urlstringThe URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream.Format: uri
createdAtstringClient-declared timestamp when this livestream started.Format: datetime
lastSeenAtstringClient-declared timestamp when this livestream was last seen by the Streamplace station.Format: datetime
endedAtstringClient-declared timestamp when this livestream ended. Ended livestreams are not supposed to start up again.Format: datetime
idleTimeoutSecondsintegerTime in seconds after which this livestream should be automatically ended if idle. Zero means no timeout.
postcom.atproto.repo.strongRefThe post that announced this livestream.
agentstringThe source of the livestream, if available, in a User Agent format: <product> / <product-version> <comment> e.g. Streamplace/0.7.5 iOS
canonicalUrlstringThe primary URL where this livestream can be viewed, if available.Format: uri
thumbblobAccept: image/*
Max Size: 1000000 bytes
notificationSettingsplace.stream.livestream#notificationSettings

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
pushNotificationbooleanWhether this livestream should trigger a push notification to followers.

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
uristringFormat: at-uri
cidstringFormat: cid
authorapp.bsky.actor.defs#profileViewBasic
recordunknown
indexedAtstringFormat: datetime
viewerCount#viewerCountThe number of viewers watching this livestream. Use when you can’t reasonably use #viewerCount directly.

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
countinteger

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
teleportUristringThe URI of the teleport recordFormat: at-uri
sourceapp.bsky.actor.defs#profileViewBasicThe streamer who is teleporting their viewers here
chatProfileplace.stream.chat.profileThe chat profile of the source streamer
viewerCountintegerHow many viewers are arriving from this teleport
startsAtstringWhen this teleport startedFormat: datetime

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
teleportUristringThe URI of the teleport record that was canceledFormat: at-uri
reasonstringWhy this teleport was canceledEnum: deleted, denied, expired

Type: object

Properties:

NameTypeReq’dDescriptionConstraints
livestreamUnion of:
  #livestreamView
  #viewerCount
  #teleportArrival
  #teleportCanceled
  place.stream.defs#blockView
  place.stream.defs#renditions
  place.stream.defs#rendition
  place.stream.chat.defs#messageView

{
"lexicon": 1,
"id": "place.stream.livestream",
"defs": {
"main": {
"type": "record",
"description": "Record announcing a livestream is happening",
"key": "tid",
"record": {
"type": "object",
"required": ["title", "createdAt"],
"properties": {
"title": {
"type": "string",
"maxLength": 1400,
"maxGraphemes": 140,
"description": "The title of the livestream, as it will be announced to followers."
},
"url": {
"type": "string",
"format": "uri",
"description": "The URL where this stream can be found. This is primarily a hint for other Streamplace nodes to locate and replicate the stream."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this livestream started."
},
"lastSeenAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this livestream was last seen by the Streamplace station."
},
"endedAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this livestream ended. Ended livestreams are not supposed to start up again."
},
"idleTimeoutSeconds": {
"type": "integer",
"description": "Time in seconds after which this livestream should be automatically ended if idle. Zero means no timeout."
},
"post": {
"type": "ref",
"ref": "com.atproto.repo.strongRef",
"description": "The post that announced this livestream."
},
"agent": {
"type": "string",
"description": "The source of the livestream, if available, in a User Agent format: `<product> / <product-version> <comment>` e.g. Streamplace/0.7.5 iOS"
},
"canonicalUrl": {
"type": "string",
"format": "uri",
"description": "The primary URL where this livestream can be viewed, if available."
},
"thumb": {
"type": "blob",
"accept": ["image/*"],
"maxSize": 1000000
},
"notificationSettings": {
"type": "ref",
"ref": "place.stream.livestream#notificationSettings"
}
}
}
},
"notificationSettings": {
"type": "object",
"required": [],
"properties": {
"pushNotification": {
"type": "boolean",
"description": "Whether this livestream should trigger a push notification to followers."
}
}
},
"livestreamView": {
"type": "object",
"required": ["uri", "cid", "author", "record", "indexedAt"],
"properties": {
"uri": {
"type": "string",
"format": "at-uri"
},
"cid": {
"type": "string",
"format": "cid"
},
"author": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewBasic"
},
"record": {
"type": "unknown"
},
"indexedAt": {
"type": "string",
"format": "datetime"
},
"viewerCount": {
"type": "ref",
"description": "The number of viewers watching this livestream. Use when you can't reasonably use #viewerCount directly.",
"ref": "#viewerCount"
}
}
},
"viewerCount": {
"type": "object",
"required": ["count"],
"properties": {
"count": {
"type": "integer"
}
}
},
"teleportArrival": {
"type": "object",
"required": ["teleportUri", "source", "viewerCount", "startsAt"],
"properties": {
"teleportUri": {
"type": "string",
"format": "at-uri",
"description": "The URI of the teleport record"
},
"source": {
"type": "ref",
"ref": "app.bsky.actor.defs#profileViewBasic",
"description": "The streamer who is teleporting their viewers here"
},
"chatProfile": {
"type": "ref",
"ref": "place.stream.chat.profile",
"description": "The chat profile of the source streamer"
},
"viewerCount": {
"type": "integer",
"description": "How many viewers are arriving from this teleport"
},
"startsAt": {
"type": "string",
"format": "datetime",
"description": "When this teleport started"
}
}
},
"teleportCanceled": {
"type": "object",
"required": ["teleportUri", "reason"],
"properties": {
"teleportUri": {
"type": "string",
"format": "at-uri",
"description": "The URI of the teleport record that was canceled"
},
"reason": {
"type": "string",
"enum": ["deleted", "denied", "expired"],
"description": "Why this teleport was canceled"
}
}
},
"streamplaceAnything": {
"type": "object",
"required": ["livestream"],
"properties": {
"livestream": {
"type": "union",
"refs": [
"#livestreamView",
"#viewerCount",
"#teleportArrival",
"#teleportCanceled",
"place.stream.defs#blockView",
"place.stream.defs#renditions",
"place.stream.defs#rendition",
"place.stream.chat.defs#messageView"
]
}
}
}
}
}