Overview
APIs
- Asset
- Livestream
- Generate
- Multistream target
- Session
- Access control
- Webhook
- Task
- Playback
- Transcode
- Viewership
Upload asset via URL
import { Livepeer } from "livepeer";
import { TranscodeProfileEncoder, TranscodeProfileProfile, Type } from "livepeer/models/components";
const livepeer = new Livepeer({
apiKey: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await livepeer.asset.createViaUrl({
name: "filename.mp4",
staticMp4: true,
playbackPolicy: {
type: Type.Webhook,
webhookId: "1bde4o2i6xycudoy",
webhookContext: {
"streamerId": "my-custom-id",
},
refreshInterval: 600,
},
url: "https://s3.amazonaws.com/my-bucket/path/filename.mp4",
profiles: [
{
width: 1280,
name: "720p",
height: 720,
bitrate: 3000000,
quality: 23,
fps: 30,
fpsDen: 1,
gop: "2",
profile: TranscodeProfileProfile.H264Baseline,
encoder: TranscodeProfileEncoder.H264,
},
{
width: 1280,
name: "720p",
height: 720,
bitrate: 3000000,
quality: 23,
fps: 30,
fpsDen: 1,
gop: "2",
profile: TranscodeProfileProfile.H264Baseline,
encoder: TranscodeProfileEncoder.H264,
},
],
});
// Handle the result
console.log(result);
}
run();
{
"asset": {
"id": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"type": "video",
"playbackId": "eaw4nk06ts2d0mzb",
"userId": "66E2161C-7670-4D05-B71D-DA2D6979556F",
"playbackUrl": "https://livepeercdn.com/asset/ea03f37e-f861-4cdd-b495-0e60b6d753ad/index.m3u8",
"downloadUrl": "https://livepeercdn.com/asset/eaw4nk06ts2d0mzb/video/download.mp4",
"playbackPolicy": {
"type": "webhook",
"webhookId": "1bde4o2i6xycudoy",
"webhookContext": {
"streamerId": "my-custom-id"
},
"refreshInterval": 600,
"allowedOrigins": [
"<string>"
]
},
"source": {
"type": "url",
"url": "<string>",
"gatewayUrl": "<string>",
"encryption": {}
},
"creatorId": {
"type": "unverified",
"value": "user123"
},
"profiles": [
{
"width": 1280,
"name": "720p",
"height": 720,
"bitrate": 3000000,
"quality": 23,
"fps": 30,
"fpsDen": 1,
"gop": 2,
"profile": "H264Baseline",
"encoder": "H.264"
}
],
"storage": {
"ipfs": {
"spec": {},
"$ref": "<any>",
"nftMetadata": {
"cid": "<string>",
"url": "<string>",
"gatewayUrl": "<string>"
},
"updatedAt": 1587667174725
},
"status": {
"phase": "ready",
"progress": 0.5,
"errorMessage": "Failed to update storage",
"tasks": {
"pending": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"last": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"failed": "09F8B46C-61A0-4254-9875-F71F4C605BC7"
}
}
},
"status": {
"phase": "uploading",
"updatedAt": 1587667174725,
"progress": 123,
"errorMessage": "<string>"
},
"name": "filename.mp4",
"projectId": "aac12556-4d65-4d34-9fb6-d1f0985eb0a9",
"createdAt": 1587667174725,
"createdByTokenName": "<string>",
"size": 84934509,
"hash": [
{
"hash": "9b560b28b85378a5004117539196ab24e21bbd75b0e9eb1a8bc7c5fd80dc5b57",
"algorithm": "sha256"
}
],
"videoSpec": {
"format": "mp4",
"duration": 23.8328,
"bitrate": 1000000,
"tracks": [
{
"type": "video",
"codec": "aac",
"startTime": 23.8238,
"duration": 23.8238,
"bitrate": 1000000,
"width": 1920,
"height": 1080,
"pixelFormat": "yuv420p",
"fps": 30,
"channels": 2,
"sampleRate": 44100,
"bitDepth": 16
}
]
}
},
"task": {
"id": "34d7618e-fd42-4798-acf5-19504616a11e"
}
}
Authorizations
Bearer authentication header of the form Bearer <token>
, where <token>
is your auth token.
Body
URL where the asset contents can be retrieved, e.g. https://s3.amazonaws.com/my-bucket/path/filename.mp4
.
For an IPFS source, this should be similar to: ipfs://{CID}
. For an Arweave
source: ar://{CID}
.
"https://s3.amazonaws.com/my-bucket/path/filename.mp4"
Whether the playback policy for an asset or stream is public or signed
public
, jwt
, webhook
"webhook"
ID of the webhook to use for playback policy
"1bde4o2i6xycudoy"
User-defined webhook context
{ "streamerId": "my-custom-id" }
Interval (in seconds) at which the playback policy should be refreshed (default 600 seconds)
600
List of allowed origins for CORS playback (<scheme>://<hostname>:<port>, <scheme>://<hostname>)
Response
"09F8B46C-61A0-4254-9875-F71F4C605BC7"
The name of the asset. This is not necessarily the filename - it can be a custom name or title.
"filename.mp4"
Type of the asset.
video
, audio
"video"
The playback ID to use with the Playback Info endpoint to retrieve playback URLs.
"eaw4nk06ts2d0mzb"
"66E2161C-7670-4D05-B71D-DA2D6979556F"
URL for HLS playback. It is recommended to not use this URL, and instead use playback IDs with the Playback Info endpoint to retrieve the playback URLs - this URL format is subject to change (e.g. https://livepeercdn.com/asset/ea03f37e-f861-4cdd-b495-0e60b6d753ad/index.m3u8).
"https://livepeercdn.com/asset/ea03f37e-f861-4cdd-b495-0e60b6d753ad/index.m3u8"
The URL to directly download the asset, e.g. https://livepeercdn.com/asset/eawrrk06ts2d0mzb/video
. It is not recommended to use this for playback.
"https://livepeercdn.com/asset/eaw4nk06ts2d0mzb/video/download.mp4"
Whether the playback policy for an asset or stream is public or signed
public
, jwt
, webhook
"webhook"
ID of the webhook to use for playback policy
"1bde4o2i6xycudoy"
User-defined webhook context
{ "streamerId": "my-custom-id" }
Interval (in seconds) at which the playback policy should be refreshed (default 600 seconds)
600
List of allowed origins for CORS playback (<scheme>://<hostname>:<port>, <scheme>://<hostname>)
Requested profiles for the asset to be transcoded into. Configured
on the upload APIs payload or through the stream.recordingSpec
field for recordings. If not specified, default profiles are derived
based on the source input. If this is a recording, the source will
not be present in this list but will be available for playback.
Transcode API profile
x >= 400
3000000
x >= 128
1280
1 - 500
"720p"
x >= 128
720
Restricts the size of the output video using the constant quality feature. Increasing this value will result in a lower quality video. Note that this parameter might not work if the transcoder lacks support for it.
0 <= x <= 44
23
x >= 0
30
x >= 1
1
2
H264Baseline
, H264Main
, H264High
, H264ConstrainedHigh
"H264Baseline"
H.264
, HEVC
, VP8
, VP9
"H.264"
Name of the NFT metadata template to export. 'player' will embed the Livepeer Player on the NFT while 'file' will reference only the immutable MP4 files.
file
, player
Additional data to add to the NFT metadata exported to IPFS. Will be deep merged with the default metadata exported.
Timestamp (in milliseconds) at which IPFS export task was updated
1587667174725
Phase of the asset storage
waiting
, processing
, ready
, failed
, reverted
"ready"
ID of any currently running task that is exporting this asset to IPFS.
"09F8B46C-61A0-4254-9875-F71F4C605BC7"
ID of the last task to run successfully, that created the currently saved data.
"09F8B46C-61A0-4254-9875-F71F4C605BC7"
ID of the last task to fail execution.
"09F8B46C-61A0-4254-9875-F71F4C605BC7"
Current progress of the task updating the storage.
0.5
Error message if the last storage changed failed.
"Failed to update storage"
Status of the asset
Phase of the asset
uploading
, waiting
, processing
, ready
, failed
, deleting
, deleted
Timestamp (in milliseconds) at which the asset was last updated
1587667174725
Current progress of the task creating this asset.
Error message if the asset creation failed.
The ID of the project
"aac12556-4d65-4d34-9fb6-d1f0985eb0a9"
Timestamp (in milliseconds) at which asset was created
1587667174725
Name of the token used to create this object
Size of the asset in bytes
84934509
Video metadata
Format of the asset
"mp4"
Duration of the asset in seconds (float)
23.8328
Bitrate of the video in bits per second
1000000
List of tracks associated with the asset when the format contemplates them (e.g. mp4)
type of track
video
, audio
"video"
Codec of the track
"aac"
Start time of the track in seconds
23.8238
Duration of the track in seconds
23.8238
Bitrate of the track in bits per second
1000000
Width of the track - only for video tracks
1920
Height of the track - only for video tracks
1080
Pixel format of the track - only for video tracks
"yuv420p"
Frame rate of the track - only for video tracks
30
Amount of audio channels in the track
2
Sample rate of the track in samples per second - only for audio tracks
44100
Bit depth of the track - only for audio tracks
16
Was this page helpful?
import { Livepeer } from "livepeer";
import { TranscodeProfileEncoder, TranscodeProfileProfile, Type } from "livepeer/models/components";
const livepeer = new Livepeer({
apiKey: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await livepeer.asset.createViaUrl({
name: "filename.mp4",
staticMp4: true,
playbackPolicy: {
type: Type.Webhook,
webhookId: "1bde4o2i6xycudoy",
webhookContext: {
"streamerId": "my-custom-id",
},
refreshInterval: 600,
},
url: "https://s3.amazonaws.com/my-bucket/path/filename.mp4",
profiles: [
{
width: 1280,
name: "720p",
height: 720,
bitrate: 3000000,
quality: 23,
fps: 30,
fpsDen: 1,
gop: "2",
profile: TranscodeProfileProfile.H264Baseline,
encoder: TranscodeProfileEncoder.H264,
},
{
width: 1280,
name: "720p",
height: 720,
bitrate: 3000000,
quality: 23,
fps: 30,
fpsDen: 1,
gop: "2",
profile: TranscodeProfileProfile.H264Baseline,
encoder: TranscodeProfileEncoder.H264,
},
],
});
// Handle the result
console.log(result);
}
run();
{
"asset": {
"id": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"type": "video",
"playbackId": "eaw4nk06ts2d0mzb",
"userId": "66E2161C-7670-4D05-B71D-DA2D6979556F",
"playbackUrl": "https://livepeercdn.com/asset/ea03f37e-f861-4cdd-b495-0e60b6d753ad/index.m3u8",
"downloadUrl": "https://livepeercdn.com/asset/eaw4nk06ts2d0mzb/video/download.mp4",
"playbackPolicy": {
"type": "webhook",
"webhookId": "1bde4o2i6xycudoy",
"webhookContext": {
"streamerId": "my-custom-id"
},
"refreshInterval": 600,
"allowedOrigins": [
"<string>"
]
},
"source": {
"type": "url",
"url": "<string>",
"gatewayUrl": "<string>",
"encryption": {}
},
"creatorId": {
"type": "unverified",
"value": "user123"
},
"profiles": [
{
"width": 1280,
"name": "720p",
"height": 720,
"bitrate": 3000000,
"quality": 23,
"fps": 30,
"fpsDen": 1,
"gop": 2,
"profile": "H264Baseline",
"encoder": "H.264"
}
],
"storage": {
"ipfs": {
"spec": {},
"$ref": "<any>",
"nftMetadata": {
"cid": "<string>",
"url": "<string>",
"gatewayUrl": "<string>"
},
"updatedAt": 1587667174725
},
"status": {
"phase": "ready",
"progress": 0.5,
"errorMessage": "Failed to update storage",
"tasks": {
"pending": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"last": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"failed": "09F8B46C-61A0-4254-9875-F71F4C605BC7"
}
}
},
"status": {
"phase": "uploading",
"updatedAt": 1587667174725,
"progress": 123,
"errorMessage": "<string>"
},
"name": "filename.mp4",
"projectId": "aac12556-4d65-4d34-9fb6-d1f0985eb0a9",
"createdAt": 1587667174725,
"createdByTokenName": "<string>",
"size": 84934509,
"hash": [
{
"hash": "9b560b28b85378a5004117539196ab24e21bbd75b0e9eb1a8bc7c5fd80dc5b57",
"algorithm": "sha256"
}
],
"videoSpec": {
"format": "mp4",
"duration": 23.8328,
"bitrate": 1000000,
"tracks": [
{
"type": "video",
"codec": "aac",
"startTime": 23.8238,
"duration": 23.8238,
"bitrate": 1000000,
"width": 1920,
"height": 1080,
"pixelFormat": "yuv420p",
"fps": 30,
"channels": 2,
"sampleRate": 44100,
"bitDepth": 16
}
]
}
},
"task": {
"id": "34d7618e-fd42-4798-acf5-19504616a11e"
}
}