full diff

place.stream.media.viewCount

stream.place +0 −0
From
bafyreievtulq273ls7aq5oyhtjsc2cpfkl5axx75j2frcaujw2tfe5f5wq indexed 2026-11-04 01:29 UTC View this version
To
bafyreievtulq273ls7aq5oyhtjsc2cpfkl5axx75j2frcaujw2tfe5f5wq indexed 2026-11-04 01:29 UTC View this version

Compatibility

backward compatible No changes detected.

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "main": {
55 "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.",
66 "key": "any",
77 "record": {
88 "properties": {
99 "count": {
1010 "description": "Number of distinct sessions the reporting node observed as a view over [windowStart, windowEnd).",
1111 "minimum": 0,
1212 "type": "integer"
1313 },
1414 "indexedAt": {
1515 "description": "When the reporting node ran this aggregation. Useful for ordering successive reports.",
1616 "format": "datetime",
1717 "type": "string"
1818 },
1919 "tracks": {
2020 "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.",
2121 "items": {
2222 "ref": "#trackUsage",
2323 "type": "ref"
2424 },
2525 "type": "array"
2626 },
2727 "video": {
2828 "description": "AT-URI of the place.stream.video this count is for.",
2929 "format": "at-uri",
3030 "type": "string"
3131 },
3232 "windowEnd": {
3333 "description": "Exclusive upper bound of the aggregation window.",
3434 "format": "datetime",
3535 "type": "string"
3636 },
3737 "windowStart": {
3838 "description": "Inclusive lower bound of the aggregation window.",
3939 "format": "datetime",
4040 "type": "string"
4141 }
4242 },
4343 "required": [
4444 "video",
4545 "count",
4646 "windowStart",
4747 "windowEnd",
4848 "indexedAt"
4949 ],
5050 "type": "object"
5151 },
5252 "type": "record"
5353 },
5454 "trackUsage": {
5555 "description": "One row of the tracks array: bytes + duration transferred for a single place.stream.media.track record over the window.",
5656 "properties": {
5757 "bytes": {
5858 "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.",
5959 "minimum": 0,
6060 "type": "integer"
6161 },
6262 "durationMs": {
6363 "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.",
6464 "minimum": 0,
6565 "type": "integer"
6666 },
6767 "track": {
6868 "description": "Strong reference to the place.stream.media.track record whose bytes were transferred.",
6969 "ref": "com.atproto.repo.strongRef",
7070 "type": "ref"
7171 }
7272 },
7373 "required": [
7474 "track",
7575 "bytes",
7676 "durationMs"
7777 ],
7878 "type": "object"
7979 }
8080 },
8181 "id": "place.stream.media.viewCount",
8282 "lexicon": 1
8383}