EdgeCloud Video Service: Video on Demand
Create a pre-signed URL to Upload a Video
You can skip the upload step if you have an external URL where your video is already hosted.
Request:
curl --location --request POST 'https://api.thetavideoapi.com/upload' \
--header 'x-tva-sa-id: srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'x-tva-sa-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'var request = require('request');
var options = {
'method': 'POST',
'url': 'https://api.thetavideoapi.com/upload',
'headers': {
'x-tva-sa-id': 'srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx',
'x-tva-sa-secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});Response:
{
"status": "success",
"body": {
"uploads": [
{
"id": "upload_zzzzzzzzzzzzzzzzzzzzzzzzz",
"service_account_id": "srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx",
"presigned_url": "https://storage.googleapis.com/files.thetavideoapi.com/srvacc_1f3z0062ij26bu1pa8h65we6h/upload_4d0j6tx7nbwmv96sp7y7uz550?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=beta-tva-dispatcher-sa%40beta-theta-video-api.iam.gserviceaccount.com%2F20210930%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20210930T161215Z&X-Goog-Expires=900&X-Goog-SignedHeaders=content-type%3Bhost&X-Goog-Signature=6522b1df0d2c1dc583cc9ae1a4f357b1a176c72da6d3f3c52516b024a75b35afcea1570fba165a0516607a55c79d7032509558c11126a09d8380c9d5fcbb505652c6d461dcb8277a281a5ab24e19ac34dc4431d25fcbc99e4022c6cc835fc6d2602fd99b89c01639fdff6d5175ed857452213b6946a1e0c611f1fc5608357d34687abc90dff7559ac1770d5093a454a24d52676566373c5238732ff2984ac411601972f8e595e8f0419ec96f24ca893b08a21c45ec4ddc455b047326b60018fe5a5e0ab646bacac37f3a4f340f1f41cf3ab985bd48a226984f238fd3c5ba48851b4be981b76d138f0fb06af6af358709e7fc58d721c1ef991d23fd8953dd1c7f",
"presigned_url_expiration": "2021-09-30T16:27:15.432Z",
"presigned_url_expired": false,
"create_time": "2021-09-30T16:12:15.432Z",
"update_time": "2021-09-30T16:12:15.432Z"
}
]
}
}You will need the "id" in this response later. It's used as the "source_upload_id" in the API to transcode a video using an upload.
Upload a Video using the pre-signed URL
Request:
curl --location --request PUT 'https://storage.googleapis.com/files.thetavideoapi.com/srvacc_1f3z0062ij26bu1pa8h65we6h/upload_4d0j6tx7nbwmv96sp7y7uz550?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=beta-tva-dispatcher-sa%40beta-theta-video-api.iam.gserviceaccount.com%2F20210930%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20210930T161215Z&X-Goog-Expires=900&X-Goog-SignedHeaders=content-type%3Bhost&X-Goog-Signature=6522b1df0d2c1dc583cc9ae1a4f357b1a176c72da6d3f3c52516b024a75b35afcea1570fba165a0516607a55c79d7032509558c11126a09d8380c9d5fcbb505652c6d461dcb8277a281a5ab24e19ac34dc4431d25fcbc99e4022c6cc835fc6d2602fd99b89c01639fdff6d5175ed857452213b6946a1e0c611f1fc5608357d34687abc90dff7559ac1770d5093a454a24d52676566373c5238732ff2984ac411601972f8e595e8f0419ec96f24ca893b08a21c45ec4ddc455b047326b60018fe5a5e0ab646bacac37f3a4f340f1f41cf3ab985bd48a226984f238fd3c5ba48851b4be981b76d138f0fb06af6af358709e7fc58d721c1ef991d23fd8953dd1c7f' \
--header 'Content-Type: application/octet-stream' \
--data-binary '@/Users/renegarcia/Downloads/file_example.mp4'var request = require('request');
var options = {
'method': 'PUT',
'url': 'https://storage.googleapis.com/files.thetavideoapi.com/srvacc_1f3z0062ij26bu1pa8h65we6h/upload_4d0j6tx7nbwmv96sp7y7uz550?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=beta-tva-dispatcher-sa%40beta-theta-video-api.iam.gserviceaccount.com%2F20210930%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20210930T161215Z&X-Goog-Expires=900&X-Goog-SignedHeaders=content-type%3Bhost&X-Goog-Signature=6522b1df0d2c1dc583cc9ae1a4f357b1a176c72da6d3f3c52516b024a75b35afcea1570fba165a0516607a55c79d7032509558c11126a09d8380c9d5fcbb505652c6d461dcb8277a281a5ab24e19ac34dc4431d25fcbc99e4022c6cc835fc6d2602fd99b89c01639fdff6d5175ed857452213b6946a1e0c611f1fc5608357d34687abc90dff7559ac1770d5093a454a24d52676566373c5238732ff2984ac411601972f8e595e8f0419ec96f24ca893b08a21c45ec4ddc455b047326b60018fe5a5e0ab646bacac37f3a4f340f1f41cf3ab985bd48a226984f238fd3c5ba48851b4be981b76d138f0fb06af6af358709e7fc58d721c1ef991d23fd8953dd1c7f',
'headers': {
'Content-Type': 'application/octet-stream'
},
body: "<file contents here>"
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});Response:
emptyTranscode a Video using an Upload
Request:
curl --location --request POST 'https://api.thetavideoapi.com/video' \
--header 'x-tva-sa-id: srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'x-tva-sa-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"source_upload_id": "upload_zzzzzzzzzzzzzzzzzzzzzzzzz",
"playback_policy": "public",
"nft_collection": "0x5d0004fe2e0ec6d002678c7fa01026cabde9e793",
"metadata": {
"key": "value"
}
}'var request = require('request');
var options = {
'method': 'POST',
'url': 'https://api.thetavideoapi.com/video',
'headers': {
'x-tva-sa-id': 'srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx',
'x-tva-sa-secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({"source_upload_id":"upload_zzzzzzzzzzzzzzzzzzzzzzzzz","playback_policy":"public","nft_collection":"0x5d0004fe2e0ec6d002678c7fa01026cabde9e793","metadata":{"key":"value"}})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});Response:
{
"status": "success",
"body": {
"videos": [
{
"id": "video_vvvvvvvvvvvvvvvvvvvvvvvvvv",
"playback_uri": null,
"create_time": "2021-09-30T16:43:00.806Z",
"update_time": "2021-09-30T16:43:00.806Z",
"service_account_id": "srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx",
"file_name": null,
"state": "created",
"sub_state": "none",
"source_upload_id": "upload_zzzzzzzzzzzzzzzzzzzzzzzzz",
"source_uri": null,
"playback_policy": "public",
"progress": 0,
"error": null,
"duration": null,
"resolution": null,
"metadata": {
"key": "value"
}
}
]
}
}All file types supported by FFMPEG can be uploaded to the TVA.
Transcode a Video using an external URI
Request:
curl --location --request POST 'https://api.thetavideoapi.com/video' \
--header 'x-tva-sa-id: srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'x-tva-sa-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data-raw '{
"source_uri": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"playback_policy": "public",
"nft_collection": "0x5d0004fe2e0ec6d002678c7fa01026cabde9e793",
"metadata": {
"key": "value"
}
}'var request = require('request');
var options = {
'method': 'POST',
'url': 'https://api.thetavideoapi.com/video',
'headers': {
'x-tva-sa-id': 'srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx',
'x-tva-sa-secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'Content-Type': 'application/json'
},
body: JSON.stringify({"source_uri":"http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4","playback_policy":"public","nft_collection":"0x5d0004fe2e0ec6d002678c7fa01026cabde9e793","metadata":{"key":"value"}})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});Response:
{
"status": "success",
"body": {
"videos": [
{
"id": "video_vvvvvvvvvvvvvvvvvvvvvvvvvv",
"playback_uri": null,
"create_time": "2021-09-30T16:50:56.662Z",
"update_time": "2021-09-30T16:50:56.662Z",
"service_account_id": "srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx",
"file_name": null,
"state": "created",
"sub_state": "none",
"source_upload_id": null,
"source_uri": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"playback_policy": "public",
"progress": 0,
"error": null,
"duration": null,
"resolution": null,
"metadata": {
"key": "value"
}
}
]
}
}GET your Video to check it's progress
Request:
curl --location --request GET 'https://api.thetavideoapi.com/video/video_vvvvvvvvvvvvvvvvvvvvvvvvvv' \
--header 'x-tva-sa-id: srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'x-tva-sa-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'var request = require('request');
var options = {
'method': 'GET',
'url': 'https://api.thetavideoapi.com/video/video_vvvvvvvvvvvvvvvvvvvvvvvvvv',
'headers': {
'x-tva-sa-id': 'srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx',
'x-tva-sa-secret': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});Response of in progress video:
{
"status": "success",
"body": {
"videos": [
{
"id": "video_vvvvvvvvvvvvvvvvvvvvvvvvvv",
"playback_uri": null,
"create_time": "2021-09-30T16:50:56.662Z",
"update_time": "2021-09-30T16:51:48.467Z",
"service_account_id": "srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx",
"file_name": null,
"state": "processing",
"sub_state": "transcoding",
"source_upload_id": null,
"source_uri": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"playback_policy": "public",
"progress": 9.58,
"error": null,
"duration": null,
"resolution": null,
"metadata": {}
}
]
}
}Response of finished video:
{
"status": "success",
"body": {
"videos": [
{
"id": "video_vvvvvvvvvvvvvvvvvvvvvvvvvv",
"playback_uri": "https://media.thetavideoapi.com/video_vvvvvvvvvvvvvvvvvvvvvvvvvv/master.m3u8",
"create_time": "2021-09-30T16:50:56.662Z",
"update_time": "2021-09-30T17:00:57.520Z",
"service_account_id": "srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx",
"file_name": null,
"state": "success",
"sub_state": "none",
"source_upload_id": null,
"source_uri": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"playback_policy": "public",
"progress": 100,
"error": null,
"duration": "596473",
"resolution": 720,
"metadata": {}
}
]
}
}List Videos
Request:
curl --location --request GET 'https://api.thetavideoapi.com/video/srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx/list?page=1&number=100' \
--header 'x-tva-sa-id: srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'x-tva-sa-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \Response:
{
"status": "success",
"body": {
"videos": [
{
"id": "video_vvvvvvvvvvvvvvvvvvvvvvvvvv",
"playback_uri": "https://media.thetavideoapi.com/video_vvvvvvvvvvvvvvvvvvvvvvvvvv/master.m3u8",
"create_time": "2021-09-30T16:50:56.662Z",
"update_time": "2021-09-30T17:00:57.520Z",
"service_account_id": "srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx",
"file_name": null,
"state": "success",
"sub_state": "none",
"source_upload_id": null,
"source_uri": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"playback_policy": "public",
"progress": 100,
"error": null,
"duration": "596473",
"resolution": 720,
"metadata": {}
}
]
}
}Search Videos
Search through your videos' metadata and file_name fields
Request:
curl --location --request GET 'https://api.thetavideoapi.com/video/srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx/search?key=value&page=1&number=100' \
--header 'x-tva-sa-id: srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'x-tva-sa-secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \Response
{
"status": "success",
"body": {
"videos": [
{
"id": "video_vvvvvvvvvvvvvvvvvvvvvvvvvv",
"playback_uri": "https://media.thetavideoapi.com/video_vvvvvvvvvvvvvvvvvvvvvvvvvv/master.m3u8",
"create_time": "2021-09-30T16:50:56.662Z",
"update_time": "2021-09-30T17:00:57.520Z",
"service_account_id": "srvacc_xxxxxxxxxxxxxxxxxxxxxxxxx",
"file_name": null,
"state": "success",
"sub_state": "none",
"source_upload_id": null,
"source_uri": "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
"playback_policy": "public",
"progress": 100,
"error": null,
"duration": "596473",
"resolution": 720,
"metadata": {
"key": "value",
"obj": {
"key": "value"
}
}
}
]
}
}
You can search for nested fields in metadata with a dot between the key names.Using the example JSON above, the inner value can be searched for with ?obj.key=value
You can specify the operator to use with the 'operator' query param (available options are 'and' and 'or'; default is 'and').
Enable Theta p2p Video Delivery
To enable Theta p2p Video Delivery for the transcoded video, please follow the steps in this guide.
Updated 27 days ago
What’s Next
