place.stream.media.viewCount

did:web:stream.place

Documentation

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.

main record

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.

Record Key any Any valid record key

Properties

count integer Required

Number of distinct sessions the reporting node observed as a view over [windowStart, windowEnd).

minimum: 0
indexedAt string datetime Required

When the reporting node ran this aggregation. Useful for ordering successive reports.

tracks array of ref #trackUsage Optional

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.

video string at-uri Required

AT-URI of the place.stream.video this count is for.

windowEnd string datetime Required

Exclusive upper bound of the aggregation window.

windowStart string datetime Required

Inclusive lower bound of the aggregation window.

View raw schema
{
  "key": "any",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "video",
      "count",
      "windowStart",
      "windowEnd",
      "indexedAt"
    ],
    "properties": {
      "count": {
        "type": "integer",
        "minimum": 0,
        "description": "Number of distinct sessions the reporting node observed as a view over [windowStart, windowEnd)."
      },
      "video": {
        "type": "string",
        "format": "at-uri",
        "description": "AT-URI of the place.stream.video this count is for."
      },
      "tracks": {
        "type": "array",
        "items": {
          "ref": "#trackUsage",
          "type": "ref"
        },
        "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."
      },
      "indexedAt": {
        "type": "string",
        "format": "datetime",
        "description": "When the reporting node ran this aggregation. Useful for ordering successive reports."
      },
      "windowEnd": {
        "type": "string",
        "format": "datetime",
        "description": "Exclusive upper bound of the aggregation window."
      },
      "windowStart": {
        "type": "string",
        "format": "datetime",
        "description": "Inclusive lower bound of the aggregation window."
      }
    }
  },
  "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."
}
trackUsage object

One row of the tracks array: bytes + duration transferred for a single place.stream.media.track record over the window.

Properties

bytes integer Required

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
durationMs integer Required

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
track ref com.atproto.repo.strongRef Required

Strong reference to the place.stream.media.track record whose bytes were transferred.

View raw schema
{
  "type": "object",
  "required": [
    "track",
    "bytes",
    "durationMs"
  ],
  "properties": {
    "bytes": {
      "type": "integer",
      "minimum": 0,
      "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."
    },
    "track": {
      "ref": "com.atproto.repo.strongRef",
      "type": "ref",
      "description": "Strong reference to the place.stream.media.track record whose bytes were transferred."
    },
    "durationMs": {
      "type": "integer",
      "minimum": 0,
      "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."
    }
  },
  "description": "One row of the tracks array: bytes + duration transferred for a single place.stream.media.track record over the window."
}

Lexicon Garden

@