Playback
The Playback router provides video streaming and thumbnail access via presigned Backblaze B2 URLs. All endpoints return redirects to presigned URLs that expire after 1 hour.
No authentication required — endpoints use non-guessable UUIDs (job_id) as implicit authorization.
GET /playback/thumbnail/{job_id}
Section titled “GET /playback/thumbnail/{job_id}”Get a video thumbnail. Returns a 302 redirect to a presigned B2 URL for the JPG thumbnail.
Auth: None
| Path Param | Type | Required | Description |
|---|---|---|---|
job_id | string | Yes | The video’s job ID |
Response: 302 redirect to presigned URL
Thumbnails are stored at users/<user-id>/thumbnails/<job_id>.jpg.
curl -L https://api.lynxvizion.com/api/playback/thumbnail/a1b2c3d4-...Can be used directly in HTML:
<img src="https://api.lynxvizion.com/api/playback/thumbnail/a1b2c3d4-..." />HEAD /playback/stream/{job_id}
Section titled “HEAD /playback/stream/{job_id}”Check if an HLS stream is available for a video. Returns 200 if the manifest exists, 404 otherwise.
Auth: None
| Path Param | Type | Required | Description |
|---|---|---|---|
job_id | string | Yes | The video’s job ID |
Response: 200 (stream exists) or 404 (not ready)
Used by the video player to poll for HLS availability before switching from direct MP4 playback.
curl -I https://api.lynxvizion.com/api/playback/stream/a1b2c3d4-...GET /playback/stream/{job_id}
Section titled “GET /playback/stream/{job_id}”Get the HLS manifest (m3u8) with segment URLs rewritten to presigned B2 URLs.
Auth: None
| Path Param | Type | Required | Description |
|---|---|---|---|
job_id | string | Yes | The video’s job ID |
Response: application/vnd.apple.mpegurl
The raw m3u8 file is downloaded from B2, and each .ts segment reference is replaced with a presigned URL so that HLS.js / Video.js can fetch segments directly from B2.
#EXTM3U#EXT-X-VERSION:3#EXT-X-TARGETDURATION:6#EXTINF:6.000,https://s3.eu-central-003.backblazeb2.com/...seg_00001.ts?X-Amz-Signature=...#EXTINF:6.000,https://s3.eu-central-003.backblazeb2.com/...seg_00002.ts?X-Amz-Signature=...curl https://api.lynxvizion.com/api/playback/stream/a1b2c3d4-...In JavaScript with HLS.js:
const hls = new Hls();hls.loadSource(`https://api.lynxvizion.com/api/playback/stream/${jobId}`);hls.attachMedia(videoElement);GET /playback/direct
Section titled “GET /playback/direct”Redirect to a presigned B2 URL for direct MP4 playback. Used as fallback when HLS is not yet available.
Auth: None
| Query Param | Type | Required | Description |
|---|---|---|---|
path | string | Yes | B2 storage path (must start with users/) |
Response: 302 redirect to presigned URL
curl -L "https://api.lynxvizion.com/api/playback/direct?path=users/550e8400-.../my-video.mp4"