NextGen Live Timeshift
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 | 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_timemust fall within 14 days of the current live channel. - Start before end:
start_timemust be earlier thanend_time. - Duration limit: The difference between
end_timeandstart_timemust be 24 hours or less. - Only
start_timeprovided: Playback behaves like live with seek-back tostart_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_timeis 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.