NextGen Live Timeshift

Use timeshift (catch-up) playback to let viewers watch a specific window of a live channel — past, present, or scheduled future — without enabling extra account features.

Overview

Timeshift lets viewers access a defined time range on a live channel, similar to DVR catch-up. NextGen Live supports timeshift out of the box; you do not need to enable a separate account feature.

To deliver timeshift playback in a custom integration, create a livePlaybackToken whose start_time and end_time fields set the playback window, then use it to fetch playback URLs via the Brightcove Player or Playback API.

For background on playback tokens in general, see Understanding Playback Tokens and Playback URL Tokens for NextGen Live.

Three different credentials

Timeshift integrations use up to three separate credentials. Do not confuse them:

Credential types used for timeshift
Credential Purpose Where it is used
OAuth access token (Bearer) Authenticates your server to the Live API Authorization: Bearer {access_token} on POST /v2/accounts/{account_id}/playback/{job_id}/token
livePlaybackToken (JWT) Encodes playback settings, including the timeshift window Returned as token from the Live API; passed as livePlaybackToken to fetch playback URLs from the player or Playback API
Policy key (BCOV-Policy) Authenticates calls to the Playback API Authorization: BCOV-Policy {policy_key} only when you call the Playback API directly — not when using Studio embed code

Prerequisites

  • A running NextGen Live channel (job ID) with content in the timeshift window you plan to expose.

Step 1: Create a livePlaybackToken with a timeshift window

Call the Live API playback-token endpoint with an OAuth access token (Getting Access Tokens). Set start_time and end_time to define the catch-up window — these are playback bounds, not token expiration.

Endpoint

POST https://api.live.brightcove.com/v2/accounts/{account_id}/playback/{job_id}/token

Headers

Authorization: Bearer {oauth_access_token}
Content-Type: application/json

Example request body

{
  "manifest_format": "hls",
  "start_time": "2025-08-18T16:49:29+05:30",
  "end_time": "2025-08-18T17:49:29+05:30"
}

start_time and end_time accept Unix epoch seconds or ISO 8601 strings. Include other token fields (for example dvr, ssai, cenc) when your channel uses those features.

Example response

{
  "token": "eyJhbGciOiJSUzI1NiIs..."
}

The token value is the livePlaybackToken JWT. Use it in the next step.

Step 2: Deliver playback

Brightcove Player (recommended)

Pass the JWT as the livePlaybackToken query parameter. Studio Embed on Web can generate this for you; for timeshift you must create the token via the Live API with the desired window.

https://players.brightcove.net/{account_id}/{player_id}/index.html?videoId={job_id}&livePlaybackToken={token}

No policy key is required for player embeds.

Playback API (custom server-side integrations)

If your backend resolves manifest URLs through the Playback API, pass the JWT as a query parameter and authenticate the request with a policy key:

GET https://edge.api.brightcove.com/playback/v1/accounts/{account_id}/videos/{job_id}?livePlaybackToken={token}
Authorization: BCOV-Policy {policy_key}

The policy key authorizes access to the Playback API. The livePlaybackToken selects the timeshift window and channel playback configuration. See Policy Keys and the Playback API reference.

The response includes a sources array with the HLS or DASH manifest URL for the requested window.

Timeshift window rules

The following constraints apply to start_time and end_time on the playback-token request:

  • Start time within the last 14 days: start_time must fall within 14 days of the current live channel.
  • Start before end: start_time must be earlier than end_time.
  • Duration limit: The difference between end_time and start_time must be 24 hours or less.
  • Only start_time provided: Playback behaves like live with seek-back to start_time. Useful for sports or news. The playback window is limited to 24 hours from that start.
  • Both times in the future: Playback begins when start_time is reached, then transitions through no playback → live event → VOD catch-up (available for 14 days). Useful when one URL must serve a scheduled event and later catch-up viewing.