place.stream.media.viewCount
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "A streamplace node's report of view counts for one place.stream.video over a closed time window. Published in the reporting node's server repo (not the streamer's), so a video served by multiple nodes accumulates multiple records — consumers are expected to sum across trusted reporters. The rkey is conventionally `<windowStart-as-tid>-<video-rkey>` so re-running the aggregator over the same window is idempotent. Counts represent the reporting node's best effort given the data it has; the `tracks` array carries the objective byte / duration totals it observed.",
"key": "any",
"record": {
"properties": {
"count": {
"description": "Number of distinct sessions the reporting node observed as a view over [windowStart, windowEnd).",
"minimum": 0,
"type": "integer"
},
"indexedAt": {
"description": "When the reporting node ran this aggregation. Useful for ordering successive reports.",
"format": "datetime",
"type": "string"
},
"tracks": {
"description": "Per-track totals of bytes + playback duration the reporting node served over the window. Each entry references the place.stream.media.track record whose bytes were transferred, so user-contributed tracks (transcripts, transcodes published by other accounts) attribute naturally to their own records.",
"items": {
"ref": "#trackUsage",
"type": "ref"
},
"type": "array"
},
"video": {
"description": "AT-URI of the place.stream.video this count is for.",
"format": "at-uri",
"type": "string"
},
"windowEnd": {
"description": "Exclusive upper bound of the aggregation window.",
"format": "datetime",
"type": "string"
},
"windowStart": {
"description": "Inclusive lower bound of the aggregation window.",
"format": "datetime",
"type": "string"
}
},
"required": [
"video",
"count",
"windowStart",
"windowEnd",
"indexedAt"
],
"type": "object"
},
"type": "record"
},
"trackUsage": {
"description": "One row of the tracks array: bytes + duration transferred for a single place.stream.media.track record over the window.",
"properties": {
"bytes": {
"description": "Total bytes served from this track over the window. Sum across attributed segment_requests' Range intersections with the track's segment offsets in the metafile.",
"minimum": 0,
"type": "integer"
},
"durationMs": {
"description": "Total playback duration served from this track, in milliseconds. Per HLS segment in the range: (overlap bytes / segment bytes) * segment duration, so partial-segment fetches credit a proportional share of duration.",
"minimum": 0,
"type": "integer"
},
"track": {
"description": "Strong reference to the place.stream.media.track record whose bytes were transferred.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
}
},
"required": [
"track",
"bytes",
"durationMs"
],
"type": "object"
}
},
"id": "place.stream.media.viewCount",
"lexicon": 1
}
Metadata
- DID
-
did:plc:gqtagsooi75obldmytuow57q - CID
-
bafyreievtulq273ls7aq5oyhtjsc2cpfkl5axx75j2frcaujw2tfe5f5wq - Indexed At
- 2026-08-20 16:29 UTC
- AT-URI
-
at://did:plc:gqtagsooi75obldmytuow57q/com.atproto.lexicon.schema/place.stream.media.viewCount
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
Get a hydrated view of a place.stream.video record — the record itself plus author info plus aggregated view counts summed across every reporting node we've indexed. View counts come from place.stream.media.viewCount …
-
Current view count for a livestream on a particular server.
-
Current viewer count for a livestream on a particular server. Record keys are streamer_did::server_did by convention.
-
A track for a video stream, either part of the source or a custom additional track. One of: video, audio, subtitles.