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": 18383
}