The api.video web-service helps you put video on the web without the hassle.
This documentation helps you use the corresponding NodeJS client.
Quick start
Install:
npm install @api.video/nodejs-sdk
Usage:
constapiVideo=require('@api.video/nodejs-sdk');// Create client for Production and authenticateconstclient=newapiVideo.Client({apiKey: 'xxx'});// Create client for Sandbox and authenticateconstclient=newapiVideo.ClientSandbox({apiKey: 'xxx'});// Create and upload a video ressourceletresult=client.videos.upload('/path/to/video.mp4',{title: 'Course #4 - Part B'});result.then(function(video){console.log(video.title);}).catch(function(error){console.error(error);});// Update video propertiesletresult=client.videos.update('viXxxxXxxxXxxxxxxxXX',{description: 'Course #4 - Part B'});result.then(function(video){console.log(video.description);});// Search video by tags filter and paginate resultsletresult=client.videos.search({currentPage: 1,pageSize: 25,tags: ['finance']});result.then(function(videos){for(letx=0;x<videos.length;x+=1){if(Object.prototype.hasOwnProperty.call(videos,x)){letvideo=videos[x];console.log(video.title);}}});// Delete video ressourceletresult=client.videos.delete('viXxxxXxxxXxxxxxxxXX');result.then(function(statusCode){console.log(statusCode);}).catch(function(error){console.error(error);});// Upload a video thumbnailletresult=client.videos.uploadThumbnail('/path/to/thumbnail.jpg','viXxxxXxxxXxxxxxxxXX');result.then(function(video){console.log(video.title);});// Update video thumbnail by picking image with video timecodeletresult=client.videos.updateThumbnailWithTimecode('viXxxxXxxxXxxxxxxxXX','00:15:22.05');result.then(function(video){console.log(video.title);});// Create players with default valuesletresult=client.players.create();result.then(function(player){console.log(player.playerId);});// Get a playerletresult=client.players.get('plXxxxXxxxXxxxxxxxXX');result.then(function(player){console.log(player.playerId);});// Search a player with paginate resultsletresult=client.players.search({currentPage: 1,pageSize: 50});result.then(function(players){for(letx=0;x<players.length;x+=1){if(Object.prototype.hasOwnProperty.call(players,x)){letplayer=players[x];console.log(player.playerId);}}});letproperties={shapeMargin: 10,shapeRadius: 3,shapeAspect: "flat",shapeBackgroundTop: "rgba(50, 50, 50, .7)",shapeBackgroundBottom: "rgba(50, 50, 50, .8)",text: "rgba(255, 255, 255, .95)",link: "rgba(255, 0, 0, .95)",linkHover: "rgba(255, 255, 255, .75)",linkActive: "rgba(255, 0, 0, .75)",trackPlayed: "rgba(255, 255, 255, .95)",trackUnplayed: "rgba(255, 255, 255, .1)",trackBackground: "rgba(0, 0, 0, 0)",backgroundTop: "rgba(72, 4, 45, 1)",backgroundBottom: "rgba(94, 95, 89, 1)",backgroundText: "rgba(255, 255, 255, .95)",enableApi: true,enableControls: true,forceAutoplay: false,hideTitle: true,forceLoop: true};letresult=client.players.update('plXxxxXxxxXxxxxxxxXX',properties);result.then(function(player){console.log(player.forceLoop);});// Upload a player logoletresult=client.players.uploadLogo('/path/to/logo.png','plXxxxXxxxXxxxxxxxXX','https://api.video');result.then(function(player){console.log(player.logo);});letresult=client.players.delete('plXxxxXxxxXxxxxxxxXX');result.then(function(statusCode){console.log(statusCode);}).catch(function(error){console.error(error);});// Upload video captionletresult=client.captions.upload('path/to/caption.vtt',{videoId: 'viXxxxXxxxXxxxxxxxXX',language: 'en'});result.then(function(caption){console.log(caption.src);});// Get video caption by languageletresult=client.captions.get('viXxxxXxxxXxxxxxxxXX','en');result.then(function(caption){console.log(caption.src);});// Update the default caption languageletresult=client.captions.updateDefault('viXxxxXxxxXxxxxxxxXX','en',true);result.then(function(caption){console.log(caption.default);});//Delete caption by languageletresult=client.captions.delete('viXxxxXxxxXxxxxxxxXX','en');result.then(function(statusCode){console.log(statusCode);}).catch(function(error){console.error(error);});// Upload video chapterletresult=client.chapters.upload('path/to/chapter.vtt',{videoId: 'viXxxxXxxxXxxxxxxxXX',language: 'en'});result.then(function(chapter){console.log(chapter.src);});// Get video chapter by languageletresult=client.chapters.get('viXxxxXxxxXxxxxxxxXX','en');result.then(function(chapter){console.log(chapter.src);});//Delete chapter by languageletresult=client.chapters.delete('viXxxxXxxxXxxxxxxxXX','en');result.then(function(statusCode){console.log(statusCode);}).catch(function(error){console.error(error);});// Create a liveletresult=client.lives.create('This is a live');result.then(function(live){console.log(live.name);});// Get video Analytics Data for the month of July 2018letresult=client.analyticsVideo.get('viXxxxXxxxXxxxxxxxXX','2019-01');result.then(function(analyticVideo){console.log(analyticVideo.data);});// Search Video Analytics Data for January 2019 and return the first 100 resultsletresult=client.analyticsVideo.search({currentPage: 1,pageSize: 100,period: '2019-01'});result.then(function(analyticsVideo){for(letx=0;x<analyticsVideo.length;x+=1){if(Object.prototype.hasOwnProperty.call(analyticsVideo,x)){letanalyticVideo=analyticsVideo[x];console.log(analyticVideo.data);}}});// Get live Analytics Data for the month of July 2018letresult=client.analyticsLive.get('liXxxxXxxxXxxxxxxxXX','2019-01');result.then(function(analyticLive){console.log(analyticLive.data);});// Search Live Analytics Data between May 2018 and July 2018 and return the first 100 resultsletresult=client.analyticsLive.search({currentPage: 1,pageSize: 100,period: '2019-01'});result.then(function(analyticsLive){for(letx=0;x<analyticsLive.length;x+=1){if(Object.prototype.hasOwnProperty.call(analyticsLive,x)){letanalyticLive=analyticsLive[x];console.log(analyticLive.data);}}});// Get Analytics Session Events for a sessionIdletresult=client.analyticsSessionEvent.get('psXxxxXxxxXxxxxxxxXX');result.then(function(analyticSessionEvent){console.log(analyticSessionEvent.events);});// Generate a token for delegated uploadletresult=client.tokens.generate();result.then(function(token){console.log(token);});
Full API
<?php/* ********************************* ********************************* * VIDEO * ********************************* **********************************/const client = new apiVideo.Client({ apiKey: 'xxx' });
// Show a video
client.videos.get(videoId);
// Show a video status
client.videos.getStatus(videoId);
// List or search videos
client.videos.search(parameters = {});
// Create video properties
client.videos.create(title, properties = {});
// Upload a video media file// Create a video, if videoId is null
client.videos.upload(source, properties = {}, videoId = null);
// Create a video by downloading it from a third party
client.videos.download(source, title, properties = {});
// Update video properties
client.videos.update(videoId, properties);
// Set video public
client.videos.makePublic(videoId);
// Set video private
client.videos.makePrivate(videoId);
// Delete video (file and data)
client.videos.delete(videoId);
// Delegated upload (generate a token for someone to upload a video into your account)
result = client.tokens.generate(); // string(3): "xyz"
result.then(function(token) {
// ...then upload from anywhere without authentication:// curl https://ws.api.video/upload?token=xyz -F file=@video.mp4
});
/* ********************************* * VIDEO THUMBNAIL * **********************************/// Upload a thumbnail for video
client.videos.uploadThumbnail(source, videoId);
// Update video's thumbnail by picking timecode
client.videos.updateThumbnailWithTimecode(videoId, timecode);
/* ********************************* * VIDEO CAPTIONS * **********************************/// Get caption for a video
client.videos.captions.get(videoId, language);
// Get all captions for a video
client.videos.captions.getAll(videoId);
// Upload a caption file for a video (.vtt)
client.videos.captions.upload(source, properties);
// Set default caption for a video
client.videos.captions.updateDefault(videoId, language, isDefault);
// Delete video's caption
client.videos.captions.delete(videoId, language);
/* ********************************* * VIDEO CHAPTERS * **********************************/// Get caption for a video
client.videos.chapters.get(videoId, language);
// Get all chapters for a video
client.videos.chapters.getAll(videoId);
// Upload a chapter file for a video (.vtt)
client.videos.chapters.upload(source, properties);
// Delete video's chapter
client.videos.chapters.delete(videoId, language);
/* ********************************* * PLAYERS * **********************************/// Get a player
client.players.get(playerId);
// List players
client.players.search(parameters = {});
// Create a player
client.players.create(properties = {});
// Update player's properties
client.players.uploadLogo(source, playerId, link);
// Update player's properties
client.players.update(playerId, properties);
// Delete a player logo
client.players.deleteLogo(playerId);
// Delete a player
client.players.delete(playerId);
/* ********************************* ********************************* * LIVE * ********************************* **********************************/// Show a live
client.lives.get(liveStreamId);
// List or search lives
client.lives.search(parameters = {});
// Create live properties
client.lives.create(name, properties = {});
// Update live properties
client.lives.update(liveStreamId, properties);
// Delete live (file and data)
client.lives.delete(liveStreamId);
/* ********************************* * LIVE THUMBNAIL * **********************************/// Upload a thumbnail for live
client.lives.uploadThumbnail(source, liveStreamId);
/* ********************************* * ANALYTICS * **********************************/// Get video analytics between period
client.analyticsVideo.get(videoId, period);
// Search videos analytics between period, filter with tags or metadata
client.analyticsVideo.search(parameters);
// Get live analytics between period
client.analyticsLive.get(liveStreamId, period);
// Search lives analytics between period, filter with tags or metadata
client.analyticsLive.search(parameters);
// Get analytics session events
client.analyticsLive.get(sessionId, parameters);