import { Livepeer } from "livepeer";
const livepeer = new Livepeer({
apiKey: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await livepeer.stream.createClip({
playbackId: "eaw4nk06ts2d0mzb",
startTime: 1587667174725,
endTime: 1587667174725,
name: "My Clip",
sessionId: "de7818e7-610a-4057-8f6f-b785dc1e6f88",
});
// Handle the result
console.log(result);
}
run();package main
import(
livepeergo "github.com/livepeer/livepeer-go"
"context"
"github.com/livepeer/livepeer-go/models/components"
"log"
)
func main() {
s := livepeergo.New(
livepeergo.WithSecurity("<YOUR_BEARER_TOKEN_HERE>"),
)
ctx := context.Background()
res, err := s.Stream.CreateClip(ctx, components.ClipPayload{
PlaybackID: "eaw4nk06ts2d0mzb",
StartTime: 1587667174725,
EndTime: livepeergo.Float64(1587667174725),
Name: livepeergo.String("My Clip"),
SessionID: livepeergo.String("de7818e7-610a-4057-8f6f-b785dc1e6f88"),
})
if err != nil {
log.Fatal(err)
}
if res.Data != nil {
// handle response
}
}from livepeer import Livepeer
s = Livepeer(
api_key="<YOUR_BEARER_TOKEN_HERE>",
)
res = s.stream.create_clip(request={
"playback_id": "eaw4nk06ts2d0mzb",
"start_time": 1587667174725,
"end_time": 1587667174725,
"name": "My Clip",
"session_id": "de7818e7-610a-4057-8f6f-b785dc1e6f88",
})
if res.data is not None:
# handle response
passcurl --request POST \
--url https://livepeer.studio/api/clip \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"playbackId": "eaw4nk06ts2d0mzb",
"startTime": 1587667174725,
"endTime": 1587667174725,
"name": "My Clip",
"sessionId": "de7818e7-610a-4057-8f6f-b785dc1e6f88"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
playbackId: 'eaw4nk06ts2d0mzb',
startTime: 1587667174725,
endTime: 1587667174725,
name: 'My Clip',
sessionId: 'de7818e7-610a-4057-8f6f-b785dc1e6f88'
})
};
fetch('https://livepeer.studio/api/clip', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://livepeer.studio/api/clip",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'playbackId' => 'eaw4nk06ts2d0mzb',
'startTime' => 1587667174725,
'endTime' => 1587667174725,
'name' => 'My Clip',
'sessionId' => 'de7818e7-610a-4057-8f6f-b785dc1e6f88'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://livepeer.studio/api/clip")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"playbackId\": \"eaw4nk06ts2d0mzb\",\n \"startTime\": 1587667174725,\n \"endTime\": 1587667174725,\n \"name\": \"My Clip\",\n \"sessionId\": \"de7818e7-610a-4057-8f6f-b785dc1e6f88\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://livepeer.studio/api/clip")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"playbackId\": \"eaw4nk06ts2d0mzb\",\n \"startTime\": 1587667174725,\n \"endTime\": 1587667174725,\n \"name\": \"My Clip\",\n \"sessionId\": \"de7818e7-610a-4057-8f6f-b785dc1e6f88\"\n}"
response = http.request(request)
puts response.read_body{
"asset": {
"id": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"source": {
"type": "url",
"url": "<string>",
"gatewayUrl": "<string>",
"encryption": "<unknown>"
},
"name": "filename.mp4",
"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>"
]
},
"creatorId": {
"type": "unverified",
"value": "user123"
},
"profiles": [
{
"bitrate": 3000000,
"width": 1280,
"name": "720p",
"height": 720,
"quality": 23,
"fps": 30,
"fpsDen": 1,
"gop": 2,
"profile": "H264Baseline",
"encoder": "H.264"
}
],
"storage": {
"ipfs": {
"spec": {},
"nftMetadata": {
"cid": "<string>",
"url": "<string>",
"gatewayUrl": "<string>"
},
"updatedAt": 1587667174725
},
"status": {
"phase": "ready",
"tasks": {
"pending": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"last": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"failed": "09F8B46C-61A0-4254-9875-F71F4C605BC7"
},
"progress": 0.5,
"errorMessage": "Failed to update storage"
}
},
"status": {
"updatedAt": 1587667174725,
"progress": 123,
"errorMessage": "<string>"
},
"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"
}
}{
"errors": [
[
"id not provided",
"Account not found"
]
]
}Create a clip
import { Livepeer } from "livepeer";
const livepeer = new Livepeer({
apiKey: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await livepeer.stream.createClip({
playbackId: "eaw4nk06ts2d0mzb",
startTime: 1587667174725,
endTime: 1587667174725,
name: "My Clip",
sessionId: "de7818e7-610a-4057-8f6f-b785dc1e6f88",
});
// Handle the result
console.log(result);
}
run();package main
import(
livepeergo "github.com/livepeer/livepeer-go"
"context"
"github.com/livepeer/livepeer-go/models/components"
"log"
)
func main() {
s := livepeergo.New(
livepeergo.WithSecurity("<YOUR_BEARER_TOKEN_HERE>"),
)
ctx := context.Background()
res, err := s.Stream.CreateClip(ctx, components.ClipPayload{
PlaybackID: "eaw4nk06ts2d0mzb",
StartTime: 1587667174725,
EndTime: livepeergo.Float64(1587667174725),
Name: livepeergo.String("My Clip"),
SessionID: livepeergo.String("de7818e7-610a-4057-8f6f-b785dc1e6f88"),
})
if err != nil {
log.Fatal(err)
}
if res.Data != nil {
// handle response
}
}from livepeer import Livepeer
s = Livepeer(
api_key="<YOUR_BEARER_TOKEN_HERE>",
)
res = s.stream.create_clip(request={
"playback_id": "eaw4nk06ts2d0mzb",
"start_time": 1587667174725,
"end_time": 1587667174725,
"name": "My Clip",
"session_id": "de7818e7-610a-4057-8f6f-b785dc1e6f88",
})
if res.data is not None:
# handle response
passcurl --request POST \
--url https://livepeer.studio/api/clip \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"playbackId": "eaw4nk06ts2d0mzb",
"startTime": 1587667174725,
"endTime": 1587667174725,
"name": "My Clip",
"sessionId": "de7818e7-610a-4057-8f6f-b785dc1e6f88"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
playbackId: 'eaw4nk06ts2d0mzb',
startTime: 1587667174725,
endTime: 1587667174725,
name: 'My Clip',
sessionId: 'de7818e7-610a-4057-8f6f-b785dc1e6f88'
})
};
fetch('https://livepeer.studio/api/clip', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://livepeer.studio/api/clip",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'playbackId' => 'eaw4nk06ts2d0mzb',
'startTime' => 1587667174725,
'endTime' => 1587667174725,
'name' => 'My Clip',
'sessionId' => 'de7818e7-610a-4057-8f6f-b785dc1e6f88'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://livepeer.studio/api/clip")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"playbackId\": \"eaw4nk06ts2d0mzb\",\n \"startTime\": 1587667174725,\n \"endTime\": 1587667174725,\n \"name\": \"My Clip\",\n \"sessionId\": \"de7818e7-610a-4057-8f6f-b785dc1e6f88\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://livepeer.studio/api/clip")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"playbackId\": \"eaw4nk06ts2d0mzb\",\n \"startTime\": 1587667174725,\n \"endTime\": 1587667174725,\n \"name\": \"My Clip\",\n \"sessionId\": \"de7818e7-610a-4057-8f6f-b785dc1e6f88\"\n}"
response = http.request(request)
puts response.read_body{
"asset": {
"id": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"source": {
"type": "url",
"url": "<string>",
"gatewayUrl": "<string>",
"encryption": "<unknown>"
},
"name": "filename.mp4",
"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>"
]
},
"creatorId": {
"type": "unverified",
"value": "user123"
},
"profiles": [
{
"bitrate": 3000000,
"width": 1280,
"name": "720p",
"height": 720,
"quality": 23,
"fps": 30,
"fpsDen": 1,
"gop": 2,
"profile": "H264Baseline",
"encoder": "H.264"
}
],
"storage": {
"ipfs": {
"spec": {},
"nftMetadata": {
"cid": "<string>",
"url": "<string>",
"gatewayUrl": "<string>"
},
"updatedAt": 1587667174725
},
"status": {
"phase": "ready",
"tasks": {
"pending": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"last": "09F8B46C-61A0-4254-9875-F71F4C605BC7",
"failed": "09F8B46C-61A0-4254-9875-F71F4C605BC7"
},
"progress": 0.5,
"errorMessage": "Failed to update storage"
}
},
"status": {
"updatedAt": 1587667174725,
"progress": 123,
"errorMessage": "<string>"
},
"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"
}
}{
"errors": [
[
"id not provided",
"Account not found"
]
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
The playback ID of the stream or stream recording to clip. Asset playback IDs are not supported yet.
"eaw4nk06ts2d0mzb"
The start timestamp of the clip in Unix milliseconds. See the ClipTrigger in the UI Kit for an example of how this is calculated (for HLS, it uses Program Date-Time tags, and for WebRTC, it uses the latency from server to client at stream startup).
1587667174725
The end timestamp of the clip in Unix milliseconds. See the ClipTrigger in the UI Kit for an example of how this is calculated (for HLS, it uses Program Date-Time tags, and for WebRTC, it uses the latency from server to client at stream startup).
1587667174725
The optional friendly name of the clip to create.
"My Clip"
The optional session ID of the stream to clip. This can be used to clip recordings - if it is not specified, it will clip the ongoing livestream.
"de7818e7-610a-4057-8f6f-b785dc1e6f88"
Was this page helpful?