An entry for the streamplace vod showcase
README.md

AtmosphereConf VOD Bundle#

An at-run bundle providing video listing, metadata, and muxed HLS playlist generation for AtmosphereConf 2026 recordings.

Endpoints#

listVideos#

List all available VOD recordings.

curl http://localhost:3000/bundle/did:plc:xxx/atmosphereconf-vod/latest/listVideos

Response:

{
  "videos": [
    {
      "uri": "at://did:plc:xxx/place.stream.video/abc123",
      "title": "Opening Keynote",
      "creator": "did:plc:yyy",
      "duration": 3600000000000,
      "createdAt": "2026-03-30T09:00:00Z"
    }
  ]
}

getVideo#

Get metadata for a specific video.

curl -X POST http://localhost:3000/bundle/did:plc:xxx/atmosphereconf-vod/latest/getVideo \
  -H "Content-Type: application/json" \
  -d '{"uri": "at://did:plc:xxx/place.stream.video/abc123"}'

getVideoStreams#

Get available quality levels and audio tracks.

curl -X POST http://localhost:3000/bundle/did:plc:xxx/atmosphereconf-vod/latest/getVideoStreams \
  -H "Content-Type: application/json" \
  -d '{"uri": "at://did:plc:xxx/place.stream.video/abc123"}'

Response:

{
  "uri": "at://...",
  "streams": [
    {
      "quality": "1080p",
      "width": 1920,
      "height": 1080,
      "bandwidth": 2996327,
      "codecs": "avc1.42c01f,mp4a.40.2",
      "frameRate": 59.498
    }
  ],
  "audioTracks": [
    { "name": "opus", "default": false },
    { "name": "mp4a.40.2", "default": true }
  ]
}

getPlaylist#

Generate a muxed HLS master playlist combining video and audio tracks.

curl -X POST http://localhost:3000/bundle/did:plc:xxx/atmosphereconf-vod/latest/getPlaylist \
  -H "Content-Type: application/json" \
  -d '{"uri": "at://did:plc:xxx/place.stream.video/abc123", "quality": "1080p"}'

Response (HLS m3u8):

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="opus",DEFAULT=NO,...
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="mp4a.40.2",DEFAULT=YES,...
#EXT-X-STREAM-INF:BANDWIDTH=2996327,CODECS="avc1.42c01f,mp4a.40.2",...
https://vod-beta.stream.place/...

Permissions#

{
  "net": [
    "vod-beta.stream.place",
    "iameli.com",
    "plc.directory"
  ]
}

Build & Deploy#

# Build
bun build apps/vod/src/index.ts --outfile=apps/vod/dist/bundle.js --target=browser

# Deploy
bun packages/at-run/cli/src/index.ts deploy apps/vod/dist/bundle.js

Usage with Frontend#

Point your hls.js player at the getPlaylist endpoint:

const hls = new Hls()
const playlistUrl = `${RUNNER_URL}/bundle/${DID}/atmosphereconf-vod/latest/getPlaylist?uri=${encodeURIComponent(videoUri)}&quality=1080p`
hls.loadSource(playlistUrl)
hls.attachMedia(videoElement)