API
This is documentation of the new API for Telestream Cloud Flip transcoding service. It introduces a number of changes and updates that may affect your integration.
We still maintain documentation for API V3 and documentation for API V2 and you will be able to keep using it.
Flip API is REST based with responses in JSON and allows you to control whole transcoding process, from setting up and managing Factories, adding and customizing profiles, submitting jobs and monitoring their progress and status.
Using the REST API directly
If you don’t plan to use one of our SDKs you then you will need the following data to make calls to our API:
- API Address: https://api.cloud.telestream.net/flip/3.1
encodings
encodings
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/encodings.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/encodings.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/encodings.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /encodings.json
Returns a list of Encoding objects
Parameters
factory_id string In query required Id of a Factory. |
video_id string In query optional Id of a Video. When specified, the resulting list will contain videos that belong to the Video. |
status string In query optional One of success , fail , processing . When specified, the resulting list will contain ecodings filtered by status. |
profile_id string In query optional Filter by profile_id. |
profile_name string In query optional Filter by profile_name. |
page string In query optional A page to be fetched. Default is 1 . |
per_page string In query optional A number of results per page. Default is 100 . |
screenshots string In query optional Determines whether the response will include screenshots. By default this is not set. |
precise_status string In query optional Determines whether the response will include a precise status. By default this is not set. |
Example responses
200 Response
{
"encodings": [
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a list of Video’s encodings. | PaginatedEncodingsCollection |
create encoding
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/encodings.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/encodings.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/encodings.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /encodings.json
Creates an Encoding
Body parameter
{
"video_id": "string",
"profile_id": "string",
"profile_name": "string"
}
Parameters
factory_id string In query required Id of a Factory. |
screenshots string In query optional Determines whether the response will include screenshots. By default this is not set. |
precise_status string In query optional Determines whether the response will include a precise status. By default this is not set. |
body object In body required none |
» video_id string In body required Id of a Video that will be encoded. |
» profile_id string In body optional Id of a Profile that will be used for encoding. |
» profile_name string In body optional A name of a Profile that will be used for encoding. |
Example responses
200 Response
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully created an Encoding. | Encoding |
400 | Bad RequestFailed to create an Encoding using the provided data or tried to add an Encoding for a failed Video or a Video older than 30 days | Error |
403 | ForbiddenNot authorized to create an Encoding | Error |
encodings count
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/encodings/count.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/encodings/count.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/count.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/encodings/count.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /encodings/count.json
Returns a number of Encoding objects created using a given factory.
Parameters
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a number of encodings. | CountResponse |
404 | Not FoundFactory not found. | Error |
encoding
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /encodings/{id}.json
Returns an Encoding object.
Parameters
id string In path required Id of an Encoding. |
factory_id string In query required Id of a Factory. |
screenshots string In query optional Determines whether the response will include screenshots. By default this is not set. |
precise_status string In query optional Determines whether the response will include a precise status. By default this is not set. |
Example responses
200 Response
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched the Encoding | Encoding |
404 | Not FoundEncoding or Factory not found | Error |
update encoding
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.put 'https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.put('https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PUT", "https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
PUT /encodings/{id}.json
Updates an Encoding
Body parameter
{
"profile_id": "string",
"profile_name": "string"
}
Parameters
id string In path required Id of an Encoding. |
factory_id string In query required Id of a Factory. |
screenshots string In query optional Determines whether the response will include screenshots. By default this is not set. |
precise_status string In query optional Determines whether the response will include a precise status. By default this is not set. |
body object In body required none |
» profile_id string In body optional Id of a Profile that will be used for encoding. |
» profile_name string In body optional A name of a Profile that will be used for encoding. |
Example responses
200 Response
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKEncoding successfully updated. | Encoding |
400 | Bad RequestTried to update an Encoding older than 30 days. | Error |
403 | ForbiddenNot authorized to update the Encoding. | Error |
404 | Not FoundEncoding or Factory not found. | Error |
delete encoding
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.delete 'https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.delete('https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("DELETE", "https://api.cloud.telestream.net/flip/3.1/encodings/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
DELETE /encodings/{id}.json
Deletes an Encoding from both Telestream Cloud and your storage. Returns an information whether the operation was successful.
Parameters
id string In path required Id of an Encoding. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"deleted": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKEncoding has been successfully deleted. | DeletedResponse |
400 | Bad RequestTried to delete an Encoding older than 30 days. | Error |
403 | ForbiddenNot authorized to delete the Encoding. | Error |
404 | Not FoundEncoding or Factory not found. | Error |
signed encoding url
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-url.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-url.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-url.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-url.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /encodings/{id}/signed-url.json
Returns a signed url pointing to an Encoding.
Parameters
id string In path required Id of an Encoding. |
factory_id string In query required Id of a Factory. |
expires integer In query optional Duration in seconds for validity period. |
Example responses
200 Response
{
"signed_url": "string"
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a signed url. | EncodingSignedUrl |
404 | Not FoundEncoding or Factory not found. | Error |
signed encoding urls
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-urls.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-urls.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-urls.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/encodings/{id}/signed-urls.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /encodings/{id}/signed-urls.json
Returns a list of signed urls pointing to an Encoding’s outputs.
Parameters
id string In path required Id of an Encoding. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"signed_urls": [
"string"
]
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a list of signed urls. | EncodingSignedUrls |
404 | Not FoundEncoding or Factory not found | Error |
retry encoding
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/encodings/{id}/retry.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/encodings/{id}/retry.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/{id}/retry.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/encodings/{id}/retry.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /encodings/{id}/retry.json
Retries a failed encoding.
Parameters
id string In path required Id of an Encoding. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"retried": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully requested reprocessing of the Encoding. | RetriedResponse |
403 | ForbiddenNot authorized to retry the Encoding. | Error |
404 | Not FoundEncoding or Factory not found. | Error |
cancel encoding
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/encodings/{id}/cancel.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/encodings/{id}/cancel.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/encodings/{id}/cancel.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/encodings/{id}/cancel.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /encodings/{id}/cancel.json
Cancels an Encoding.
Parameters
id string In path required Id of an Encoding. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"canceled": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKEncoding has been successfully canceled. | CanceledResponse |
400 | Bad RequestTried to cancel an Encoding older than 30 days. | Error |
403 | ForbiddenNot authorized to cancel the Encoding. | Error |
404 | Not FoundEncoding or Factory not found. | Error |
factories
factories
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/factories.json',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/factories.json', params={
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/factories.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/factories.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /factories.json
Returns a collection of Factory objects.
Returns a collection of Factory objects.
Parameters
page string In query optional A page to be fetched. Default is 1 . |
per_page string In query optional A number of results per page. Default is 100 . |
with_storage_provider string In query optional if set to true , results will include a storage provider’s id |
Example responses
200 Response
{
"type": "object",
"properties": {
"factories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier of a Factory."
},
"name": {
"type": "string",
"description": "Human-readable identifier of a Factory."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"created_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been created."
},
"updated_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been updated last time."
},
"url": {
"type": "string",
"description": "An URL pointing to the output_bucket_name."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"input_bucket_files_map": {
"type": "object"
},
"input_bucket_sync_every_n_min": {
"type": "string",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_recursive": {
"type": "string"
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"outputs_path_format": {
"type": "string"
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
}
}
}
},
"page": {
"type": "integer",
"description": "A number of the fetched page."
},
"per_page": {
"type": "integer",
"description": "A number of factories per page."
},
"total": {
"type": "integer",
"description": "A number of all factories stored in the db."
}
}
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a list of Factories. | PaginatedFactoryCollection |
create factory
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/factories.json',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/factories.json', params={
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/factories.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/factories.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /factories.json
Creates a new factory
Body parameter
{
"type": "object",
"required": [
"name"
],
"properties": {
"aws_access_key": {
"type": "string",
"description": "AWS access key."
},
"aws_secret_key": {
"type": "string",
"description": "AWS secret key."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_recursive": {
"type": "boolean"
},
"input_bucket_sync_every_n_min": {
"type": "integer",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"name": {
"type": "string",
"description": "Name of the Factory."
},
"outputs_path_format": {
"type": "string",
"description": "Specify the directory where the output files should be stored. By default it is not set. More info [here](https://cloud.telestream.net/docs#path-format---know-how)."
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"storage_credential_attributes": {
"type": "object",
"properties": {
"host": {
"type": "string"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"port": {
"type": "integer"
}
}
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
}
}
}
Parameters
with_storage_provider string In query optional if set to true , results will include a storage provider’s id |
required none |
Example responses
201 Response
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier of a Factory."
},
"name": {
"type": "string",
"description": "Human-readable identifier of a Factory."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"created_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been created."
},
"updated_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been updated last time."
},
"url": {
"type": "string",
"description": "An URL pointing to the output_bucket_name."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"input_bucket_files_map": {
"type": "object"
},
"input_bucket_sync_every_n_min": {
"type": "string",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_recursive": {
"type": "string"
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"outputs_path_format": {
"type": "string"
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
}
}
}
Responses
Status | Description | Schema |
---|---|---|
201 | CreatedSuccessfully created a Factory | Factory |
400 | Bad RequestFailed to create a Factory | Error |
403 | ForbiddenNot authorized to create a Factory | Error |
factory
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/factories/{id}.json',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/factories/{id}.json', params={
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/factories/{id}.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/factories/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /factories/{id}.json
Returns a Factory object.
Returns a Factory object.
Parameters
id string In path required id of a factory |
with_storage_provider string In query optional if set to true , results will include a storage provider’s id |
Example responses
200 Response
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier of a Factory."
},
"name": {
"type": "string",
"description": "Human-readable identifier of a Factory."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"created_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been created."
},
"updated_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been updated last time."
},
"url": {
"type": "string",
"description": "An URL pointing to the output_bucket_name."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"input_bucket_files_map": {
"type": "object"
},
"input_bucket_sync_every_n_min": {
"type": "string",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_recursive": {
"type": "string"
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"outputs_path_format": {
"type": "string"
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
}
}
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched the Factory | Factory |
403 | ForbiddenUnauthorized to access the Factory | Error |
404 | Not FoundFactory not found | Error |
update factory
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.patch 'https://api.cloud.telestream.net/flip/3.1/factories/{id}.json',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.patch('https://api.cloud.telestream.net/flip/3.1/factories/{id}.json', params={
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/factories/{id}.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.cloud.telestream.net/flip/3.1/factories/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
PATCH /factories/{id}.json
Updates a Factory’s settings. Returns a Factory object.
Body parameter
{
"type": "object",
"required": [
"name"
],
"properties": {
"aws_access_key": {
"type": "string",
"description": "AWS access key."
},
"aws_secret_key": {
"type": "string",
"description": "AWS secret key."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_recursive": {
"type": "boolean"
},
"input_bucket_sync_every_n_min": {
"type": "integer",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"name": {
"type": "string",
"description": "Name of the Factory."
},
"outputs_path_format": {
"type": "string",
"description": "Specify the directory where the output files should be stored. By default it is not set. More info [here](https://cloud.telestream.net/docs#path-format---know-how)."
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"storage_credential_attributes": {
"type": "object",
"properties": {
"host": {
"type": "string"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"port": {
"type": "integer"
}
}
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
}
}
}
Parameters
id string In path required id of the factory |
with_storage_provider string In query optional if set to true , results will include a storage provider’s id |
required none |
Example responses
200 Response
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier of a Factory."
},
"name": {
"type": "string",
"description": "Human-readable identifier of a Factory."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"created_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been created."
},
"updated_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been updated last time."
},
"url": {
"type": "string",
"description": "An URL pointing to the output_bucket_name."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"input_bucket_files_map": {
"type": "object"
},
"input_bucket_sync_every_n_min": {
"type": "string",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_recursive": {
"type": "string"
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"outputs_path_format": {
"type": "string"
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
}
}
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKOK | Factory |
400 | Bad Requestfailed to update the Factory | Error |
403 | ForbiddenUnauthorized to update the Factory | Error |
404 | Not FoundFactory not found | Error |
toggle factory sync
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/factories/{id}/sync.json',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/factories/{id}/sync.json', params={
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/factories/{id}/sync.json");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/factories/{id}/sync.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /factories/{id}/sync.json
Toggles synchronisation settings.
Body parameter
{
"sync": "true"
}
Parameters
id string In path required id of the factory |
required none |
Example responses
200 Response
{
"syncing": false
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully updated synchronisation settings. | FactorySync |
403 | ForbiddenUnauthorized to access the Factory. | Error |
404 | Not FoundFactory not found. | Error |
Presets
Encoding profile presets
Telestream Cloud provides several encoding profile presets which make it easy to setup the correct output formats for your videos.
To manage your profiles
- Log into your Telestream Cloud Dashboard
- Select your Factory
- Click on the
Profiles
Tab - Click
Add profile
and you’ll be able to select from one of the recommended presets.
Available presets
Below you’ll find details about the presets available:
Web
MP4 (H.265)
H.265 video with AAC audio for playback on HTML5 browsers, desktop players, Flash, Apple iPhone (3GS and above) and iPad. Currently it’s premium feature.
parameter | standard quality |
---|---|
preset_name | h265 |
audio bitrate | 128kbps (by default) |
resolution | 640x480 (by default) |
MP4 (H.264)
H.264 video with AAC audio for playback on HTML5 browsers, desktop players, Flash, iPhone (3GS and above) and iPad. Use H264 baseline to support most of phones like first Apple iPhone’s and Blackberry’s.
parameter | standard quality |
---|---|
preset_name | h264 |
audio bitrate | 128kbps (by default) |
resolution | 640x480 (by default) |
WebM (VP8)
VP8 video with Ogg Vorbis audio for playback in HTML5 compatible browsers.
paramater | standard quality |
---|---|
preset_name | webm.vp8 |
audio bitrate | 128kbps (by default) |
resolution | 640x480 (by default) |
OGG (Theora)
Theora video with Ogg Vorbis audio for playback in HTML5 compatible browsers.
parameter | standard quality |
---|---|
preset_name | ogg |
audio bitrate | 128kbps (by default) |
resolution | 640x480 (by default) |
WebM (VP9)
VP9 video with Opus audio for playback in HTML5 compatible browsers.
paramater | standard quality |
---|---|
preset_name | webm.vp9 |
audio bitrate | 192kbps (by default) |
resolution | 640x360 (by default) |
Multiscreen
HTTP Live Streaming (iOS Adaptive Streaming)
## Sub streams
TelestreamCloud::Profile.create!(
:name => "hls.iphone.400k",
:preset_name => "hls.variant",
:video_bitrate => 400,
:segment_time => 5
)
TelestreamCloud::Profile.create!(
:name => "hls.iphone.600k",
:preset_name => "hls.variant",
:video_bitrate => 600,
:segment_time => 5
)
TelestreamCloud::Profile.create!(
:name => "hls.ipad.1200k",
:preset_name => "hls.variant",
:video_bitrate => 1200,
:segment_time => 5
)
TelestreamCloud::Profile.create!(
:name => "hls.audio",
:preset_name => "hls.variant.audio",
:segment_time => 5
)
## iPhone and iPad Playlist
TelestreamCloud::Profile.create!(
:name => "iphone",
:preset_name => "hls.variant.playlist",
:variants => "hls.iphone*,hls.audio",
:extname => ".tar"
)
TelestreamCloud::Profile.create!(
:name => "ipad",
:preset_name => "hls.variant.playlist",
:variants => "hls.iphone*,hls.ipad*,hls.audio",
:extname => ".tar"
)
Special multi-bitrate segmented video for streaming to Apple devices.
Create a Master playlist profile that will list all sub-streams into one file.
parameter | HLS playlist | HLS variants |
---|---|---|
preset_name | hls.variant.playlist | hls.variant |
Then create a profile for each sub-stream of your Master Playlist. Each profile sub-stream (EXT-X-STREAM-INF) contains RESOLUTION, BANDWIDTH tags to help the client to choose an appropriate stream.
iOS devices will stream the best variant depending on the quality of the network connection. See Apple’s recommendation for more details.
You can create different playlists (one for iPhone one for iPad). Only the profiles with their names matching the variant attribute will be added to the playlist.
optional parameters
parameter | attributes |
---|---|
extname | Setting extname to .tar for the playlist profile will create a .tar file that contain all variants that match HLS master playlist format instead of creating separate file for each variant. |
segment_time | Specify the segment duration in seconds. By default it is set to 10 seconds. |
We strongly recommend sending the video object with full list of profiles at once.
There is another way to do so by adding encodings to video previously sent (by POST /encodings.json) - if you prefer this approach then you need to remember to send the playlist file first! If you mess up the order, you may receive NoFilesToUpload : Files list for upload is empty
error.
(new) AES-128 encryption
It is possible to ecrypt video using AES-128. More info in our guides.
MPEG DASH
MPEG standard HTTP based adaptive bitrate streaming solution (supported by YouTube, Netflix).
parameter | MPEG DASH playlist | MPEG DASH variants |
---|---|---|
preset_name | dash.variant.playlist | dash.variant |
optional parameters
parameter | attributes |
---|---|
extname | Setting extname to .tar for the playlist profile will create a .tar file that contain all variants that match MPEG-DASH master playlist format instead of creating separate file for each variant. |
segment_time | Specify the segment duration in seconds. By default it is set to 10 seconds. |
We strongly recommend sending the video object with full list of profiles at once.
There is another way to do so by adding encodings to video previously sent (by POST /encodings.json) - if you prefer this approach then you need to remember to send the playlist file first! If you mess up the order, you may receive NoFilesToUpload : Files list for upload is empty
error.
(new) Common Encryption (CENC)
CENC is now available for DASH. More info here.
Professional
MPEG Program Stream (MPEG-2)
Creates an MPEG Program Stream (PS) file containing MPEG-2 video and MPEG Layer 2 audio.
paramater | MPEG PS |
---|---|
preset_name | mpegps |
MPEG Transport Stream (MPEG-2)
Creates an MPEG Transport Stream (TS) file containing MPEG-2 video and MPEG Layer 2 audio.
paramater | MPEGTS (MPEG-2) |
---|---|
preset_name | mpegts.mpeg2 |
MPEG Transport Stream (H264)
Creates an MPEG Transport Stream (TS) file containing H.264 video and AAC audio.
paramater | MPEG TS (H264) |
---|---|
preset_name | mpegts.h264 |
XDCAM
Creates an MXF file containing MPEG-2 video and PCM audio. A common format used for broadcast program distribution.
paramater | XDCAM |
---|---|
preset_name | xdcam |
Apple ProRes
Creates a QuickTime movie containing Apple ProRes 422 video and PCM audio. A common format used for post-production and delivery to the iTunes store.
paramater | Apple Prores |
---|---|
preset_name | prores422 |
AVC-Intra
Creates an MXF file containing AVC-Intra 50 or 100 video and PCM audio. It’s 10-bit intra-frame compression format used for post-production and archiving while preserving maximum quality.
paramater | AVC-Intra |
---|---|
preset_name | avc.intra |
IMX
Creates an MXF file containing MPEG-2 IMX 30/40/50 video and PCM audio. Sony developed format used for broadcast program distribution that uses intra-frame compression for better editing capabilities.
paramater | IMX |
---|---|
preset_name | imx |
Extras
MP3
MP3 audio preset.
parameter | MP3 |
---|---|
preset_name | mp3 |
audio bitrate | 192kbps (by default) |
M4A (AAC)
MP4 audio preset.
parameter | M4A (AAC) |
---|---|
preset_name | aac |
audio bitrate | 192kbps (by default) |
OGA (Vorbis)
Ogg Vorbis audio preset.
parameter | OGA (Vorbis) |
---|---|
preset_name | vorbis |
audio bitrate | 192kbps (by default) |
Thumbnails
Special preset for creating thumbnails from video.
parameter | Thumbnail |
---|---|
preset_name | thumbnail |
Ruby example
TelestreamCloud::Profile.create!(
:preset_name => "h264", # A valid preset name, as per the tables above
:name => "my-h264", # Unique name for this profile
:h264_crf => 23,
:h264_profile => "baseline",
:h264_level => "3.0",
:width => "480",
:height => "320"
)
Add an H264 profile
Telestream Cloud gives you complete control of presets using the API and the available libraries. For this, simply pass the preset_name
attribute instead of the command
attribute.
Ruby example
TelestreamCloud::Profile.create!(
:name => "h264",
:preset_name => "h264",
:width => 480,
:height => 320,
:watermark_url => "https://cloud.telestream.net/images/cloud-logo.png",
:watermark_bottom => 5,
:watermark_right => 5
)
Add Watermarking
You may want to add watermarking to your encodings. Use the api to set the url and the position of a remote image to use as a watermark.
Ruby example
TelestreamCloud::Profile.create!(
:preset_name => "h264",
....
:frame_count => 5
)
Create Thumbnails
You have two ways of creating thumbnails.
- Encodings will not create any screenshots by default.
You can change the amount of captured thumbnails using the
frame_count
attribute.
Screenshots will be generated and uploaded to the S3 bucket with the name using the following convention: $path$_$screenshot_number$.jpg
e.g. (my-path/2f8760b7e0d4c7dbe609b5872be9bc3b_4.jpg
).
Ruby example
TelestreamCloud::Profile.create!(
:preset_name => "thumbnail",
....
:extname => '.jpg', # or .png
:frame_interval => "300f",
:width => 90,
:height => 60,
)
- You can either create a Thumbnail profile. Thumbnails are performed directly on the original video. You can modify the format, size, the aspect mode and the rate.
The resulting encoding will have all the thumbnails listed inside the files
attribute
Ruby example
TelestreamCloud::Profile.create!(
# h264 profile
:preset_name => "h264",
# sets your profile name to h264
:name => "h264",
# 2 pass encoding
:two_pass => true,
# 30 fps
:fps => 30,
# mp4 format and .mp4 extname
:extname => ".mp4"
# 48k sample rate
:audio_sample_rate => 48000,
# Resolution 1080x720
:height => 720,
:width => 1080,
# set the s3 destination
:outputs_path_format => "my/path/:id",
# don't upscale the video if the input is smaller than your profile resolution
:upscale => false,
# starts the clip after 10 seconds
:clip_offset => "00:00:10",
# Cut the clip after 20 minutes
:clip_length => "00:20:00",
# Keep aspect ratio
:aspect_mode => 'letterbox',
# Bitrates
:video_bitrate => 2200,
:audio_bitrate => 128,
)
Complete settings
You can set numerous of options to make your encoding just right.
FFmpeg Neckbeard
Telestream Cloud provides complete control over the commands used to convert video. You can log in to your Telestream Cloud Dashboard and choose from our presets, or you can use the API to access the bare metal.
Stacks
As ffmpeg API changes, we can’t always update ffmpeg without breaking your commands. That’s where presets become handy. To make sure your commands are backward compatible with the encoding API and ffmpeg’s API, we are using separate stacks of tools. The default stack is corepack-shifu. There is also corepack-2, corepack-3 and corepack-4.
If you use API to create your profiles and want to stay on the old stack, make sure you specify ‘stack’ => 'name_of_the_deprecated_stack_here’.
We highly recommend to switch to presets or to the newest stack (corepack-shifu). It improves encoding/decoding speed and formats/codecs support.
API
All of the fields below are required when creating an advanced profile.
parameters | attributes |
---|---|
extname | File extension, beginning with ’.’, of the output video. |
command | Video conversion command (in most cases an ffmpeg command). |
name | Which is a unique name inside your Factory to reference your profile. |
Telestream Cloud provides full access to a suite of powerful video conversion tools. These tools can be used together in one profile to output a variety of formats.
To execute multiple commands in one profile, you must separate each with a \n
(newline) or ;
(semicolon).
Telestream Cloud provides a few api tokens
you can use in your commands:
parameters | attributes |
---|---|
$input_file$ | input filename |
$output_file$ | output filename |
$width$ | width defined in your profile |
$height$ | height defined in your profile |
$record_id$ | encoding ID |
$filters$ | scale your video considering the aspect mode and resolution attributes of your profile. |
$audio_sample_rate$ | audio sample rate |
$audio_channels$ | audio channels (default is copy ) |
$audio_bitrate$ | audio_bitrate |
$video_quality$ | video bitrate or h264 crf |
$video_bitrate$ | video_bitrate only |
$max_audio_bitrate$ | audio bitrate threshold |
$max_video_bitrate$ | video bitrate threshold |
$fps$ | frame rate (default is copy ) |
$clip$ | subset of the video to be encoded |
Examples
Ruby example
TelestreamCloud::Profile.create!(
:stack => "corepack-3",
:name => "h264.SD",
:width => 480,
:height => 320,
:h264_crf => 23,
:audio_bitrate => 128,
:extname => ".mp4",
:audio_sample_rate => 44100,
:keyframe_interval => 250,
:command => "ffmpeg -i $input_file$ -threads 0 -c:a libfaac -c:v libx264 -preset medium $video_quality$ $audio_bitrate$ $audio_sample_rate$ $keyframes$ $fps$ -y video_tmp_noqt.mp4\nqt-faststart video_tmp_noqt.mp4 $output_file$"
)
PHP example
<?php
$panda->post('/profiles.json', array(
'stack' => "corepack-3",
'name' => "h264.SD",
'width' => 480,
'height' => 320,
'h264_crf' => 23,
'audio_bitrate' => 128,
'extname' => ".mp4",
'audio_sample_rate' => 44100,
'keyframe_interval' => 250,
'command' => 'ffmpeg -i $input_file$ -threads 0 -c:a libfaac -c:v libx264 -preset medium $video_quality$ $audio_bitrate$ $audio_sample_rate$ $keyframes$ $fps$ -y video_tmp_noqt.mp4\nqt-faststart video_tmp_noqt.mp4 $output_file$'
));
?>
Let’s create a custom h.264 profile.
You may not find a preset for your exactly need but the following examples should help you to encode videos into some popular formats.
FLV
TelestreamCloud::Profile.create!(
:stack => "corepack-3",
:name => "flv",
:width => 480,
:height => 320,
:video_bitrate => 500,
:audio_bitrate => 128,
:extname => ".flv",
:command => "ffmpeg -i $input_file$ -threads 0 $audio_sample_rate$ $video_bitrate$ $audio_bitrate$ $fps$ $filters$ -y $output_file$"
)
AVI
TelestreamCloud::Profile.create!(
:stack => "corepack-3",
:name => "avi",
:width => 480,
:height => 320,
:video_bitrate => 500,
:audio_bitrate => 128,
:extname => ".avi",
:command => "ffmpeg -i $input_file$ -threads 0 -c:v msmpeg4 -c:a libmp3lame -tag:v MP43 $audio_sample_rate$ $audio_sample_rate$ $video_bitrate$ $audio_bitrate$ $fps$ $filters$ -y $output_file$"
)
WMV
TelestreamCloud::Profile.create!(
:stack => "corepack-3",
:name => "wmv",
:width => 480,
:height => 320,
:video_bitrate => 500,
:audio_bitrate => 128,
:extname => ".wmv",
:command => "ffmpeg -i $input_file$ -threads 0 -c:v wmv2 -c:a wmav2 $audio_sample_rate$ $video_bitrate$ $audio_bitrate$ $fps$ $filters$ -y $output_file$"
)
OGG - 2 pass
TelestreamCloud::Profile.create!(
:stack => "corepack-3",
:name => "ogg.2pass",
:width => 480,
:height => 320,
:video_bitrate => 500,
:audio_bitrate => 128,
:extname => ".ogg",
:command => "ffmpeg -i $input_file$ -f ogg -pass 1 -threads 0 -c:v libtheora -c:a libvorbis $audio_sample_rate$ $video_bitrate$ $audio_bitrate$ $fps$ $filters$ -y /dev/null\nffmpeg -i $input_file$ -f ogg -pass 2 -threads 0 -c:v libtheora -c:a libvorbis $audio_sample_rate$ $video_bitrate$ $audio_bitrate$ $fps$ $filters$ -y $output_file$"
)
Our presets support two pass encoding but if you need the command, here is the way to do it:
Available conversion tools
Here is the list of conversion tools available in Telestream Cloud.
FFmpeg
FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec - the leading audio/video codec library.
We provide a recent version of ffmpeg, compiled from the git repository with as many codecs as we could get our hands on (See full list of Supported File Formats and Codecs).
command name: ffmpeg
command version: Ffmpeg 0.10
Lame
See http://lame.sourceforge.net/
LAME is a high quality MPEG Audio Layer III (MP3) encoder.
command name: lame
command version: Lame 3.99
MEncoder
An other video encoder built from the same code as MPlayer.
command name: mencoder
Segmenter
Segmenter divides input file into smaller parts for HLS playlists.
command name: segmenter
Manifester
Manifester is a tool to create m3u8 manifest file.
command name: manifester
QtFaststart
See https://multimedia.cx/eggs/improving-qt-faststart/
Moves the moov atom in front of the data to improve network streaming.
command name: qt-faststart
QtRotate
See https://github.com/danielgtaylor/qtrotate
QtRotate is a tool to work with rotated files.
command name: qtrotate
Yamdi
See http://yamdi.sourceforge.net/
Yamdi is a metadata injector for FLV files.
command name: yamdi
MP4Box
See https://gpac.wp.mines-telecom.fr/mp4box/
Mp4Box is a tool for manipulating multimedia files.
command name: MP4Box
notifications
notifications
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/notifications.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/notifications.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/notifications.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/notifications.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /notifications.json
Returns a Factory’s notification settings.
Parameters
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"url": "string",
"delay": 0,
"send_video_payload": true,
"events": {
"encoding_completed": true,
"encoding_progress": true,
"video_created": true,
"video_encoded": true
}
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched the Factory’s notification settings | CloudNotificationSettings |
404 | Not FoundFactory not found. | Error |
update notifications
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.put 'https://api.cloud.telestream.net/flip/3.1/notifications.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.put('https://api.cloud.telestream.net/flip/3.1/notifications.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/notifications.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PUT", "https://api.cloud.telestream.net/flip/3.1/notifications.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
PUT /notifications.json
Updates a Factory’s notification settings.
Body parameter
{
"url": "string",
"delay": 0,
"send_video_payload": true,
"events": {
"encoding_completed": true,
"encoding_progress": true,
"video_created": true,
"video_encoded": true
}
}
Parameters
factory_id string In query required Id of a Factory. |
required none |
Example responses
200 Response
{
"url": "string",
"delay": 0,
"send_video_payload": true,
"events": {
"encoding_completed": true,
"encoding_progress": true,
"video_created": true,
"video_encoded": true
}
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully updated the Factory’s notification settings. | CloudNotificationSettings |
400 | Bad RequestFailed to update notification settings using the provided parameters. | Error |
403 | ForbiddenNot authorized to update the Factory’s notification settings. | Error |
404 | Not FoundFactory not found. | Error |
profiles
profiles
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/profiles.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/profiles.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/profiles.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/profiles.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /profiles.json
Returns a collection of Profile objects.
Parameters
factory_id string In query required Id of a Factory. |
exclude_advanced_services boolean In query optional Determine whether exclude Advanced Services profiles from the results. By default this is not set. |
expand boolean In query optional If expand option is set Profile objects will contain all command parameters, even if their value is default. By default this is not set. |
page string In query optional A page to be fetched. Default is 1 . |
per_page string In query optional A number of results per page. Default is 100 . |
Example responses
200 Response
{
"profiles": [
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a collection of Profiles | PaginatedProfilesCollection |
404 | Not FoundFactory not found | None |
create profile
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/profiles.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/profiles.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/profiles.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/profiles.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /profiles.json
Creates a Profile
Body parameter
{
"preset_name": "aac",
"advanced_fps_conversion": "telestream",
"aspect_mode": "preserve",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": "string",
"audio_codec": "string",
"audio_format": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"closed_captions": "add",
"dash_profile": "string",
"deinterlace": "keep_fps",
"deinterlace_frames": "string",
"dnxhd_type": "string",
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_offsets": "2s, 10s, 250f, 400f",
"frame_interval": "1000f",
"frame_count": 0,
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"imx_type": "string",
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": 0,
"max_rate": 0,
"merge_audio_streams": "string",
"name": "string",
"outputs_path_format": "string",
"pmt_pid": "string",
"prores_format": "string",
"segment_time": "string",
"size": "string",
"starting_timecode": "string",
"tar": true,
"transport_rate": "string",
"ts_pids": "string",
"upscale": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"mute_audio_tracks": true,
"byte_range_requests": "string",
"lang": "string",
"use_editlist": "string",
"audio_map": "string",
"audio_stream_id": "string",
"bumpers": {},
"codec_preset": "ultrafast",
"color_metadata": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": "string",
"dynamic_recipe": "string",
"playlist_type": "string",
"preset_version": "string",
"segment_delimiter": "string",
"sws_flags": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": "string",
"telestream_cost_scaler": "string",
"telestream_search_length_scaler": "string",
"telestream_subpel_mode": "string",
"trailers": {},
"vantage_group_id": "string",
"watermark_bumpers": "string",
"watermark_trailers": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "string",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true,
"title": "string",
"time_code": true
}
Parameters
factory_id string In query required Id of a Factory. |
exclude_advanced_services boolean In query optional none |
expand boolean In query optional If expand option is set Profile objects will contain all command parameters, even if their value is default. By default it is not set. |
required none |
Example responses
200 Response
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully created a Profile | Profile |
400 | Bad RequestPosted incorrect parameters | Error |
403 | ForbiddenNot authorized to create a Profile | Error |
404 | Not FoundFactory not found | Error |
update profile
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.put 'https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.put('https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PUT", "https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
PUT /profiles/{id}.json
Updates a given Profile
Body parameter
{
"preset_name": "aac",
"advanced_fps_conversion": "telestream",
"aspect_mode": "preserve",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": "string",
"audio_codec": "string",
"audio_format": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"closed_captions": "add",
"dash_profile": "string",
"deinterlace": "keep_fps",
"deinterlace_frames": "string",
"dnxhd_type": "string",
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_offsets": "2s, 10s, 250f, 400f",
"frame_interval": "1000f",
"frame_count": 0,
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"imx_type": "string",
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": 0,
"max_rate": 0,
"merge_audio_streams": "string",
"name": "string",
"outputs_path_format": "string",
"pmt_pid": "string",
"prores_format": "string",
"segment_time": "string",
"size": "string",
"starting_timecode": "string",
"tar": true,
"transport_rate": "string",
"ts_pids": "string",
"upscale": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"mute_audio_tracks": true,
"byte_range_requests": "string",
"lang": "string",
"use_editlist": "string",
"audio_map": "string",
"audio_stream_id": "string",
"bumpers": {},
"codec_preset": "ultrafast",
"color_metadata": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": "string",
"dynamic_recipe": "string",
"playlist_type": "string",
"preset_version": "string",
"segment_delimiter": "string",
"sws_flags": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": "string",
"telestream_cost_scaler": "string",
"telestream_search_length_scaler": "string",
"telestream_subpel_mode": "string",
"trailers": {},
"vantage_group_id": "string",
"watermark_bumpers": "string",
"watermark_trailers": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "string",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true,
"title": "string",
"time_code": true
}
Parameters
id string In path required none |
factory_id string In query required Id of a Factory. |
exclude_advanced_services boolean In query optional none |
expand boolean In query optional If expand option is set Profile objects will contain all command parameters, even if their value is default. By default this is not set. |
required none |
Example responses
200 Response
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully updated the Profile | Profile |
400 | Bad RequestPosted incorrect parameters | Error |
403 | ForbiddenNot authorized to update the Profile | Error |
404 | Not FoundProfile or Factory not found | Error |
delete profile
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.delete 'https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.delete('https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("DELETE", "https://api.cloud.telestream.net/flip/3.1/profiles/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
DELETE /profiles/{id}.json
Deletes a given Profile
Parameters
id string In path required Id of a Profile |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"deleted": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKthe Profile object has been successfully deleted | DeletedResponse |
403 | ForbiddenUnauthorized to delete the Profile | Error |
404 | Not FoundProfile or Factory not found | Error |
copy profile
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/profiles/{id}/copy.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/profiles/{id}/copy.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/profiles/{id}/copy.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/profiles/{id}/copy.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /profiles/{id}/copy.json
Copies a given Profile
Body parameter
{
"dest_factory_id": "string",
"profile_name": "string"
}
Parameters
id string In path required Id of a Profile. |
factory_id string In query required Id of a Factory. |
expand boolean In query optional If expand option is set Profile objects will contain all command parameters, even if their value is default. By default this is not set. |
body object In body required none |
» dest_factory_id string In body required an id of a target Factory that will own a copy of the Profile |
» profile_name string In body required a name for a copy of the Profile |
Example responses
200 Response
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully copied the Profile | Profile |
403 | ForbiddenUnauthorized to copy the Profile | Error |
404 | Not FoundProfile, the old Factory, or the new Factory not found | Error |
profile
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /profiles/{id_or_name}.json
Returns a Profile object.
Parameters
id_or_name string In path required A name or an id of a Profile. |
factory_id string In query required Id of a Factory. |
expand boolean In query optional If expand option is set Profile objects will contain all command parameters, even if their value is default. By default this is not set. |
Example responses
200 Response
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched the Profile. | Profile |
404 | Not FoundProfile or Factory not found. | Error |
profile encodings
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}/encodings.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}/encodings.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}/encodings.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/profiles/{id_or_name}/encodings.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /profiles/{id_or_name}/encodings.json
Returns a list of Encodings that belong to a Profile.
Parameters
id_or_name string In path required Id or name of a Profile. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"encodings": [
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a collection of Encodings. | PaginatedEncodingsCollection |
404 | Not FoundProfile or Factory not found. | Error |
videos
videos
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/videos.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/videos.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/videos.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /videos.json
Returns a collection of Video objects.
Parameters
factory_id string In query required Id of a Factory. |
page string In query optional A page to be fetched. Default is 1 . |
per_page string In query optional A number of results per page. Default is 100 . |
Example responses
200 Response
{
"videos": [
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 0,
"created_at": "string",
"duration": 0,
"encodings_count": 0,
"error_class": "string",
"error_message": "string",
"extname": "string",
"file_size": 0,
"fps": 0,
"height": 0,
"width": 0,
"mime_type": "string",
"original_filename": "string",
"path": "string",
"payload": "string",
"source_url": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string"
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKVideos successfully fetched. | PaginatedVideoCollection |
create video
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/videos.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/videos.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/videos.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /videos.json
Creates a Video from a provided source_url.
Body parameter
{
"source_url": "string",
"profiles": "string",
"payload": "string",
"pipeline": "string",
"subtitle_files": [
"string"
],
"extra_files": {
"property1": [
"string"
],
"property2": [
"string"
]
},
"extra_variables": {
"property1": "string",
"property2": "string"
},
"path_format": "string",
"clip_end": "00:00:06:00@25",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"starting_timecode": "string",
"store_id": "string"
}
Parameters
factory_id string In query required Id of a Factory. |
body object In body required none |
» source_url string In body optional An URL pointing to a source file. |
» profiles string In body optional Comma-separated list of profile names or IDs to be used during encoding. Alternatively, specify none so no encodings are created yet. |
» payload string In body optional Arbitrary string stored along the Video object. |
» pipeline string In body optional String-encoded JSON describing profiles pipeline. |
» subtitle_files [string] In body optional A list of urls pointing to remote subtitle files. |
» extra_files object In body optional none |
»» additionalProperties [string] In body optional none |
» extra_variables object In body optional none |
»» additionalProperties string In body optional none |
» path_format string In body optional none |
» clip_end string In body optional Clip ends at a specific time (timecode). |
» clip_length string In body optional A clip’s duration. |
» clip_offset string In body optional Clip starts at a specific offset. |
» starting_timecode string In body optional none |
» store_id string In body optional An individual store_id for this video processing. If provided will replace store_id from cloud factory but must match underlying cloud provider and region. |
Example responses
201 Response
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 0,
"created_at": "string",
"duration": 0,
"encodings_count": 0,
"error_class": "string",
"error_message": "string",
"extname": "string",
"file_size": 0,
"fps": 0,
"height": 0,
"width": 0,
"mime_type": "string",
"original_filename": "string",
"path": "string",
"payload": "string",
"source_url": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string"
}
Responses
Status | Description | Schema |
---|---|---|
201 | CreatedVideo successfully created. | Video |
403 | ForbiddenUser not allowed to create videos. | Error |
500 | Internal Server ErrorFailed to create a video. | None |
Payload
Payload is an arbitrary text of length 256 or shorter that you can store along the Video. It is typically used to retain an association with one of your own DB record ID.
queued videos
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/videos/queued.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/videos/queued.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/queued.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/videos/queued.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /videos/queued.json
Returns a collection of Video objects queued for encoding.
Parameters
factory_id string In query required Id of a Factory. |
page string In query optional A page to be fetched. Default is 1 . |
per_page string In query optional A number of results per page. Default is 100 . |
Example responses
200 Response
{
"videos": [
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 0,
"created_at": "string",
"duration": 0,
"encodings_count": 0,
"error_class": "string",
"error_message": "string",
"extname": "string",
"file_size": 0,
"fps": 0,
"height": 0,
"width": 0,
"mime_type": "string",
"original_filename": "string",
"path": "string",
"payload": "string",
"source_url": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string"
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKReturns a collection of Video objects queued for encoding. | PaginatedVideoCollection |
resubmit video
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/videos/resubmit.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/videos/resubmit.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/resubmit.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/videos/resubmit.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /videos/resubmit.json
Resubmits a video to encode.
Resubmits the video to encode. Please note that this option will work only for videos in success
status.
Body parameter
{
"video_id": "string"
}
Parameters
factory_id string In query required Id of a Factory. |
body object In body required none |
» video_id string In body optional Id of the video. |
Example responses
400 Response
{
"error": "string",
"message": "string"
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKVideo successfully resubmitted. | None |
400 | Bad RequestInvalid input. | Error |
404 | Not FoundVideo or Factory not found | Error |
video
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/videos/{id}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/videos/{id}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/{id}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/videos/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /videos/{id}.json
Returns a Video object.
Parameters
id string In path required Id of a Video. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 0,
"created_at": "string",
"duration": 0,
"encodings_count": 0,
"error_class": "string",
"error_message": "string",
"extname": "string",
"file_size": 0,
"fps": 0,
"height": 0,
"width": 0,
"mime_type": "string",
"original_filename": "string",
"path": "string",
"payload": "string",
"source_url": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string"
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched the Video | Video |
403 | ForbiddenUnauthorized to access the Video | Error |
404 | Not FoundVideo or Factory not found | Error |
delete video
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.delete 'https://api.cloud.telestream.net/flip/3.1/videos/{id}.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.delete('https://api.cloud.telestream.net/flip/3.1/videos/{id}.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/{id}.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("DELETE", "https://api.cloud.telestream.net/flip/3.1/videos/{id}.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
DELETE /videos/{id}.json
Deletes a Video object.
Parameters
id string In path required Id of a Video. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"deleted": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKThe Video object has been successfully deleted. | DeletedResponse |
403 | ForbiddenUnauthorized to delete the Video. | Error |
404 | Not FoundVideo or Factory not found. | Error |
signed video url
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/videos/{id}/signed-url.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/videos/{id}/signed-url.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/{id}/signed-url.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/videos/{id}/signed-url.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /videos/{id}/signed-url.json
Returns a signed url pointing to a Video.
Parameters
id string In path required Id of a Video. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"signed_url": "string"
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a signed video url. | SignedVideoUrl |
404 | Not FoundVideo of Factory not found. | Error |
video metadata
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/videos/{id}/metadata.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/videos/{id}/metadata.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/{id}/metadata.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/videos/{id}/metadata.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /videos/{id}/metadata.json
Returns a Video’s metadata
Parameters
id string In path required Id of a Video. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"type": "object",
"additionalProperties": null
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched the Video’s metadata | VideoMetadata |
404 | Not FoundVideo or Factory not found | Error |
cancel video
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/videos/{id}/cancel.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/videos/{id}/cancel.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/{id}/cancel.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/videos/{id}/cancel.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /videos/{id}/cancel.json
Cancel video and all encodings
Parameters
id string In path required Id of a Video. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"canceled": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully cancel video | CanceledResponse |
404 | Not FoundVideo or Factory not found | Error |
video encodings
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/videos/{id}/encodings.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/videos/{id}/encodings.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/{id}/encodings.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/videos/{id}/encodings.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /videos/{id}/encodings.json
Returns a list of Encodings that belong to a Video.
Parameters
id string In path required Id of a Video. |
factory_id string In query required Id of a Factory. |
page string In query optional A page to be fetched. Default is 1 . |
per_page string In query optional A number of results per page. Default is 100 . |
screenshots string In query optional Determines whether the response will include screenshots. By default this is not set. |
precise_status string In query optional Determines whether the response will include a precise status. By default this is not set. |
Example responses
200 Response
{
"encodings": [
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a collection of Encodings. | PaginatedEncodingsCollection |
404 | Not FoundVideo or Factory not found | Error |
upload video
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/videos/upload.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/videos/upload.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/upload.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/videos/upload.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /videos/upload.json
Creates an upload session.
Body parameter
{
"file_size": 0,
"file_name": "string",
"extra_files": [
{
"tag": "string",
"file_size": 0,
"file_name": "string"
}
],
"profiles": "string",
"path_format": "string",
"payload": "string",
"extra_variables": {
"property1": "string",
"property2": "string"
},
"watermark_url": "string",
"watermark_left": "100px",
"watermark_top": "100%",
"watermark_right": "string",
"watermark_bottom": "string",
"watermark_width": "string",
"watermark_height": "string",
"clip_length": "string",
"clip_offset": "00:00:10",
"multi_chunk": true,
"store_id": "string"
}
Parameters
factory_id string In query required Id of a Factory. |
body object In body required none |
» file_size integer(int64) In body required Size of the file that will be uploaded in bytes . |
» file_name string In body required Name of the file that will be uploaded. |
optional A list of names of additional files that will be uploaded. |
»» tag string In body required none |
»» file_size integer(int64) In body required none |
»» file_name string In body required none |
» profiles string In body optional A comma-separated list of profile names or IDs to be used during encoding. Alternatively, specify none so no encodings will created right away. |
» path_format string In body optional none |
» payload string In body optional Payload is an arbitrary text of length 256 or shorter that you can store along the Video. It is typically used to retain an association with one of your own DB record ID. |
» extra_variables object In body optional none |
»» additionalProperties string In body optional none |
» watermark_url string In body optional URL pointing to an image that will be used asa watermark. |
» watermark_left string In body optional Determines distance between the left edge of a video and the left edge of a watermark image. Can be specified in pixels or percents. This parameter can be set only if watermark_right is not. |
» watermark_top string In body optional Determines distance between the top edge of a video and the top edge of a watermark image. Can be specified in pixels or percents. This parameter can be set only if watermark_bottom is not. |
» watermark_right string In body optional Determines distance between the right edge of a video and the right edge of a watermark image. Can be specified in pixels or percents. This parameter can be set only if watermark_left is not. |
» watermark_bottom string In body optional Determines distance between the bottom edge of a video and the bottom edge of a watermark image. Can be specified in pixels or percents. This parameter can be set only if watermark_top is not. |
» watermark_width string In body optional Determines width of the watermark image. Should be specified in pixels. |
» watermark_height string In body optional Determines width of the watermark image. Should be specified in pixels. |
» clip_length string In body optional Length of the uploaded video. Should be formatted as follows: HH:MM:SS |
» clip_offset string In body optional Clip starts at a specific offset. |
» multi_chunk boolean In body optional none |
» store_id string In body optional An individual store_id for this video processing. If provided will replace store_id from cloud factory but must match underlying cloud provider and region. |
Example responses
201 Response
{
"type": "object",
"required": [
"id",
"location"
],
"properties": {
"id": {
"type": "string",
"description": "An unique identifier of the UploadSession."
},
"location": {
"type": "string",
"description": "An URL to which chunks of the uploaded file should be sent"
},
"parts": {
"type": "integer",
"description": "A number of chunks that are expected by the upstream."
},
"part_size": {
"type": "integer",
"description": "An expected size of uploaded chunks."
},
"max_connections": {
"type": "integer",
"description": "A maximum number of concurrent connections."
},
"extra_files": {
"type": "object",
"additionalProperties": null,
"description": "An object containing additional files uploaded using the session."
}
}
}
Responses
Status | Description | Schema |
---|---|---|
201 | CreatedUpload session successfully created. | UploadSession |
403 | ForbiddenUser not allowed to create an upload session. | Error |
500 | Internal Server ErrorFailed to create an upload session. | None |
delete video source
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.delete 'https://api.cloud.telestream.net/flip/3.1/videos/{id}/source.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.delete('https://api.cloud.telestream.net/flip/3.1/videos/{id}/source.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/videos/{id}/source.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("DELETE");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("DELETE", "https://api.cloud.telestream.net/flip/3.1/videos/{id}/source.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
DELETE /videos/{id}/source.json
Delete a video’s source file.
Parameters
id string In path required Id of a Video. |
factory_id string In query required Id of a Factory. |
Example responses
200 Response
{
"deleted": true
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully deleted the Video’s source file. | DeletedResponse |
403 | ForbiddenNot authorized to delete the Video’s source file. | Error |
404 | Not FoundVideo or Factory not found. | Error |
workflows
workflows
Code samples
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.get 'https://api.cloud.telestream.net/flip/3.1/workflows.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'X-Api-Key': 'API_KEY'
}
r = requests.get('https://api.cloud.telestream.net/flip/3.1/workflows.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/workflows.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.cloud.telestream.net/flip/3.1/workflows.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /workflows.json
Returns a collection of Workflows that belong to a Factory.
Parameters
factory_id string In query required Id of a Factory. |
page string In query optional A page to be fetched. Default is 1 . |
per_page string In query optional A number of results per page. Default is 100 . |
Example responses
200 Response
{
"workflows": [
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully fetched a collection of Workflows that belong to the Factory | PaginatedWorkflowsCollection |
404 | Not FoundFactory not found. | Error |
workorders
create workorder
Code samples
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'multipart/form-data',
'X-Api-Key' => 'API_KEY'
}
result = RestClient.post 'https://api.cloud.telestream.net/flip/3.1/workorders.json',
params: {
'factory_id' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'multipart/form-data',
'X-Api-Key': 'API_KEY'
}
r = requests.post('https://api.cloud.telestream.net/flip/3.1/workorders.json', params={
'factory_id': 'string'
}, headers = headers)
print r.json()
URL obj = new URL("https://api.cloud.telestream.net/flip/3.1/workorders.json?factory_id=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"multipart/form-data"},
"X-Api-Key": []string{"API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.cloud.telestream.net/flip/3.1/workorders.json", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /workorders.json
Creates a Workorder.
Body parameter
profile_id: string
file: string
source_url: string
Parameters
factory_id string In query required Id of a Factory. |
body object In body optional none |
» profile_id string In body optional Id of a Profile. |
» file string(binary) In body optional Input file. |
» source_url string In body optional URL pointing to an input file. |
Responses
Status | Description | Schema |
---|---|---|
200 | OKSuccessfully created a Workorder. | None |
400 | Bad RequestFailed to create a Workorder. | None |
Schemas
Factory
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier of a Factory."
},
"name": {
"type": "string",
"description": "Human-readable identifier of a Factory."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"created_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been created."
},
"updated_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been updated last time."
},
"url": {
"type": "string",
"description": "An URL pointing to the output_bucket_name."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"input_bucket_files_map": {
"type": "object"
},
"input_bucket_sync_every_n_min": {
"type": "string",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_recursive": {
"type": "string"
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"outputs_path_format": {
"type": "string"
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
}
}
}
Properties
id string optional A unique identifier of a Factory. |
name string optional Human-readable identifier of a Factory. |
factory_region string optional A region where the factory is located. |
output_bucket_name string optional A bucket where processed files will be stored. |
acl string optional Specify if your files are public or private (private files need authorization url to access). By default this is not set. |
created_at string(datetime) optional A date and time when a Factory has been created. |
updated_at string(datetime) optional A date and time when a Factory has been updated last time. |
url string optional An URL pointing to the output_bucket_name. |
server_side_encryption boolean optional Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set. |
input_bucket_name string optional A name of an input bucket. |
input_bucket_watch boolean optional Determines whether the Factory should be notified about new files added to the input bucket. |
input_bucket_files_map object optional none |
input_bucket_sync_every_n_min string optional Determines how often the input bucket is synchronised. |
input_bucket_recursive string optional none |
input_bucket_file_pattern string optional A pattern that will be used to locate files in the input bucket. Valid wildcards might be used. |
outputs_path_format string optional none |
storage_provider integer optional Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9 |
provider_specific_settings object optional none |
Enumerated Values
acl public |
acl private |
PaginatedFactoryCollection
{
"type": "object",
"properties": {
"factories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "A unique identifier of a Factory."
},
"name": {
"type": "string",
"description": "Human-readable identifier of a Factory."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"created_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been created."
},
"updated_at": {
"type": "string",
"format": "datetime",
"description": "A date and time when a Factory has been updated last time."
},
"url": {
"type": "string",
"description": "An URL pointing to the output_bucket_name."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"input_bucket_files_map": {
"type": "object"
},
"input_bucket_sync_every_n_min": {
"type": "string",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_recursive": {
"type": "string"
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"outputs_path_format": {
"type": "string"
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
}
}
}
},
"page": {
"type": "integer",
"description": "A number of the fetched page."
},
"per_page": {
"type": "integer",
"description": "A number of factories per page."
},
"total": {
"type": "integer",
"description": "A number of all factories stored in the db."
}
}
}
Properties
factories [Factory] optional none |
page integer optional A number of the fetched page. |
per_page integer optional A number of factories per page. |
total integer optional A number of all factories stored in the db. |
FactorySync
{
"syncing": false
}
Properties
syncing string optional Determines whether a Factory will be synchronised with an input bucket. |
Enumerated Values
syncing false |
syncing starting |
syncing already_started |
Profile
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
Properties
advanced_fps_conversion string optional todo |
aspect_mode string optional Specifies an aspect mode for output videos. The following options are available: - preserve - constrain - letterbox - pad - fill (crop) - stretch - center Default is “letterbox”. |
aspect_ratio string optional A display aspect ratio. By default it is not set. |
audio_bitrate integer optional audio bitrate (in bits/s) |
audio_channels integer optional A number of audio channels. By default it is not set. |
audio_channels_layout string optional A channel layout specifies the spatial disposition of the channels in a multi-channel audio stream. |
audio_channels_per_track integer optional A number of audio channels per track. |
audio_codec string optional Audio codec that will be used by the profile. Available codecs are: libmp3lame , libvorbis , libfdk_aac , dib_ac3, pcm_s16le, mp2, ac3, eac3`. |
audio_format string optional Specifies an audio container. |
audio_map string optional none |
audio_pid string optional Packet identifier used by MPEG formats. |
audio_profile string optional Specifies an audio profile. |
audio_sample_rate integer optional The number of samples of audio carried per second. |
audio_stream_id integer optional none |
audio_streams integer optional A number of audio streams. |
avcintra_class string optional A class of the AVC-Intra video coding. |
buffer_size integer optional Determines the size of the PulseAudio buffer. by default it is not set. |
buffer_size_in_packets string optional todo |
bumpers object optional none |
byte_range_requests boolean optional none |
clip_end string optional Clip ends at a specific time (timecode). |
pixel_format string optional none |
clip_length string optional A clip’s duration. |
clip_offset string optional Clip starts at a specific offset. |
closed_captions string optional One of add (adds captions as a separate streams) or burn (burns captions on video stream using the first subtitle file). By default it is not set. |
color_metadata boolean optional none |
created_at string(datetime) optional A date and time when the Profile has been created. |
crop_input_bottom string optional Distance (in pixels) from the bottom edge of the screen from which you want your crop to be done. |
crop_input_height string optional Width of the cropped image in pixels. |
crop_input_left string optional Distance (in pixels) from the left edge of the screen from which you want your crop to be done. |
crop_input_right string optional Distance (in pixels) from the right edge of the screen from which you want your crop to be done. |
crop_input_top string optional Distance (in pixels) from the top edge of the screen from which you want your crop to be done. |
crop_input_width number optional Height of the cropped image in pixels. |
dash_profile string optional none |
deinterlace string optional One of keep_fps or double_fps . By default it is not set. |
deinterlace_frames string optional none |
description string optional Description of the profile. |
dnxhd_type string optional none |
encryption boolean optional none |
extname string optional File extension. |
fps number optional Null value copy the original fps. By default it is not set. |
frame_count integer optional Evenly spaced number of generated screenshots. By default it is not set. |
frame_interval string optional Thumbnail interval (Frames or seconds). |
frame_offsets string optional Array of offsets (Frames or seconds). |
h264_level string optional A specified set of constraints that indicate a degree of required decoder performance for a profile. |
h264_profile string optional Profiles represent a sub-set of the encoding techniques available in H.264. |
h264_tune string optional Specifies a h264 tuning option. |
height integer optional Height in pixels. |
id string optional none |
imx_type string optional none |
inputs object optional none |
interlace string optional none |
keyframe_interval integer optional Adds a key frame every N frames. Default is 250, adds a key frame every 250 frames. |
keyframe_rate string optional todo |
lang string optional none |
max_rate integer optional A max bitrate tolerance (in bits/s). By default this is not set. |
merge_audio_streams string optional none |
mute_audio_tracks boolean optional Remove audio from input video file. By default it is set to false . |
name string optional A unique machine-readable name that will identify the profile. Helpful later on for filtering encodings by profile. |
outputs object optional none |
outputs_path_format string optional Specify the directory where the output files should be stored. By default it is not set. More information about this here. |
playlist_type string optional none |
pmt_pid string optional none |
preset_name string optional a name of a preset that a profile will use. |
prores_format string optional none |
segment_time integer optional Minimum value is 2, maximum is 60. |
stack string optional none |
starting_timecode string optional none |
telestream_block_size string optional none |
telestream_blur_scaler number optional Minimum value is 0, maximum is 4. |
telestream_cost_scaler number optional Minimum value is 0, maximum is 4. |
telestream_search_length_scaler integer optional Minimum value is 0, maximum is 2. |
telestream_subpel_mode boolean optional none |
time_code string optional If set, timestamps will be added to your videos. By default this is not set. |
title string optional Human-readable name. |
trailers object optional none |
transport_rate string optional none |
ts_pids string optional none |
updated_at string(datetime) optional none |
upscale boolean optional Upscale the video resolution to match your profile. Default is true . |
use_editlist boolean optional none |
variants string optional Pattern utilised to match HLS.Variant presets by name. Default is hls.*. |
video_bitrate integer optional none |
video_pid string optional none |
watermark_bottom string optional Distance from the bottom of the video frame in pixels or percentage of video frame height. Works like CSS. Default is 0 . |
watermark_bumpers boolean optional none |
watermark_height string optional Height of the watermark image in pixels or percentage of video frame height. Default is no resizing |
watermark_left string optional Distance from the left of the video frame in pixels or percentage of video frame width. Works like CSS. Default is 0 . |
watermark_right string optional Distance from the right of the video frame in pixels or percentage of video frame width. Works like CSS. Default is 0 . |
watermark_top string optional Distance from the top of the video frame in pixels or percentage of video frame height. Works like CSS. Default is 0 . |
watermark_trailers boolean optional none |
watermark_url string optional Url of a watermark image. |
watermark_width string optional Width of the watermark image in pixels or percentage of video frame width. Default is no resizing . |
width integer optional Width in pixels. |
x264_options string optional none |
x265_options string optional none |
xdcam_format string optional none |
tachyon_allow_remove_pulldown boolean optional Enable more sensitive pulldown removal algorithm. |
tachyon_enable_post_pulldown_filter boolean optional If the images you are converting are composited 29.976, but the pulldown pattern was not adhered to when performing the composite, this setting is required to remove combing artifacts. It will also remove combing artifacts related to very poor 3:2 cadence. |
tachyon_media_hint_is_cartoon boolean optional none |
tachyon_media_hint_has_chroma_noise boolean optional Remove chroma noise during the analysis of a video. |
tachyon_more_sensitive_remove_pulldown boolean optional When pulldown is not achieved due to extremely broken cadence, or other factors like highly mixed content or if chroma noise masks motion, the pulldown engine may fall back to de-interlacing rather than removing telecine. If that’s a case, a more sensitive pulldown pattern can be used. This algorithm favors inverse telecine and with lower thresholds for triggering pulldown identification, will maximize the number of progressive frames created from the video. |
tachyon_allow_add_standard_pd boolean optional none |
tachyon_allow_add_2_2pd boolean optional Allows 2:2 (PSF) Insertion. Creates a new series of frames which are based on duplicating the field an interlacing it into top/bottom field. Maintains a film-look. |
tachyon_allow_add_4_4pd boolean optional Allows 4:4 Insertion. Repeats each progressive frame twice on output (motion rate is halved). This setting is used when you want to convert to high progressive frame rates (i.e. 50p/59.94p/60p) but want to preserve film qualities (low motion rate, such as 24p). |
tachyon_allow_add_4_6pd boolean optional 2:3 Insertion. inserts a standard 2:3 telecine pattern to 23.976p video stream to achieve a 29.97i frame rate |
tachyon_allow_add_euro_pd boolean optional Allows Euro Insertion. For field based interpolation rather than pixel-based. This is designed for interlaced or progressive integer frame rate conversions that are being converted to interlaced outputs. This method is valid for 24p to 50i conversions only. |
tachyon_allow_add_adaptive_pd boolean optional Allows Adaptive Insertion. For field-based interpolation rather than using pixel-based interpolation. This algorithm is designed for both integer and non-integer frame rate conversion targets - as long as one of them is a non-integer rate (23.976, 29.97, 59.94, etc). This creates NTSC-PAL conversions clean of motion artifacts at the expense of potential slight stutter. Stutter is most noticeable with material that has smooth and uniform motion. |
tachyon_motion_amount string optional This setting determines how much Tachyon will trust motion vectors in the creation of new images |
tachyon_fallback_size string optional This option specifies the transition region size between fallback areas and motion compensated areas. A larger fallback size allows more blending (feathering) to occur between the regions. |
tachyon_mblock_size string optional This option specifies the size of a motion block. |
tachyon_cut_detection_sensitivity number optional none |
eac3_evolution_enable boolean optional Enables the trusted metadata framework. |
eac3_bitstream_mode string optional Selects the type of audio service. **For 1/0 Voiceover will be used when Voiceover/Karaoke is selected. For 2/0 and above Karaoke will be used. |
eac3_ninety_degree_phase_shift boolean optional Applies a 90-degree phase shift to the surround channels; necessary if the output file is being decoded by a Dolby Surround Pro Logic or Pro Logic II decoder. |
eac3_three_decibel_attenuation boolean optional Attenuates the surround channels by 3 dB before encoding. |
eac3_enable_lfe_low_pass_filter boolean optional Applies a 120 Hz eighth order lowpass filter to the LFE input prior to encoding. |
eac3_analog_to_digital_converter_type string optional Allows audio that has passed through an A/D conversion stage to be marked as such. |
eac3_stereo_downmix_preference string optional none |
eac3_lt_rt_center_mix_level string optional Indicates the level shift applied to the center channel when adding to the left and right outputs during a downmix to a Lt/Rt output. |
eac3_lt_rt_surround_mix_level string optional Indicates the level shift applied to the surround channel when adding to the left and right outputs during a downmix to a Lt/Rt output. |
eac3_lo_ro_center_mix_level string optional Indicates the level shift applied to the center channel when adding to the left and right outputs during a downmix to a Lo/Ro output. |
eac3_lo_ro_surround_mix_level string optional Indicates the level shift applied to the surround channel when adding to the left and right outputs during a downmix to a Lo/Ro output. |
eac3_surround_ex_mode string optional Indicates whether the audio stream was encoded using Dolby EX. |
eac3_drc_line_mode_profile string optional Dynamic Range Control for Line Mode. |
eac3_drc_rf_mode_profile string optional Dynamic Range Control for RF Mode. |
eac3_dialog_normalization integer optional Represents the volume level of dialog in the audio stream which can be used by a Dolby Digital decoder. This aids the decoder in matching volume between program sources. Minimum value is 1, maximum is 31. |
eac3_room_type string optional none |
eac3_mixing_level integer optional Minimum value is 80, maximum is 111. |
eac3_copyright_protected boolean optional Indicates whether the encoded bitstream is copyright protected. |
eac3_original_bitstream boolean optional Indicates whether the encoded bitstream is the master version, or a copy. |
Enumerated Values
advanced_fps_conversion telestream |
advanced_fps_conversion tachyon |
audio_channels_layout 1 |
audio_channels_layout 2 |
audio_channels_layout 2.1 |
audio_channels_layout 3 |
audio_channels_layout 3.0(back) |
audio_channels_layout 3.1 |
audio_channels_layout 4 |
audio_channels_layout 4.1 |
audio_channels_layout quad |
audio_channels_layout 5 |
audio_channels_layout 5.0(side) |
audio_channels_layout 5.1(side) |
audio_channels_layout 6 |
audio_channels_layout 6.1 |
audio_channels_layout 7 |
audio_channels_layout 7.1 |
audio_channels_layout mono |
audio_channels_layout stereo |
audio_format pcm_s24le |
audio_format pcm_s16le |
avcintra_class 50 |
avcintra_class 100 |
closed_captions add |
closed_captions burn |
dnxhd_type 36 |
dnxhd_type 45 |
dnxhd_type 60 |
dnxhd_type 75 |
dnxhd_type 90 |
dnxhd_type 90x |
dnxhd_type 110 |
dnxhd_type 115 |
dnxhd_type 120 |
dnxhd_type 145 |
dnxhd_type 175x |
dnxhd_type 175 |
dnxhd_type 185x |
dnxhd_type 185 |
dnxhd_type 220x |
dnxhd_type 220 |
h264_level 1 |
h264_level 1b |
h264_level 1.1 |
h264_level 1.2 |
h264_level 1.3 |
h264_level 2 |
h264_level 2.1 |
h264_level 2.2 |
h264_level 3 |
h264_level 3.1 |
h264_level 3.2 |
h264_level 4 |
h264_level 4.1 |
h264_level 4.2 |
h264_level 5 |
h264_level 5.1 |
h264_profile baseline |
h264_profile main |
h264_profile high |
h264_profile high10 |
h264_profile high422 |
h264_profile high444 |
h264_tune film |
h264_tune animation |
h264_tune grain |
h264_tune psnr |
h264_tune ssim |
h264_tune fastdecode |
h264_tune zerolatency |
playlist_type iframe |
playlist_type iframe-only |
telestream_block_size 16x16 |
telestream_block_size 24x24 |
telestream_block_size 32x32 |
tachyon_motion_amount xlow |
tachyon_motion_amount low |
tachyon_motion_amount medium |
tachyon_motion_amount high |
tachyon_motion_amount xhigh |
tachyon_motion_amount auto |
tachyon_fallback_size small |
tachyon_fallback_size medium |
tachyon_fallback_size large |
tachyon_fallback_size xlarge |
tachyon_fallback_size auto |
tachyon_mblock_size mb16 |
tachyon_mblock_size mb32 |
tachyon_mblock_size mb64 |
tachyon_mblock_size mb128 |
tachyon_mblock_size mb256 |
tachyon_mblock_size auto |
eac3_bitstream_mode m0 |
eac3_bitstream_mode m1 |
eac3_bitstream_mode m2 |
eac3_bitstream_mode m3 |
eac3_bitstream_mode m4 |
eac3_bitstream_mode m5 |
eac3_bitstream_mode m6 |
eac3_bitstream_mode m7 |
eac3_analog_to_digital_converter_type standard |
eac3_analog_to_digital_converter_type hdcd |
eac3_stereo_downmix_preference m0 |
eac3_stereo_downmix_preference m1 |
eac3_stereo_downmix_preference m2 |
eac3_stereo_downmix_preference m3 |
eac3_lt_rt_center_mix_level c0 |
eac3_lt_rt_center_mix_level c1 |
eac3_lt_rt_center_mix_level c2 |
eac3_lt_rt_center_mix_level c3 |
eac3_lt_rt_center_mix_level c4 |
eac3_lt_rt_center_mix_level c5 |
eac3_lt_rt_center_mix_level c6 |
eac3_lt_rt_center_mix_level c7 |
eac3_lt_rt_surround_mix_level c3 |
eac3_lt_rt_surround_mix_level c4 |
eac3_lt_rt_surround_mix_level c5 |
eac3_lt_rt_surround_mix_level c6 |
eac3_lt_rt_surround_mix_level c7 |
eac3_lo_ro_center_mix_level c0 |
eac3_lo_ro_center_mix_level c1 |
eac3_lo_ro_center_mix_level c2 |
eac3_lo_ro_center_mix_level c3 |
eac3_lo_ro_center_mix_level c4 |
eac3_lo_ro_center_mix_level c5 |
eac3_lo_ro_center_mix_level c6 |
eac3_lo_ro_center_mix_level c7 |
eac3_lo_ro_surround_mix_level c3 |
eac3_lo_ro_surround_mix_level c4 |
eac3_lo_ro_surround_mix_level c5 |
eac3_lo_ro_surround_mix_level c6 |
eac3_lo_ro_surround_mix_level c7 |
eac3_surround_ex_mode m0 |
eac3_surround_ex_mode m1 |
eac3_surround_ex_mode m2 |
eac3_drc_line_mode_profile p0 |
eac3_drc_line_mode_profile p1 |
eac3_drc_line_mode_profile p2 |
eac3_drc_line_mode_profile p3 |
eac3_drc_line_mode_profile p4 |
eac3_drc_line_mode_profile p5 |
eac3_drc_rf_mode_profile p0 |
eac3_drc_rf_mode_profile p1 |
eac3_drc_rf_mode_profile p2 |
eac3_drc_rf_mode_profile p3 |
eac3_drc_rf_mode_profile p4 |
eac3_drc_rf_mode_profile p5 |
eac3_room_type m0 |
eac3_room_type m1 |
eac3_room_type m2 |
Encoding
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
Properties
id string optional A unique identifier of an Encoding. |
audio_bitrate integer optional Audio bitrate (in bits/s). |
audio_channels integer optional A number of audio channels. |
audio_codec string optional A codec that is used to encode audio streams. |
audio_sample_rate integer optional A number of samples of audio carried per second. |
created_at string(datetime) optional A date and time when the Encoding has been created. |
duration integer optional none |
encoding_progress integer optional none |
encoding_time integer optional none |
error_class string optional A class of an error that has occurred during the encoding process. It is present only if the encoding status is equal to fail . |
error_message string optional A message that explains why the encoding process has resulted in an error. It is present only if the encoding status is equal to fail . |
external_id string optional none |
extname string optional Extension of the output file. |
file_size integer(int64) optional A size of the output file. |
files [string] optional An array of output file names. |
fps number optional Number of frames per second. |
height integer optional Height of the output video. |
width integer optional Width of the output video. |
logfile_url string optional An URL pointing to a logfile. |
mime_type string optional A mime type of the encoded file. |
parent_encoding_id string optional none |
path string optional none |
profile_id string optional An id of a related Profile. |
profile_name string optional A name of the used Profile. |
screenshots [string] optional none |
started_encoding_at string(datetime) optional A date and time when the encoding process has been started |
status string optional Determines at what stage the encoding process is at the moment. |
updated_at string(datetime) optional A date and time when a Encoding has been updated last time. |
video_bitrate integer optional video bitrate (in bits/s) |
video_codec string optional A codec that is used to encode video streams. |
video_id string optional An id of a related Video object |
Video
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 0,
"created_at": "string",
"duration": 0,
"encodings_count": 0,
"error_class": "string",
"error_message": "string",
"extname": "string",
"file_size": 0,
"fps": 0,
"height": 0,
"width": 0,
"mime_type": "string",
"original_filename": "string",
"path": "string",
"payload": "string",
"source_url": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string"
}
Properties
id string optional A unique identifier of the Video. |
audio_bitrate integer optional audio bitrate (in bits/s) |
audio_channels integer optional A number of audio channels. |
audio_codec string optional A codec that has been used to encode audio streams. |
audio_sample_rate integer optional A number of samples of audio carried per second. |
created_at string(datetime) optional A date and time when the Video has been created. |
duration integer optional A duration of the video in seconds. |
encodings_count integer optional A number of related Encoding objects. |
error_class string optional A class of an error that has occurred during the encoding process. It is present only if the encoding status is equal to fail . |
error_message string optional A message that explains why the encoding process has resulted in an error. It is present only if the encoding status is equal to fail . |
extname string optional Extension of the source file. |
file_size integer(int64) optional A size of the source file. |
fps number optional Number of frames per second. |
height integer optional Height of the output video. |
width integer optional Width of the output video. |
mime_type string optional A mime type of the source file. |
original_filename string optional A name of the source file. |
path string optional none |
payload string optional Payload is an arbitrary text of length 256 or shorter that you can store along the Video. It is typically used to retain an association with one of your own DB record ID. |
source_url string optional An URL pointing to the source file. |
status string optional Determines at what stage of importing process the Video is at the moment. |
updated_at string(datetime) optional A date and time when a Video has been updated last time. |
video_bitrate integer optional video bitrate (in bits/s) |
video_codec string optional A codec that has been used to encode the input file’s video streams. |
PaginatedVideoCollection
{
"videos": [
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 0,
"created_at": "string",
"duration": 0,
"encodings_count": 0,
"error_class": "string",
"error_message": "string",
"extname": "string",
"file_size": 0,
"fps": 0,
"height": 0,
"width": 0,
"mime_type": "string",
"original_filename": "string",
"path": "string",
"payload": "string",
"source_url": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string"
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Properties
videos [Video] optional none |
page integer optional A number of the fetched page. |
per_page integer optional A number of videos per page. |
total integer optional A number of all videos stored in the db. |
SignedVideoUrl
{
"signed_url": "string"
}
Properties
signed_url string optional An URL pointing to the Video file. It contains a valid authentication token. |
PaginatedEncodingsCollection
{
"encodings": [
{
"id": "string",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_codec": "string",
"audio_sample_rate": 44100,
"created_at": "string",
"duration": 0,
"encoding_progress": 0,
"encoding_time": 0,
"error_class": "string",
"error_message": "string",
"external_id": "string",
"extname": "string",
"file_size": 0,
"files": [
"string"
],
"fps": 0,
"height": 0,
"width": 0,
"logfile_url": "string",
"mime_type": "string",
"parent_encoding_id": "string",
"path": "string",
"profile_id": "string",
"profile_name": "string",
"screenshots": [
"string"
],
"started_encoding_at": "string",
"status": "string",
"updated_at": "string",
"video_bitrate": 0,
"video_codec": "string",
"video_id": "string"
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Properties
encodings [Encoding] required none |
page integer required A number of the fetched page. |
per_page integer required A number of encodings per page. |
total integer required A number of all encodings stored in the db. |
UploadSession
{
"type": "object",
"required": [
"id",
"location"
],
"properties": {
"id": {
"type": "string",
"description": "An unique identifier of the UploadSession."
},
"location": {
"type": "string",
"description": "An URL to which chunks of the uploaded file should be sent"
},
"parts": {
"type": "integer",
"description": "A number of chunks that are expected by the upstream."
},
"part_size": {
"type": "integer",
"description": "An expected size of uploaded chunks."
},
"max_connections": {
"type": "integer",
"description": "A maximum number of concurrent connections."
},
"extra_files": {
"type": "object",
"additionalProperties": null,
"description": "An object containing additional files uploaded using the session."
}
}
}
Properties
id string required An unique identifier of the UploadSession. |
location string required An URL to which chunks of the uploaded file should be sent |
parts integer optional A number of chunks that are expected by the upstream. |
part_size integer optional An expected size of uploaded chunks. |
max_connections integer optional A maximum number of concurrent connections. |
extra_files object optional An object containing additional files uploaded using the session. |
ExtraFile
{
"tag": "string",
"file_size": 0,
"file_name": "string"
}
Properties
tag string required none |
file_size integer(int64) required none |
file_name string required none |
DeletedResponse
{
"deleted": true
}
Properties
deleted boolean optional Informs whether an object has been deleted successfully. |
CountResponse
{
"total": 0
}
Properties
total integer optional Informs how many objects are stored in the database. |
RetriedResponse
{
"retried": true
}
Properties
retried boolean optional Informs whether an action has been retried successfully. |
CanceledResponse
{
"canceled": true
}
Properties
canceled boolean optional Informs whether an action has been canceled successfully. |
EncodingSignedUrls
{
"signed_urls": [
"string"
]
}
Properties
signed_urls [string] optional A list of signed URLs pointing to the encoding’s outputs. |
EncodingSignedUrl
{
"signed_url": "string"
}
Properties
signed_url string optional A signed URLs pointing to the encoding’s output. |
Error
{
"error": "string",
"message": "string"
}
Properties
error string optional Error type |
message string optional Explanation why the error has been raised. |
PaginatedProfilesCollection
{
"profiles": [
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Properties
profiles [Profile] optional none |
page integer optional A number of the fetched page. |
per_page integer optional A number of profiles per page. |
total integer optional A number of all profiles stored in the db. |
ProfileBody
{
"preset_name": "aac",
"advanced_fps_conversion": "telestream",
"aspect_mode": "preserve",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": "string",
"audio_codec": "string",
"audio_format": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"closed_captions": "add",
"dash_profile": "string",
"deinterlace": "keep_fps",
"deinterlace_frames": "string",
"dnxhd_type": "string",
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_offsets": "2s, 10s, 250f, 400f",
"frame_interval": "1000f",
"frame_count": 0,
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"imx_type": "string",
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": 0,
"max_rate": 0,
"merge_audio_streams": "string",
"name": "string",
"outputs_path_format": "string",
"pmt_pid": "string",
"prores_format": "string",
"segment_time": "string",
"size": "string",
"starting_timecode": "string",
"tar": true,
"transport_rate": "string",
"ts_pids": "string",
"upscale": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"mute_audio_tracks": true,
"byte_range_requests": "string",
"lang": "string",
"use_editlist": "string",
"audio_map": "string",
"audio_stream_id": "string",
"bumpers": {},
"codec_preset": "ultrafast",
"color_metadata": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": "string",
"dynamic_recipe": "string",
"playlist_type": "string",
"preset_version": "string",
"segment_delimiter": "string",
"sws_flags": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": "string",
"telestream_cost_scaler": "string",
"telestream_search_length_scaler": "string",
"telestream_subpel_mode": "string",
"trailers": {},
"vantage_group_id": "string",
"watermark_bumpers": "string",
"watermark_trailers": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "string",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true,
"title": "string",
"time_code": true
}
Properties
preset_name string required a name of a preset that a profile will use. |
advanced_fps_conversion string optional todo |
aspect_mode string optional Default is “letterbox”. |
aspect_ratio string optional Sets the desired display aspect ratio. By default it is not set. |
audio_bitrate integer optional audio bitrate (in bits/s) |
audio_channels integer optional Sets the number of audio channels. By default it is not set. |
audio_channels_layout string optional A channel layout specifies the spatial disposition of the channels in a multi-channel audio stream. |
audio_channels_per_track string optional Sets the number of audio channels per track. |
audio_codec string optional Audio codec that will be used by the profile. |
audio_format string optional Specifies an audio container. |
audio_pid string optional Packet identifier used by MPEG formats. |
audio_profile string optional Sets an audio profile. |
audio_sample_rate integer optional The number of samples of audio carried per second. |
audio_streams integer optional Sets the number of audio streams. |
avcintra_class string optional class of the AVC-Intra video coding. |
buffer_size integer optional Sets the buffer size, and can be 1-2 seconds for most gaming screencasts, and up to 5 seconds for more static content. You will have to experiment to see what looks best for your content. |
buffer_size_in_packets string optional todo |
clip_length string optional Sets the clip’s duration. |
clip_offset string optional Clip starts at a specific offset. |
clip_end string optional Clip ends at a specific time (timecode). |
pixel_format string optional none |
closed_captions string optional One of add (adds captions as a separate streams) or burn (burns captions on video stream using the first subtitle file). By default it is not set. |
dash_profile string optional none |
deinterlace string optional One of keep_fps or double_fps . By default it is not set. |
deinterlace_frames string optional none |
dnxhd_type string optional none |
encryption boolean optional none |
extname string optional File extension. |
fps number optional Null value copy the original fps. By default it is not set. |
frame_offsets string optional Array of offsets (Frames or seconds). |
frame_interval string optional Thumbnail interval (Frames or seconds). |
frame_count integer optional Evenly spaced number of generated screenshots. By default it is not set. |
h264_level string optional A specified set of constraints that indicate a degree of required decoder performance for a profile. |
h264_profile string optional Profiles represent a sub-set of the encoding techniques available in H.264. |
h264_tune string optional Use this option to change settings based upon the specifics of your input |
height integer optional Height in pixels. |
imx_type string optional none |
interlace string optional none |
keyframe_interval integer optional Adds a key frame every N frames. Default is 250, adds a key frame every 250 frames. |
keyframe_rate number optional todo |
max_rate integer optional Set max bitrate tolerance (in bits/s). By default this is not set |
merge_audio_streams string optional none |
name string optional Unique machine-readable name that will identify the profile. Helpful later on for filtering encodings by profile. |
outputs_path_format string optional Specify the directory where the output files should be stored. By default it is not set. More information about this here. |
pmt_pid string optional none |
prores_format string optional none |
segment_time string optional none |
size string optional none |
starting_timecode string optional none |
tar boolean optional none |
transport_rate string optional none |
ts_pids string optional none |
upscale boolean optional Upscale the video resolution to match your profile. Default is true . |
variants string optional Pattern utilised to match HLS.Variant presets by name. Default is hls.*. |
video_bitrate integer optional none |
video_pid string optional none |
watermark_bottom string optional Distance from the bottom of the video frame in pixels or percentage of video frame height. Works like CSS. Default is 0 . |
watermark_height string optional Height of the watermark image in pixels or percentage of video frame height. Default is no resizing |
watermark_left string optional Distance from the left of the video frame in pixels or percentage of video frame width. Works like CSS. Default is 0 . |
watermark_right string optional Distance from the right of the video frame in pixels or percentage of video frame width. Works like CSS. Default is 0 . |
watermark_top string optional Distance from the top of the video frame in pixels or percentage of video frame height. Works like CSS. Default is 0 . |
watermark_url string optional Url of a watermark image. |
watermark_width string optional Width of the watermark image in pixels or percentage of video frame width. Default is no resizing . |
width integer optional Width in pixels. |
x264_options string optional none |
x265_options string optional none |
xdcam_format string optional none |
mute_audio_tracks boolean optional Remove audio from input video file. By default it is set to false . |
byte_range_requests string optional none |
lang string optional none |
use_editlist string optional none |
audio_map string optional none |
audio_stream_id string optional none |
bumpers object optional none |
codec_preset string optional Determines a preset that is used by encoders. |
color_metadata string optional none |
crop_input_bottom string optional Distance (in pixels) from the bottom edge of the screen from which you want your crop to be done. |
crop_input_height string optional Width of the cropped image in pixels. |
crop_input_left string optional Distance (in pixels) from the left edge of the screen from which you want your crop to be done. |
crop_input_right string optional Distance (in pixels) from the right edge of the screen from which you want your crop to be done. |
crop_input_top string optional Distance (in pixels) from the top edge of the screen from which you want your crop to be done. |
crop_input_width string optional Height of the cropped image in pixels. |
dynamic_recipe string optional none |
playlist_type string optional none |
preset_version string optional none |
segment_delimiter string optional none |
sws_flags string optional none |
telestream_block_size string optional none |
telestream_blur_scaler string optional Minimum value is 0, maximum is 4. |
telestream_cost_scaler string optional Minimum value is 0, maximum is 4. |
telestream_search_length_scaler string optional Minimum value is 0, maximum is 2. |
telestream_subpel_mode string optional none |
trailers object optional none |
vantage_group_id string optional none |
watermark_bumpers string optional none |
watermark_trailers string optional none |
tachyon_allow_remove_pulldown boolean optional Enable more sensitive pulldown removal algorithm. |
tachyon_enable_post_pulldown_filter boolean optional If the images you are converting are composited 29.976, but the pulldown pattern was not adhered to when performing the composite, this setting is required to remove combing artifacts. It will also remove combing artifacts related to very poor 3:2 cadence. |
tachyon_media_hint_is_cartoon boolean optional none |
tachyon_media_hint_has_chroma_noise boolean optional Remove chroma noise during the analysis of a video. |
tachyon_more_sensitive_remove_pulldown boolean optional When pulldown is not achieved due to extremely broken cadence, or other factors like highly mixed content or if chroma noise masks motion, the pulldown engine may fall back to de-interlacing rather than removing telecine. If that’s a case, a more sensitive pulldown pattern can be used. This algorithm favors inverse telecine and with lower thresholds for triggering pulldown identification, will maximize the number of progressive frames created from the video. |
tachyon_allow_add_standard_pd boolean optional none |
tachyon_allow_add_2_2pd boolean optional Allows 2:2 (PSF) Insertion. Creates a new series of frames which are based on duplicating the field an interlacing it into top/bottom field. Maintains a film-look. |
tachyon_allow_add_4_4pd boolean optional Allows 4:4 Insertion. Repeats each progressive frame twice on output (motion rate is halved). This setting is used when you want to convert to high progressive frame rates (i.e. 50p/59.94p/60p) but want to preserve film qualities (low motion rate, such as 24p). |
tachyon_allow_add_4_6pd boolean optional 2:3 Insertion. inserts a standard 2:3 telecine pattern to 23.976p video stream to achieve a 29.97i frame rate |
tachyon_allow_add_euro_pd boolean optional Allows Euro Insertion. For field based interpolation rather than pixel-based. This is designed for interlaced or progressive integer frame rate conversions that are being converted to interlaced outputs. This method is valid for 24p to 50i conversions only. |
tachyon_allow_add_adaptive_pd boolean optional Allows Adaptive Insertion. For field-based interpolation rather than using pixel-based interpolation. This algorithm is designed for both integer and non-integer frame rate conversion targets - as long as one of them is a non-integer rate (23.976, 29.97, 59.94, etc). This creates NTSC-PAL conversions clean of motion artifacts at the expense of potential slight stutter. Stutter is most noticeable with material that has smooth and uniform motion. |
tachyon_motion_amount string optional This setting determines how much Tachyon will trust motion vectors in the creation of new images |
tachyon_fallback_size string optional This option specifies the transition region size between fallback areas and motion compensated areas. A larger fallback size allows more blending (feathering) to occur between the regions. |
tachyon_mblock_size string optional This option specifies the size of a motion block. |
tachyon_cut_detection_sensitivity number optional none |
eac3_evolution_enable boolean optional Enables the trusted metadata framework. |
eac3_bitstream_mode string optional Selects the type of audio service. **For 1/0 Voiceover will be used when Voiceover/Karaoke is selected. For 2/0 and above Karaoke will be used. |
eac3_ninety_degree_phase_shift boolean optional Applies a 90-degree phase shift to the surround channels; necessary if the output file is being decoded by a Dolby Surround Pro Logic or Pro Logic II decoder. |
eac3_three_decibel_attenuation boolean optional Attenuates the surround channels by 3 dB before encoding. |
eac3_enable_lfe_low_pass_filter boolean optional Applies a 120 Hz eighth order lowpass filter to the LFE input prior to encoding. |
eac3_analog_to_digital_converter_type string optional Allows audio that has passed through an A/D conversion stage to be marked as such. |
eac3_stereo_downmix_preference string optional none |
eac3_lt_rt_center_mix_level string optional Indicates the level shift applied to the center channel when adding to the left and right outputs during a downmix to a Lt/Rt output. |
eac3_lt_rt_surround_mix_level string optional Indicates the level shift applied to the surround channel when adding to the left and right outputs during a downmix to a Lt/Rt output. |
eac3_lo_ro_center_mix_level string optional Indicates the level shift applied to the center channel when adding to the left and right outputs during a downmix to a Lo/Ro output. |
eac3_lo_ro_surround_mix_level string optional Indicates the level shift applied to the surround channel when adding to the left and right outputs during a downmix to a Lo/Ro output. |
eac3_surround_ex_mode string optional Indicates whether the audio stream was encoded using Dolby EX. |
eac3_drc_line_mode_profile string optional Dynamic Range Control for Line Mode. |
eac3_drc_rf_mode_profile string optional Dynamic Range Control for RF Mode. |
eac3_dialog_normalization integer optional Represents the volume level of dialog in the audio stream which can be used by a Dolby Digital decoder. This aids the decoder in matching volume between program sources. Minimum value is 1, maximum is 31. |
eac3_room_type string optional none |
eac3_mixing_level integer optional Minimum value is 80, maximum is 111. |
eac3_copyright_protected boolean optional Indicates whether the encoded bitstream is copyright protected. |
eac3_original_bitstream boolean optional Indicates whether the encoded bitstream is the master version, or a copy. |
title string optional Human-readable name. |
time_code boolean optional If set, timestamps will be added to your videos. By default this is not set. |
Enumerated Values
preset_name aac |
preset_name avc.intra |
preset_name crocodoc |
preset_name dash.variant |
preset_name dash.variant.audio |
preset_name dash.variant.webvtt |
preset_name dash.variant.ttml |
preset_name dash.variant.playlist |
preset_name dash.variant.nvenc |
preset_name dash.muxer |
preset_name dash.muxer.audio |
preset_name dnxhd |
preset_name h264 |
preset_name h264.baseline |
preset_name h264.nvenc.telestream.mov |
preset_name h264.nvenc |
preset_name h265 |
preset_name h265.4K |
preset_name hls.muxer |
preset_name hls.muxer.audio |
preset_name hls.variant |
preset_name hls.variant.audio |
preset_name hls.variant.playlist |
preset_name hls.variant.nvenc |
preset_name hls.variant.webvtt |
preset_name hss |
preset_name hss.variant |
preset_name hss.variant.audio |
preset_name hss.variant.playlist |
preset_name imx |
preset_name iphone_and_ipad |
preset_name jpeg |
preset_name m4a |
preset_name mp3 |
preset_name mpeg2 |
preset_name mpegps |
preset_name mpegts.h264 |
preset_name mpegts.mpeg2 |
preset_name oga |
preset_name ogg |
preset_name png |
preset_name prores422 |
preset_name quick_one_thumbnail |
preset_name thumbnail |
preset_name transcript |
preset_name vorbis |
preset_name webm |
preset_name webm.vp8 |
preset_name webm.vp9 |
preset_name xdcam |
advanced_fps_conversion telestream |
advanced_fps_conversion tachyon |
aspect_mode preserve |
aspect_mode constrain |
aspect_mode letterbox |
aspect_mode pad |
aspect_mode fill (crop) |
aspect_mode stretch |
aspect_mode center |
audio_channels_layout 1 |
audio_channels_layout 2 |
audio_channels_layout 2.1 |
audio_channels_layout 3 |
audio_channels_layout 3.0(back) |
audio_channels_layout 3.1 |
audio_channels_layout 4 |
audio_channels_layout 4.1 |
audio_channels_layout quad |
audio_channels_layout 5 |
audio_channels_layout 5.0(side) |
audio_channels_layout 5.1(side) |
audio_channels_layout 6 |
audio_channels_layout 6.1 |
audio_channels_layout 7 |
audio_channels_layout 7.1 |
audio_channels_layout mono |
audio_channels_layout stereo |
avcintra_class 50 |
avcintra_class 100 |
closed_captions add |
closed_captions burn |
deinterlace keep_fps |
deinterlace double_fps |
h264_level 1 |
h264_level 1b |
h264_level 1.1 |
h264_level 1.2 |
h264_level 1.3 |
h264_level 2 |
h264_level 2.1 |
h264_level 2.2 |
h264_level 3 |
h264_level 3.1 |
h264_level 3.2 |
h264_level 4 |
h264_level 4.1 |
h264_level 4.2 |
h264_level 5 |
h264_level 5.1 |
h264_profile baseline |
h264_profile main |
h264_profile high |
h264_profile high10 |
h264_profile high422 |
h264_profile high444 |
h264_tune film |
h264_tune animation |
h264_tune grain |
h264_tune psnr |
h264_tune ssim |
h264_tune fastdecode |
h264_tune zerolatency |
codec_preset ultrafast |
codec_preset superfast |
codec_preset veryfast |
codec_preset faster |
codec_preset fast |
codec_preset medium |
codec_preset slow |
codec_preset slower |
codec_preset veryslow |
codec_preset placebo |
telestream_block_size 16x16 |
telestream_block_size 24x24 |
telestream_block_size 32x32 |
tachyon_motion_amount xlow |
tachyon_motion_amount low |
tachyon_motion_amount medium |
tachyon_motion_amount high |
tachyon_motion_amount xhigh |
tachyon_motion_amount auto |
tachyon_fallback_size small |
tachyon_fallback_size medium |
tachyon_fallback_size large |
tachyon_fallback_size xlarge |
tachyon_fallback_size auto |
tachyon_mblock_size mb16 |
tachyon_mblock_size mb32 |
tachyon_mblock_size mb64 |
tachyon_mblock_size mb128 |
tachyon_mblock_size mb256 |
tachyon_mblock_size auto |
eac3_bitstream_mode m0 |
eac3_bitstream_mode m1 |
eac3_bitstream_mode m2 |
eac3_bitstream_mode m3 |
eac3_bitstream_mode m4 |
eac3_bitstream_mode m5 |
eac3_bitstream_mode m6 |
eac3_bitstream_mode m7 |
eac3_stereo_downmix_preference m0 |
eac3_stereo_downmix_preference m1 |
eac3_stereo_downmix_preference m2 |
eac3_stereo_downmix_preference m3 |
eac3_lt_rt_center_mix_level c0 |
eac3_lt_rt_center_mix_level c1 |
eac3_lt_rt_center_mix_level c2 |
eac3_lt_rt_center_mix_level c3 |
eac3_lt_rt_center_mix_level c4 |
eac3_lt_rt_center_mix_level c5 |
eac3_lt_rt_center_mix_level c6 |
eac3_lt_rt_center_mix_level c7 |
eac3_lt_rt_surround_mix_level c3 |
eac3_lt_rt_surround_mix_level c4 |
eac3_lt_rt_surround_mix_level c5 |
eac3_lt_rt_surround_mix_level c6 |
eac3_lt_rt_surround_mix_level c7 |
eac3_lo_ro_center_mix_level c0 |
eac3_lo_ro_center_mix_level c1 |
eac3_lo_ro_center_mix_level c2 |
eac3_lo_ro_center_mix_level c3 |
eac3_lo_ro_center_mix_level c4 |
eac3_lo_ro_center_mix_level c5 |
eac3_lo_ro_center_mix_level c6 |
eac3_lo_ro_center_mix_level c7 |
eac3_lo_ro_surround_mix_level c3 |
eac3_lo_ro_surround_mix_level c4 |
eac3_lo_ro_surround_mix_level c5 |
eac3_lo_ro_surround_mix_level c6 |
eac3_lo_ro_surround_mix_level c7 |
eac3_surround_ex_mode m0 |
eac3_surround_ex_mode m1 |
eac3_surround_ex_mode m2 |
eac3_drc_line_mode_profile p0 |
eac3_drc_line_mode_profile p1 |
eac3_drc_line_mode_profile p2 |
eac3_drc_line_mode_profile p3 |
eac3_drc_line_mode_profile p4 |
eac3_drc_line_mode_profile p5 |
eac3_drc_rf_mode_profile p0 |
eac3_drc_rf_mode_profile p1 |
eac3_drc_rf_mode_profile p2 |
eac3_drc_rf_mode_profile p3 |
eac3_drc_rf_mode_profile p4 |
eac3_drc_rf_mode_profile p5 |
eac3_room_type m0 |
eac3_room_type m1 |
eac3_room_type m2 |
CloudNotificationSettings
{
"url": "string",
"delay": 0,
"send_video_payload": true,
"events": {
"encoding_completed": true,
"encoding_progress": true,
"video_created": true,
"video_encoded": true
}
}
Properties
url string required Notifications will be sent to this endpoint. |
delay integer required none |
send_video_payload boolean required Determines whether a video payload will be included in notification messages. |
events object required none |
» encoding_completed boolean required If set to true , a notification will be sent after an encoding becomes complete. |
» encoding_progress boolean required If set to true , a notification will be sent after an encoding’s progess changes. |
» video_created boolean required If set to true , a notification will be sent after a video is created. |
» video_encoded boolean required If set to true , a notification will be sent after a video is encoded. |
PaginatedWorkflowsCollection
{
"workflows": [
{
"advanced_fps_conversion": "telestream",
"aspect_mode": "string",
"aspect_ratio": "16:9",
"audio_bitrate": 128,
"audio_channels": 0,
"audio_channels_layout": 1,
"audio_channels_per_track": 0,
"audio_codec": "string",
"audio_format": "pcm_s24le",
"audio_map": "string",
"audio_pid": "string",
"audio_profile": "string",
"audio_sample_rate": 44100,
"audio_stream_id": 0,
"audio_streams": 0,
"avcintra_class": 50,
"buffer_size": 0,
"buffer_size_in_packets": "string",
"bumpers": {},
"byte_range_requests": true,
"clip_end": "00:00:06:00@25",
"pixel_format": "yuv420p",
"clip_length": "00:20:00",
"clip_offset": "00:00:10",
"closed_captions": "add",
"color_metadata": true,
"created_at": "string",
"crop_input_bottom": "string",
"crop_input_height": "string",
"crop_input_left": "string",
"crop_input_right": "string",
"crop_input_top": "string",
"crop_input_width": 0,
"dash_profile": "string",
"deinterlace": "string",
"deinterlace_frames": "string",
"description": "string",
"dnxhd_type": 36,
"encryption": true,
"extname": ".mp4",
"fps": 29.97,
"frame_count": 0,
"frame_interval": "1000f",
"frame_offsets": "2s, 10s, 250f, 400f",
"h264_level": 1,
"h264_profile": "baseline",
"h264_tune": "film",
"height": 720,
"id": "string",
"imx_type": "string",
"inputs": {},
"interlace": "string",
"keyframe_interval": 0,
"keyframe_rate": "string",
"lang": "string",
"max_rate": 0,
"merge_audio_streams": "string",
"mute_audio_tracks": true,
"name": "string",
"outputs": {},
"outputs_path_format": "string",
"playlist_type": "iframe",
"pmt_pid": "string",
"preset_name": "string",
"prores_format": "string",
"segment_time": 0,
"stack": "string",
"starting_timecode": "string",
"telestream_block_size": "16x16",
"telestream_blur_scaler": 0,
"telestream_cost_scaler": 0,
"telestream_search_length_scaler": 0,
"telestream_subpel_mode": true,
"time_code": "string",
"title": "string",
"trailers": {},
"transport_rate": "string",
"ts_pids": "string",
"updated_at": "string",
"upscale": true,
"use_editlist": true,
"variants": "string",
"video_bitrate": 3000,
"video_pid": "string",
"watermark_bottom": "string",
"watermark_bumpers": true,
"watermark_height": "string",
"watermark_left": "string",
"watermark_right": "string",
"watermark_top": "string",
"watermark_trailers": true,
"watermark_url": "string",
"watermark_width": "string",
"width": 1080,
"x264_options": "string",
"x265_options": "string",
"xdcam_format": "string",
"tachyon_allow_remove_pulldown": true,
"tachyon_enable_post_pulldown_filter": true,
"tachyon_media_hint_is_cartoon": true,
"tachyon_media_hint_has_chroma_noise": true,
"tachyon_more_sensitive_remove_pulldown": true,
"tachyon_allow_add_standard_pd": true,
"tachyon_allow_add_2_2pd": true,
"tachyon_allow_add_4_4pd": true,
"tachyon_allow_add_4_6pd": true,
"tachyon_allow_add_euro_pd": true,
"tachyon_allow_add_adaptive_pd": true,
"tachyon_motion_amount": "xlow",
"tachyon_fallback_size": "small",
"tachyon_mblock_size": "mb16",
"tachyon_cut_detection_sensitivity": 0,
"eac3_evolution_enable": true,
"eac3_bitstream_mode": "m0",
"eac3_ninety_degree_phase_shift": true,
"eac3_three_decibel_attenuation": true,
"eac3_enable_lfe_low_pass_filter": true,
"eac3_analog_to_digital_converter_type": "standard",
"eac3_stereo_downmix_preference": "m0",
"eac3_lt_rt_center_mix_level": "c0",
"eac3_lt_rt_surround_mix_level": "c3",
"eac3_lo_ro_center_mix_level": "c0",
"eac3_lo_ro_surround_mix_level": "c3",
"eac3_surround_ex_mode": "m0",
"eac3_drc_line_mode_profile": "p0",
"eac3_drc_rf_mode_profile": "p0",
"eac3_dialog_normalization": 0,
"eac3_room_type": "m0",
"eac3_mixing_level": 0,
"eac3_copyright_protected": true,
"eac3_original_bitstream": true
}
],
"page": 0,
"per_page": 0,
"total": 0
}
Properties
workflows [Profile] optional none |
page integer optional A number of the fetched page. |
per_page integer optional A number of factories per page. |
total integer optional A number of all factories stored in the db. |
FactoryBody
{
"type": "object",
"required": [
"name"
],
"properties": {
"aws_access_key": {
"type": "string",
"description": "AWS access key."
},
"aws_secret_key": {
"type": "string",
"description": "AWS secret key."
},
"factory_region": {
"type": "string",
"description": "A region where the factory is located."
},
"input_bucket_file_pattern": {
"type": "string",
"description": "A pattern that will be used to locate files in the input bucket. Valid wildcards might be used."
},
"input_bucket_name": {
"type": "string",
"description": "A name of an input bucket."
},
"input_bucket_recursive": {
"type": "boolean"
},
"input_bucket_sync_every_n_min": {
"type": "integer",
"description": "Determines how often the input bucket is synchronised."
},
"input_bucket_watch": {
"type": "boolean",
"description": "Determines whether the Factory should be notified about new files added to the input bucket."
},
"name": {
"type": "string",
"description": "Name of the Factory."
},
"outputs_path_format": {
"type": "string",
"description": "Specify the directory where the output files should be stored. By default it is not set. More info [here](https://cloud.telestream.net/docs#path-format---know-how)."
},
"provider_specific_settings": {
"type": "object",
"additionalProperties": null
},
"acl": {
"type": "string",
"enum": [
"public",
"private"
],
"description": "Specify if your files are public or private (private files need authorization url to access). By default this is not set."
},
"output_bucket_name": {
"type": "string",
"description": "A bucket where processed files will be stored."
},
"server_side_encryption": {
"type": "boolean",
"description": "Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set."
},
"storage_credential_attributes": {
"type": "object",
"properties": {
"host": {
"type": "string"
},
"username": {
"type": "string"
},
"password": {
"type": "string"
},
"port": {
"type": "integer"
}
}
},
"storage_provider": {
"type": "integer",
"description": "Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9"
}
}
}
Properties
aws_access_key string optional AWS access key. |
aws_secret_key string optional AWS secret key. |
factory_region string optional A region where the factory is located. |
input_bucket_file_pattern string optional A pattern that will be used to locate files in the input bucket. Valid wildcards might be used. |
input_bucket_name string optional A name of an input bucket. |
input_bucket_recursive boolean optional none |
input_bucket_sync_every_n_min integer optional Determines how often the input bucket is synchronised. |
input_bucket_watch boolean optional Determines whether the Factory should be notified about new files added to the input bucket. |
name string required Name of the Factory. |
outputs_path_format string optional Specify the directory where the output files should be stored. By default it is not set. More info here. |
provider_specific_settings object optional none |
acl string optional Specify if your files are public or private (private files need authorization url to access). By default this is not set. |
output_bucket_name string optional A bucket where processed files will be stored. |
server_side_encryption boolean optional Specify if you want to use multi-factor server-side 256-bit AES-256 data encryption with Amazon S3-managed encryption keys (SSE-S3). Each object is encrypted using a unique key which as an additional safeguard is encrypted itself with a master key that S3 regularly rotates. By default this is not set. |
storage_credential_attributes object optional none |
» host string optional none |
» username string optional none |
» password string optional none |
» port integer optional none |
storage_provider integer optional Specifies which storage provider the factory should use. Available options: S3: 0, Google Cloud Storage: 1, FTP storage: 2, Google Cloud Interoperability Storage: 5, Flip storage: 7, FASP storage: 8, Azure Blob Storage: 9 |
Enumerated Values
acl public |
acl private |
FactorySyncBody
{
"sync": "true"
}
Properties
sync string required Determines whether a Factory’s data will be synchronised. |
Enumerated Values
sync true |
sync false |
VideoMetadata
{
"type": "object",
"additionalProperties": null
}
Properties
None
Storage
Telestream Cloud supports multiple storage providers to better suits your needs.
Amazon Simple Storage (S3)
Telestream Cloud uses S3 to store encoded video files so first of all you should signup for an Amazon Web Service account.
Create AWS account
Get Amazon AWS Account
Go to https://aws.amazon.com and follow the instruction in
Sign Up
.Signup for S3
Once your AWS account has been created, go to
Amazon Simple Storage Service (S3)
in the management console and sign up for the service.Grab your credentials
Go to IAM Users settings (Services -> IAM -> Users) and create a new user for Telestream Cloud. Then copy the generated user credentials (
Access Key ID
andSecret Access Key
, you will later need them to create a Telestream Cloud factory). Now you will need to give Telestream Cloud permissions to create new factories and upload files to the newly created user. Find the user in IAM settings and clickAttach User Policy
. You will have to select appropriate user policy - either choose one of the predefined policies to let Telestream Cloud in (Amazon S3 Full Access
, more permissive likePower User Access
would work but are not needed), or create a custom policy.
You are now ready to create a Telestream Cloud !
{
"Version": "2008-10-17",
"Id": "PandaStreamBucketPolicy",
"Statement": [
{
"Sid": "Stmt1344015889221",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::078992246105:root"
},
"Action": [
"s3:AbortMultipartUpload",
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::YOUR-BUCKET/*"
},
{
"Sid": "Stmt1344015889221",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::078992246105:root"
},
"Action": [
"s3:GetBucketAcl",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:PutBucketAcl"
],
"Resource": "arn:aws:s3:::YOUR-BUCKET"
}
]
}
Limit Telestream Cloud’s access on your bucket
By default Telestream Cloud only has access to the bucket. If you want to further restrict what Telestream Cloud can do, you can use a policy file like the one shown below. This example contains the minimum set of operations that Telestream Cloud needs for encoding and management.
In your AWS Console, S3, Properties, there is an “Edit bucket policy” button. Replace “YOUR-BUCKET” in the following text with your bucket name and paste it in the box. When done, you can remove the “telestreamcloud” user in the list and save.
Create an IAM user for Telestream Cloud
If you don’t want to enter your master AWS credentials when creating a new Cloud, here is an alternative method.
NOTE: Telestream Cloud NEVER stores your AWS credentials. We only use them to create, identify and authorise your S3 bucket to be used by Telestream Cloud.
Amazon allows you to create restricted users called IAM. Instead of giving your master AWS credentials you can create an IAM user with just the permissions that Telestream Cloud needs to authorise the bucket and feed these credentials to Telestream Cloud when creating a new Cloud. For more informations on IAM have a look at Amazon’s documentation here: https://console.aws.amazon.com/iam
Policy statement
{
"Statement": [
{
"Sid": "StmtXXXXXXXXX",
"Action": [
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"s3:PutBucketAcl"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
Create the user
To ensure created user will have sufficient privileges to be used by Telestream Cloud, you need to attach some policies to this user.
- Select your user and click on
Attach user Policy
(You can attach the policy directly to the group if you prefer)
- Select
Policy Generator
->Select
- Select
Effect
=>Allow
,AWS Service
=>Amazon S3
- Click on
Action
and tick the following options:GetBucketAcl
,PutBucketAcl
,GetBucketLocation
- Insert in the resource field:
arn:aws:s3:::bucket-name/*
if you want this policy to be applied to a specific bucket orarn:aws:s3:::*
for any bucket of your account. - Click on
Add Statement
and thenContinue
. - Apply your policy.
Use LiveSync for your Telestream Cloud S3 factory
With LiveSync every new file added to the S3 source bucket will be automatically encoded to all output profiles selected for this factory. You can set this option in your factory settings in console. Check out our Guides section for more information. You can also find the example IAM user policy there!
Google Cloud Storage (GCS)
To use Google Cloud Storage with Telestream Cloud, you should sign up for a GCS account to allow Telestream Cloud store encoded video files.
Create GCS account
Go to Google Developers Console and follow the sign up instructions. If you don’t have Google account, you will be prompted to create one.
Once signed in create project that you wish to activate GCS for
Enable Google Cloud Storage service while in the project select
API’s & AUTH
in the left sidebar in the APIs list click button next to Google Cloud Storage to turn it onIn the project Settings click
Enable billing
and you will be guided through the processTo be able to create buckets in Telestream Cloud you will need your Access Key and Secret
To obtain
Access Key & Secret
: Go to your project’sStorage
page and underCloud Storage
selectStorage access
from the left menu and then clickInteroperability
tab on top. Now you may need to clickEnable Interoperability access
button to enable it. When you do it you should see yourAccess Key & Secret
.
You are now ready to create a Telestream Cloud with Google Cloud Storage!
Rackspace Cloud Files (CF)
Before storing encoded video files with Rackspace you should sign-up for an CloudFiles account if you don’t have one yet.
Create CloudFiles account
Get RackSpace account Go to Cloud Files page and follow the sign-up process.
Create container (optional) Once signed in select Files in top menu and create container (either private or public).
Grab your credentials In your Cloud Control Panel you’ll find your username and API key in Account Settings.
Get your Temp URL token You can either create Temp URL token yourself through API - see how - or let us generate one for you while creating a new Factory using Rackspace storage. You can use the Temporary URL feature (TempURL) to create limited-time Internet addresses that allow limited access to your Cloud Files account. Using TempURL, you can allow others to retrieve objects from or place objects in your Cloud Files account for a specified amount of time. After the specified amount of time expires, access to the account with the TempURL is denied.
You are now ready to create a Telestream Cloud !
FTP Storage (FTP)
If you prefer using your own infrastructure you may set up Telestream Cloud to store encoded files on FTP server.
Setting up FTP with Telestream Cloud
Log in to your Telestream Cloud account
Click
Add New
on your dashboard InCreate New Factory
form select FTP Server as storage optionEnter your credentials Assuming you already have FTP account prepared, just enter host, port (default 21), username, pass and define folder where the files should be stored.
Your Factory with FTP storage is ready to use!
Use LiveSync for your Telestream Cloud FTP factory
With LiveSync every new file added to the specified FTP source directory will be automatically encoded to all output profiles selected for this factory. You can set this option in your factory settings in console. Check out our Guides section for more information!
Aspera Enterprise Server Storage (FASP)
If you prefer using your own infrastructure you may set up Telestream Cloud to store encoded files on your Aspera Enterprise Server.
Setting up FASP with Telestream Cloud
Log in to your Telestream Cloud account
Click Add Factory on your dashboard In Storage Options form select Aspera Enterprise Server
Enter your credentials Enter host, username, password and bucket or folder where the files should be stored.
Your Factory with Aspera Enterprise Server storage is ready to use!
Use LiveSync for your Telestream Cloud FASP factory
With LiveSync every new file added to the specified FASP source folder will be automatically encoded to all output profiles selected for this factory. You can set this option in your factory settings in console. Check out our Guides section for more information!
Telestream Cloud Uploader
The Telestream Cloud uploader allows you to upload videos from your web application to Telestream Cloud. It’s an HTML5 uploader solution with Flash fallback.
What’s new
Here is a couple of features that forced us to rewrite the uploader from scratch.
- Library agnostic.
- Better code base and a better api.
- Resumable uploader. We built a new upload backend to handle the resume of your upload if you go offline. This is great for big files.
- Upload queueing. You can easily add multiple videos on a single page.
- Consistent UI between HTML5 and FLASH.
Upload Strategies
The Telestream Cloud Uploader will use HTML5 upload if the browser supports it, and will fall back to Flash upload if necessary. Flash doesn’t have resumable capabilities and will upload your content as a MultiPart stream.
Browser | Upload Supported? | Method Used |
---|---|---|
Opera | Yes | HTML5 |
Safari | Yes | HTML5 |
Chrome | Yes | HTML5 |
Firefox >= 3.5 | Yes | HTML5 |
IE 6-9 | Yes | Flash |
Others | Yes | Flash |
Library installation
In order to start using the uploader, you need to paste the link to the CDN hosted minified version of the uploader library. You can keep up to date automatically with patch releases by linking to a minor version. The current stable version is 2.3. To do so, simply include the following declaration in your page:
<script src="//cdn.pandastream.com/u/2.3/panda-uploader.min.js"></script>
Initialization
By invoking panda.uploader.init(options)
with a set of configuration options, you will initialize the Telestream Cloud uploader
Here is the list of options available at the time of initialization:
parameters | attributes |
---|---|
buttonId | Dom Id of the styled Browsing button.( required!, it should be a <div> ) |
authorizeUrl | Route of the authentication request.( example: /panda/authorize_upload ) |
autoStart | Upload starts right after the user select a file.( true/false, default: true ) |
autoResume | Automatically resume the upload after you went offline.( true/false, default: true ) |
resumeInterval | Interval in milliseconds before the upload gets resumed.( default: 5000 ) |
allowSelectMultipleFiles | Allows you to add multiple files to the upload queue.( true/false, default: false ) |
progressBarId | Dom id of the progress bar. |
fileDropId | Dom id of the file drop zone. |
fileUrlInputId | Dom id of the text input where url will be placed. |
fileUrlButtonId | Dom id of submit button for fileUrlInputId. |
maxFileSize | Maximun file size.( example: ‘10 MB’, valid: [K|M|G]B, default: null ) |
confirmBeforeUnload | Alert the user that an upload is processing.( true/false, default: true ) |
type | Forces the uploader type.( html/flash, default null ) |
onQueue (files) | List of <files> added to the Queue. |
onStart (file) | <file> starts uploading. |
onProgress (file, percent) | <file> upload progress. |
onSuccess (file, json) | The uploader has successfully uploaded <file> and returned a <json> object. |
onError (file, text) | The uploader has failed uploading <file> and returned a response. |
onComplete () | The upload queue has been completed. |
onCancel (file) | <file> upload has been canceled. |
onPause (file) | <file> upload has been paused due to connectivity issues. |
<Uploader>
Object:
parameters | attributes |
---|---|
type | Returns the uploader type (html5/flash). |
setPayload (file, object) | Add extra variables to the payload. |
setEnabled (bool) | Enable/Disable the uploader. |
getQueuedFiles () | Returns the list of queued files. |
start () | Start uploading next queued file. |
cancel (file) | cancel <file> upload. |
<File>
Object:
parameters | attributes |
---|---|
name | File name. |
size | File size in Bytes. |
Upload authentication
Ruby example
# Using Rails and https://github.com/Telestream/telestream-cloud-ruby-sdk
# app/controllers/panda_controller.rb
class PandaController < ApplicationController
def authorize_upload
payload = JSON.parse(params['payload'])
options = {
profiles: "h264,webm",
# payload: 'something',
# path_format: ':video_id/:profile/play',
}
if payload['filename']
url = '/videos/upload.json'
options['file_name'] = payload['filename']
options['file_size'] = payload['filesize']
else
url = "/videos.json"
options['source_url'] = payload['fileurl']
end
upload = TelestreamCloud.post(url, options)
render :json => {:upload_url => upload['location']}
end
end
Python example
# Using Django and https://github.com/Telestream/telestream-cloud-python-sdk
# views.py
@csrf_exempt
def authorize_upload(request):
params = json.loads(request.POST['payload'])
options = {"profiles": "h264"}
if params["filename"]:
url = "/videos/upload.json"
options["file_name"] = params["filename"]
options["file_size"] = params["filesize"]
else:
url = "/videos.json"
options["source_url"] = payload["fileurl"]
upload = tc.post(url, options)
auth = {"upload_url": json.loads(upload)["location"]}
return HttpResponse(json.dumps(auth), mimetype='application/json')
PHP example
<?php
// authorize_upload.php
$payload = json_decode($_POST['payload']);
$filename = $payload->{'filename'};
$filesize = $payload->{'filesize'};
$fileurl = $payload->{'fileurl'};
$options = array('profiles' => 'h264');
if ($filename) {
$url = '/videos/upload.json';
$options['file_name'] => $filename;
$options['file_size'] => $filesize;
} else {
$url = '/videos.json';
$options['source_url'] => $fileurl;
}
$upload = json_decode(@$panda->post($url, $options);
$response = array('upload_url' => $upload->location);
header('Content-Type: application/json');
echo json_encode($response);
?>
The authentication of your new upload occurs via an HTTP Request to a configurable authentication url when the file is ready to be uploaded. In the JavaScript Uploader the HTTP Request is executed via AJAX POST request.
The destination of the authentication request can be configured by setting the authorizeUrl param when calling panda.uploader.init
.
The default is /panda/authorize_upload
A payload is then sent as a JSON encoded object in the body and can contain 2 sets of variables:
filesize
,filename
,content_type
fileurl
These should be self-explanatory.
The api request to Telestream Cloud should include:
for /videos/upload.json
endpoint file_name
and file_size
for /videos.json
endpoint source_url
Optionally, you can set:
parameters | attributes |
---|---|
use_all_profiles: | (true / false) Default is false |
profiles: | Comma-separated list of profile names.By default no encodings are created yet. |
payload: | Arbitrary string stored along the Video object. |
path_format: | Allows you to set the location inside your S3 Bucket.It should not include the file extention. |
More details on the api docs
The generated JSON should include:
parameters | attributes |
---|---|
upload_url | Location where to upload the file |
postprocess_url (optional) | When a file upload is complete, a request is made to this url to let your server know that the uploader finished uploading the file |
Simplest example
<form action="/path/to/action" id="new_video" method="POST">
<input type="hidden" name="panda_video_id"/>
<div id="browse-files">Choose file</div>
</form>
Uploader setup
var upl = panda.uploader.init({
'buttonId': 'browse-files',
'onProgress': function(file, percent) {
console.log("progress", percent, "%");
},
'onSuccess': function(file, data) {
$("#new_video")
.find("[name=panda_video_id]")
.val(data.id)
.end()
.submit();
},
'onError': function(file, message) {
console.log("error", message);
},
});
The following is the simplest working form that will upload a video:
In this example:
- Click on “Choose file”. You will be shown a file selection dialog.
- Select a file to upload.
- Wait for the upload to complete.
- After the upload completes, Telestream Cloud returns a unique ID that identifies your video. The form will finally be submitted so that your application can read this value and use it to reference the video later on.
var upl = panda.uploader.init({
...
'onQueue': function(files) {
$.each(files, function(i, file) {
upl.setPayload(file, {'authenticity_token': AUTH_TOKEN});
})
},
}
If you need to, you can add some extra data to the payload alongside the ones mentioned above.
Additional features
Progress Bar and File Drop
<form action="/path/to/action" id="new_video" method="POST">
<input type="hidden" name="panda_video_id"/>
<div class='progress'><span id="progress-bar" class='bar'></span></div>
<div id="file-drop">Drop files here</div>
<div id="browse-files">Choose file</div>
</form>
Uploader setup
var upl = panda.uploader.init({
...
'progressBarId': "progress-bar",
'fileDropId': "file-drop",
});
The uploader comes with some handy handlers like Progress Bars and File Drop.
The uploader doesn’t come with any styling. Take a look at Twitter Bootstrap.
Resume an upload
var upl = panda.uploader.init({
...
'autoResume': false,
'onPause': function(){
$("#notice").text("You went offline.");
}
})
$("#resume-btn").click(function() {
upl.start();
})
If you have been disconnected from the Internet while you were uploading a file you will be notified by the onPause
callback.
It’s important to note that the Flash uploader doesn’t support this feature so the upload will fail.
By default, the uploader will setup a resume interval of 5 seconds.
You can also create a resume button.
To resume your uploading queue, just call the start
method and your current upload will continue where it left off.
Abort an upload
$("#cancel-btn").click(function() {
upl.cancel(file);
})
If you want to abort an upload that is currently taking place, use the cancel() function from the uploader instance:
An aborted upload is no longer resumable.
Upload file from another server
<form action="/path/to/action" id="new_video" method="POST">
<input type="hidden" name="panda_video_id"/>
<input id="file-url" type="text" placeholder="Type URL to file">
<button id="file-url-send" type="button">Upload from URL</button>
<div id="browse-files">Choose file</div>
</form>
Uploader setup
var upl = panda.uploader.init({
...
'fileUrlInputId': "file-url"
'fileUrlButtonId': "file-url-send"
});
You can also upload any publicly available video file just by submitting the URL of it.
Upload from URL in pure JavaScript
var upl = panda.uploader.init({
...
});
upl.uploadFromUrl("http://mysite/video.mp4", function (error) {
// If something went wrong the error parameter will be passed to this callback function.
// If error is undefined it means action ended with success.
});
You can also omit the HTML form part, and just call uploader method uploadFromUrl
to achieve the same effect.
Ruby example
# app/controllers/panda_controller.rb
class PandaController < ApplicationController
def authorize_upload
...
render :json => {
:upload_url => upload['location'],
:postprocess_url => '/some/postprocess'
}
end
end
Python example
# views.py
def authorize_upload(request):
...
auth = {
"upload_url": json.loads(upload)["location"],
"postprocess_url": '/some/postprocess',
}
return HttpResponse(json.dumps(auth), mimetype='application/json')
PHP example
<?php
// authorize_upload.php
$response = array(
'upload_url' => $upload->location},
'postprocess_url' => 'postprocess.php'
);
header('Content-Type: application/json');
echo json_encode($response);
?>
Post processing
You might want to let your server know that the uploader finished uploading a file. This is quite useful when handling multiple uploads on a single web page.
To achieve this, you simply need to return the postprocess_url
during the authentication handshake.
Ruby example
# app/controllers/some_controller.rb
class SomeController < ApplicationController
def postprocess
response = JSON.parse(params["upload_response"])
render :json => { :id => "some-id" }
end
end
Python example
# views.py
@csrf_exempt
def postprocess(request):
response = json.loads(request.POST['upload_response'])
return HttpResponse(json.dumps({"id": "some-id"}), mimetype='application/json')
PHP example
<?php
// postprocess.php
$response = json_decode($_POST['upload_response']);
header('Content-Type: application/json');
echo json_encode(array('id' => 'some-id'));
?>
Once the video is successfully uploaded to Telestream Cloud, your server will receive a POST request like this.
var upl = panda.uploader.init({
...
'onSuccess': function(file, data) {
console.log(data['id']); // 'some-id'
}
})
The onSuccess
callback will expose the data received from the postprocess request.
Guides
LiveSync and Watch Folder
Use LiveSync for your Telestream Cloud factory
Example LiveSync IAM user policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt13371337",
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObjectAcl",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:GetBucketPolicy",
"s3:PutBucketPolicy"
],
"Resource": [
"arn:aws:s3:::bucket-livesync-in/*",
"arn:aws:s3:::bucket-livesync-out/*",
]
},
{
"Sid": "Stmt133713371",
"Effect": "Allow",
"Action": [
"s3:GetBucketAcl",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:GetBucketLocation",
"s3:PutBucketAcl",
"s3:GetBucketPolicy",
"s3:PutBucketPolicy"
],
"Resource": [
"arn:aws:s3:::bucket-livesync-in",
"arn:aws:s3:::bucket-livesync-out",
]
}
]
}
With LiveSync every new file added to the source bucket will be automatically encoded to all output profiles created for this factory. Thanks to this, we are handling all the dirty work for you – that means you don’t have to write a single line of code or worry about API calls! You can set this option in your factory settings in console:
You also might want to encode all files that are currently stored in this bucket. In order to do that, all you need to do is select Synchronize existing files
option. Simple as that.
You can always enable LiveSync at any time for currently existing factory or when creating a new one.
However, here are some important things that you should know about this feature:
- The bucket that is being used for LiveSync can’t be the same as the output bucket
- Both buckets have to use the same credentials in order to access them
LiveSync feature is currently available for S3. You can just copy and use the example policy on the right that contains all permissions needed to set up LiveSync. Just rename bucket-livesync-in
and bucket-livesync-out
to your input and output bucket!
Use Watch Folder for your Telestream Cloud factory
With Watch Folder every new file added to the source folder (in case of Aspera Enterprise Server) or directory (FTP) will be automatically encoded to all output profiles created for this factory. This works pretty much the same as LiveSync feature for S3, but the check if there are any new files is being executed once every couple of minutes while in the LiveSync it happens automatically once the file lands in the source bucket.
Here are some important things that you should know about this feature:
- The directory or folder that is being used for Watch Folder can’t be the same as the output one
- Both directories / folders have to use the same credentials in order to access them
Path Format - know-how
Example path format
"my-path/:video_id/:profile/:id"
General information
You can set the outputs_path_format
for a Factory or Profile so that any files encoded will have a more meaningful name. You can also use path_format
for Video
object to achieve the same goal.
The following keywords can be combined to create a path format.
parameters | attributes |
---|---|
id | ID of the encoding. |
video_id | ID of the video. |
original | Original filename of the uploaded video |
date | Date the video was uploaded (2009-10-09 ). |
profile | Profile name used by the encoding (original is used when the file is the original video). |
type | Video type, original or encodings . |
resolution | Resolution of the video or the encoding (480x340 ). |
By default, if path_format
is not being set anywhere, it is set to :id
.
Order
By default outputs_path_format
/path_format
is not set for Video
/Factory
/Profile
object. Since there are number of ways to set this, here is the order in which path format is being applied (if it is empty for the Video
object, we are checking if it is set for Profile
etc.):
Video
path_format,Profile
outputs_path_format,Factory
outputs_path_format
Team Management
From now on, you no longer have to share the credentials to your account with your co-workers! What’s more, you can limit the
access to the certain account sections only. In order to do that, click on Team
tab in the UI and then Add User
button. The modal
will then appear that needs to be filled in. After you are done, click Create User
. The confirmation email will be sent to the proper person and then newly created user will be able to
set the password to their account. That’s it!
Here’s the list of available roles you can assign to the users in the team:
Owner
- has all the capabilities,Admin
- can do anything apart from creating owners,Editor
- has full access to encoding jobs and profiles for specific factories,Viewer
- can only view job and profiles and play output files for specific factories,Billing
- has access to the Billing tab only, can upgrade account/update card.
Upload API
Streaming upload using client libraries
# https://github.com/Telestream/telestream-cloud-python-sdk#resumable-uploads
us = factory.upload_session("file.mp4", profiles="webm")
retry_count = 0
try:
us.start()
except Exception as e:
while retry_count < 5 and us.status != "success":
try:
time.sleep(5)
us.resume()
except Exception as e:
retry_count += 1
# https://github.com/Telestream/telestream-cloud-ruby-sdk/#resumable-upload
us = TelestreamCloud::UploadSession.new("panda.mp4", profiles: "webm")
retry_count = 0
begin
us.start()
rescue Exception => e
while retry_count < 5 and us.status != "success"
begin
sleep(5)
us.resume()
rescue Exception => e
retry_count += 1
end
end
end
Small multimedia files can be sent using POST request on “/videos.json” API endpoint. This will attempt to send te entire using a single request. The obvious drawback of this approach is lack of rich uploading features. You cannot stop and retry the process and in case of a connection failure you have to send the file from the beggining. That’s why it’s usually better for such files to use resumable upload features, which allows you to send files in chunks. If the connection fails, you can query Telestream Cloud for the range of file that has been succesfully sent so you can resume the process from that point onwards.
Telestream Cloud’s Upload API supports 2 ways of uploading a file: resumable (also known as streaming) and multipart upload. The first is a better choice when your environment allows you to do so. The seconds is the standard method for web browsers to send large files. Recent browsers now supports the first method too. Both methods are described in this document.
Instead of creating your own code, you can use session creating functionality offered by the Telestream Cloud libraries.
Create an upload session
->
POST /videos/upload.json
Host: api-us-east.cloud.telestream.net
--
file_size : integer
file_name : string
<-
Status Code 201
"id" : integer
"location" : location to upload the video
Before uploading a new file, you need to create an upload session. This is normally done by making an ajax call request from your javascript uploader (with the file size and name) to your backend. The ajax request should return the location for the upload.
At this point, Telestream Cloud gives you a unique resource location to upload the file.
File upload using Streaming method
Protocol
->
PUT /<location>
"Content-Type: application/octet-stream"
"Content-Range: bytes RS-RE/L" [where RS=range start, RE=range end, L=file_size]
--
Body <BINARY>
<-
Status Code 200
--
Body <Video JSON>
If the file has been uploaded successfully, the original request is sent to the backend with the file and you receive the backend’s response. (R2=L-1)
If the Content-Range is missing, the whole file is expected to be sent.
The method can also be POST, as long as the Content-Type is application/octet-stream we can differentiate with the mulitpart upload.
<-
Status Code 204
Range: RS-RE
--
Body <empty>
If the file is incomplete, you get a response that lets you know the missing data (R2<L-1)
.
Example
->
PUT <location/>
Content-Length: 5
Content-Range: bytes 0-4/9
abcde
<-
Status: 204
Range: 0-4
<empty>
1st chunk:
->
PUT <location/>
Content-Length: 4
Content-Range: bytes 5-8/9
fghi
<-
Status: 200
<{"id":"12345"...}>
2nd Chunk:
Upload status
->
PUT /<location>
"Content-Range: bytes */L" [ where L=total file size ]
--
<-
Status Code 204
Range: RS-RE
--
Body <empty>
If the client connection broke, You need to query the server to know where it left the upload. In this case, send an empty request specifying Content-Range: bytes *
and Content-Lenght: 0
in the headers.
Abort the upload
->
DELETE /<location>
<-
Status Code 200
--
Body <empty>
File upload using Multipart method
->
POST /<location>
"Content-Type: multipart/form-data"; boundary=----
--
Body <BINARY>
<-
Status Code 200
--
Body <Video JSON>
To POST data using an HTML <form>
you will have to send the data within the parameter "file"
.
Client notes
Error handling
The client is expected to retry requests that fail with a status of 5xx or weren’t able to pass through at all. All 4xx errors are errors in the client’s implementation and should be treated accordingly.
Location handling
On each response you may receive a new Location that you need to follow in the subsequent requests. This is to leave us the flexibility of moving the upload to a different host. Please record the new location if it appears to have changed.
Content-Range
Here is the regexp to parse the range header: "^(\d+)-(\d+)$"
Notifications
Rather than polling Telestream Cloud to find when a video has finished encoding, Telestream Cloud allows you to provide a notification endpoint and subscribe to events occurring during the encoding process.
To manage your notifications, log into your Telestream Cloud Dashboard, select your Factory and click on the Notifications
tab.
Here you’ll be able to specify a url and select events you would like to receive.
One you’ve saved your notification settings, notifications will be sent for any new videos and encodings of this Factory.
Events
Telestream Cloud provides the following events:
Ruby example
{
"event" => "video-created",
"video_id" => '123234',
"encoding_ids" => {0 => 'firstid', 1 => 'secondid'}
}
PHP example
$_POST["event"] // => "video-created"
$_POST["video_id"] // => '123234'
$_POST["encodings_ids"][0] // => 'firstid'
video-created
This is called once a video has downloaded (if a url was given), validated, and uploaded to your S3 bucket. The status will either be success or fail. An array of encoding ids is provided, although note that the encodings will not have been processed at this state.
After this notification is sent, a subsequent request can be used to fetch metadata of the input video.
Ruby example
{
"event" => "video-encoded",
"video_id" => "bfa6029038de24e4494f20a166700021",
"encoding_ids" => {0 => 'firstid', 1 => 'secondid'}
}
video-encoded
This is called when all encodings for a video have been completed. Note that this may be returned multiple times if, for example, a new encoding is added for an existing video.
{
"event" => "encoding-progress",
"encoding_id" => 'firstid',
"progress" => 23
}
encoding-progress
This is called approximately every 10s while an encoding is processing, and returns the percentage complete. Use with care since this will generate a lot of traffic!
{
"event" => "encoding-complete",
"encoding_id" => "bfa6029038de24e4494f20a166700021"
}
encoding-complete
This is called for each encoding when the encoding is done (or failed).
The post body contains encoding information.
TelestreamCloud::Video.find(params['video_id']).status
=> 'success'
After receiving those IDs you can easily and securely retrieve the state of your videos/encoding by simply using your current library.
Integrate notifications
class TelestreamCloudController < ApplicationController
def notifications
if params['event'] == 'video-encoded'
video = Video.find_by_telestreamcloud_video_id(video_id)
if video
UpdateVideoState.perform_async(video.id)
else
# might have been deleted
end
end
end
end
class UpdateVideoState
include Sidekiq::Worker
def perform(id)
video = Video.find(id)
if video.telestreamcloud_video.status == 'fail'
# video failed to be uploaded to your bucket
else
h264e = video.telestreamcloud_video.encodings['h264']
if h264e.status == 'success'
# save h264e.url in your models to avoid querying panda each time
else # handle a failed job
# h264e.error_class; h264e.error_message
# a log file has been dumped in your bucket
end
end
end
end
For each event you will receive a POST request, containing the event name (ex: encoding-complete) and some ids the videos or encodings having their status changed, as form data.
Telestream Cloud is expecting a 200 response from you. Otherwise it will retry the notification within an exponential interval of time and during 24 hours. The Initial notification delay
field allows to select the initial waiting time in order to manipulate the number and frequency of retried notifications, for example in case of endpoint not being capable of serving large amounts of incoming requests and getting overloaded.
The following example shows a best practice for you to handle those notifications using Async workers. In this example we are going to use Sidekiq to handle async jobs.
Setup in development
Because your development machine is rarely accessible from the Internet, the notifications cannot be sent to you directly. At Telestream Cloud, we use ultrahook to give access to our local development machine to the Internet.
$ gem install ultrahook
# 3000 is the port of the local webserver
$ ultrahook foo 3000
Authenticated as senvee
Forwarding activated...
http://foo.senvee.ultrahook.com -> http://localhost:3000
- Create a tunnel
- Now set the notification URL in your development Factory to http://foo.senvee.ultrahook.com
- Your local app starts receiving notification callbacks
Alternatively, if you just want to see what output Telestream Cloud is producing, create a new target on requestbin.com and set it up as the notification end-point. Postbin will record Telestream Cloud’s callbacks and let you see them trough their web interface.
Common Encryption (CENC) - MPEG-DASH
In order to create CENC-encoded DASH videos, you need to send additional parameters when creating a video: cenc_key
and cenc_key_id
TelestreamCloud::Video.create!(
:source_url => "https://storage.googleapis.com/debug_videos/panda.mp4",
:cenc_key_id => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
:cenc_key => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
)
All tracks are encrypted by default. It is possible to specify whether just audio or video should be encrypted. The following example encrypts just the audio:
TelestreamCloud::Video.create!(
:source_url => "https://storage.googleapis.com/debug_videos/panda.mp4",
:cenc_key_id => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
:cenc_key => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
:encrypt_tracks => "audio",
)
Supported DRMs are Widevine and Playready.
To add Widevine-specific metadata (PSSH box in media files and MPD):
TelestreamCloud::Video.create!(
:source_url => "https://storage.googleapis.com/debug_videos/panda.mp4",
:cenc_key_id => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
:cenc_key => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
:widevine_provider => "widevine_test",
:widevine_content_id => "123456",
)
And the same for Playready:
TelestreamCloud::Video.create!(
:source_url => "https://storage.googleapis.com/debug_videos/panda.mp4",
:cenc_key_id => "9c82ef768d0354c89cd6f1dae8ab647c",
:cenc_key => "daaa605958a645e39adc3d4009783d2c",
:playready_server => "http://playready.directtaps.net/pr/svc/rightsmanager.asmx?PlayRight=1&UseSimpleNonPersistentLicense=1",
)
AES-128 encryption for HLS
cipher = OpenSSL::Cipher::AES.new(128, :CBC)
cipher.encrypt
key = cipher.random_key
iv = cipher.random_iv
To use AES-128 HLS encryption, Telestream Cloud will require a 128 bit key, key url and 128 bit initialization vector. If you are willing to use your own key or initialization vector (iv), you can create them yourself.
There are two ways to create encrypted output using Telestream Cloud:
add
encryption_key
andencryption_key_url
to profile(s) and send the videos withencryption_iv
onlysend each video with
encryption_key
,encryption_key_url
andencryption_iv
.
Please note that if you decide to use the second option while the encryption_key
and encryption_key_url
are set for profile(s), Telestream Cloud will use those specified for the video object.
encoded_key = Base64.encode64(key).chomp
encoded_iv = Base64.encode64(iv).chomp
In order to use your generated key in the profile settings or for the video, you will have to first base64 encode it. Make sure to remove any newline characters at the end.
Profiles pipelining
pipeline = {
"h264.1" => {},
"h264.2" => {
"h264.4" => {},
"h264.5" => {
"h264.7" => {}
}
},
"h264.3" => {
"h264.6" => {}
}
}
TelestreamCloud::Video.create!(
:source_url => "SOURCE_URL_TO_FILE",
:pipeline => pipeline.to_json
)
Profiles pipelining allows you to create connected series, where the output of one profile is also an input of another one.
Image represents example flow of video. Basically, an uploaded video will be encoded with profiles: h264.1
, h264.2
, h264.3
. Then encoding of h264.2
will be used as an input file to process encodings using profiles h264.4
and h264.5
, and so on. Telestream Cloud is using JSON to define pipelines structure.
Encodings created using pipelines will have additional field parent_encoding_id
which can be used to find out what was the input used to encode or to reproduce pipeline with encodings instead of profiles.
Player
Setting up your video player
Telestream Cloud gives you to flexibility to use the video player which suits you best. There are several great players available, below we explain the benefits of each and how to use them with Telestream Cloud.
HTML5 players
HTML5 is the new standard for embedding videos on the web. The New HTML5 video tag plays video natively in the user’s browser or device. If the browser or device doesn’t support the video tag, several HTML5 video players will automatically fallback to a Flash player.
There is an excellent section in Dive Into HTML5 which explains the new <video>
in great detail. You might want to skip to the section about the markup.
There are a few ways to use HTML5 video. In the most basic form you can use a simple <video>
tag to embed video. Using this method the video will work with the following:
- Firefox 3.5+
- Chrome
- Safari 3+
- Opera
- IE 9
- iPhone and iPad
To support older browsers, you can use a HTML5 video player which supports Flash player fallback. After the next section you’ll find details about several good players which support this.
Basic video tag
Example <video> tag
<video id="movie" width="320" height="240" preload="none"
poster="https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID_4.jpg" controls>
<source src="https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID.mp4" type="video/mp4">
<source src="https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID.ogg" type="video/ogg">
</video>
To support HTML5 video in most browsers there must be H.264 and OGG Theora versions of your videos (Firefox does not have support for H.264 and requires OGG Theora).
To enable H.264 (MP4) and Theora (OGG) in Telestream Cloud, simply head to your account, edit one of your encoding Factories and add enable them as presets. Once this is done, all videos uploaded will be encoded to these formats. See the Encoding Presets docs for more details about managing presets.
The simplest way to then embed your videos is using a basic <video>
tag.
In the example you would need to replace VIDEO_ID
with the ID of the video from Telestream Cloud, and then the YOUR_S3_BUCKET
with the name of your S3 bucket.
JW Player for HTML5
There is now a HTML5 version of this popular player. JW Player for HTML5 supports theming and automatically falls back to the Flash version the browser doesn’t support HTML5 video. Full details about the player are here. The best place to start is by downloading the player and then reading the Embedding The Player instructions. Make sure you read the Multiple Sources section to see how to specify multiple formats.
Below is an example of embedding the player using Telestream Cloud:
<script type="text/javascript" src="/scripts/jquery.js"></script>
<script type="text/javascript" src="/scripts/jquery.jwplayer.js"></script>
First, place this code in the <head>
of your page:
<video width="320" height="240" id="player" poster="https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID_4.jpg">
<source src="https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID.mp4" type="video/mp4">
<source src="https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID.ogv" type="video/ogg">
</video>
<script type="text/javascript">
$('#player').jwplayer({
flashplayer:'/files/player.swf',
skin:'/files/skins/five/five.xml'
});
</script>
Second, place this code where you want the video to appear:
FlareVideo
The FlareVideo a great HTML5 video player which has theming support with a seamless fallback to Flash.
Video JS
The Video JS player is another option for displaying HTML5 video. The player is very lightweight and will fallback to the Flash Flowplayer.
Flash Players
Example
<div id='mediaspace'>This text will be replaced</div>
<script type='text/javascript'>
var so = new SWFObject('/player.swf','mpl',"VIDEO_WIDTH","VIDEO_HEIGHT",'9');
so.addParam('allowfullscreen','true');
so.addParam('allowscriptaccess','always');
so.addParam('wmode','opaque');
so.addVariable('file',"https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID.mp4");
so.addVariable('image',"https://s3.amazonaws.com/YOUR_S3_BUCKET/ENCODING_ID_4.jpg");
so.write('mediaspace');
</script>
Using a Flash video player is currently the most reliable way to embed video, and also allows you to easily add in advertising and other interactive features.
There are several options including JW Player and Flowplayer. The instructions below are for using JW Player.
First Download JW Player 5.1, unzip and copy player.swf
swfobject.js
and to you public directory.
You can keep the same controller code as above.
In your view insert your video player as the example shows.
Streaming
Video streaming with Amazon CloudFront
Assuming you are building a high-traffic website, you will want to have your videos streamed efficiently to your users. After encoding your videos with Telestream Cloud, you can stream them through a content delivery network.
By choosing to streaming your videos, users can skip to any point in the video without having to first wait for it to be downloaded as is the case with progressive download delivery.
You will already have an Amazon Web Services account account if you’ve signed up the S3 for storing videos. We recommend using Amazon’s CloudFront CDN.
CloudFront gives you two ways to deliver video content:
- Progressive Download
- Streaming (using RTMP)
The main difference between Streaming and Progressive Download is in how the data is received and stored by the end user.
You can find some documentation on Wikipedia
The document will cover setting up a video streaming. Progressive download is covered by the standard video player integration documentation.
Create a Streaming distribution
Adding Streaming is very easy. Let’s go through all the steps right now.
- First you need to sign in to Amazon and go to the CloudFront console
- Click on button
Create Distribution
on the top-left corner
A new form will appear.
- Select Streaming as the delivery method
- Select your bucket in the list
- Adding CNAMEs will make the distribution URL nicer (optional)
- Select
enabled
It should look similar to this:
- Click on
create
Congrats, you now have a streaming distribution!
Play your videos
Example
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript"> swfobject.registerObject("player", "9.0.0", "/player.swf"); </script>
<object width='320' height='240' id='player'>
<param name='movie' value='/player.swf'>
<param name='allowfullscreen' value='true'>
<param name='allowscriptaccess' value='always'>
<param name='wmode' value='opaque'>
<param name='flashvars' value='file=3ff851d2-d467-11de-87a8-00254bb33798.mp4&streamer=rtmp://s2zw4551q289e3.cloudfront.net/cfx/st&provider=rtmp'>
<embed id='player'
src='/player.swf'
width='320'
height='240'
bgcolor='#ffffff'
allowscriptaccess='always'
allowfullscreen='true'
flashvars='file=3ff851d2-d467-11de-87a8-00254bb33798.mp4&streamer=rtmp://s2zw4551q289e3.cloudfront.net/cfx/st&provider=rtmp'
/>
</object>
Before you begin streaming video, you will need to make sure you have a compatible encoding profile setup in your Telestream Cloud Factory. CloudFront supports both FLV and MP4 streaming. We highly recommend using MP4 as the quality is far superior.
Telestream Cloud has a handy MP4 preset you can use. Simply head to your Telestream Cloud account and then edit one of your Factories. At the bottom of the page you will see the ‘Add Profile’ button. Click this and choose 'MP4 (H.264)’ (use Hi if you would like extra good quality video), feel free the change the dimensions if desired.
Once you’ve setup this profile, you will want to use the generated encodings with the embed code example below.
To take advantage of true streaming you will need to use a Flash player. JW Player or Flowplayer are both great options.
The example shows embed using RTMP streaming with JW Player.
Before this will work, you will need to change some parameters.
file=filename
the filename of the video in your S3 Bucket. Telestream Cloud saves files to your bucket with the following convention: $path$$extname$
. Please check the API docs for more information about encodings.
streamer=value
where value is the the streaming url: $domain_name$/cfx/st
. You can find the Domain Name by logging into the Amazon CloudFront console.
Once you’ve set these parameters correctly you’ll have video being streamed to your users!
Widget
Telestream Cloud Web Widget
Telestream Cloud Web Widget allows you to easily monitor your Factory encoding activity and share this information on your website.
Data displayed includes original name of the uploaded file, encoding profile name, encoding progress and number of jobs left in encoding queue.
Configuration
To get the widget working, at first you need to enable it in your Factory settings. Once you set Enable Web Widget to Yes, you will be presented with a small code snippet.
Copy this code and pase it into your html body. Please also remember to click Save Changes at the bottom of the Factory Settings page.
If at any time you decide that you no longer want Telestream Cloud to sent out widget data, change Enable Web Widget back to No.
Debugging
If you are having trouble with Telestream Cloud integration, those are a few things you can try out before getting in touch with support.
Debug pannel
We provide you with a debug panel for your application which is located in the web app. From here you can check the state of the uploading / encoding / notification processes.
Debug data is not persistent, make sure you have the debug window open in a different tab or window while testing the workflow.
Turning on debugging in your JavaScript
Example
PandaUploader.log = function() {
if (window.console && window.console.log) window.console.log(arguments);
};
To print the activity of the uploader, you can turn on debugging directly in your javascript console (webkit inspector or firebug). After loading the page, paste the example code.
This should create output like the following in your browser (Chrome in this example):
Debugging the encoding
There is a couple of reasons why an encoding can fail. To know more about it, use the api and check the error_message/error_class attribute of the video and encoding.
Also you will find a log file in your bucket which tells why the encoding has failed (ENCODING_ID.log).
FAQ
Please read the FAQ before getting in touch with support.
Where next?
If none of these techniques help get in touch with support and we’ll check whether there is a problem we can help you with.
Please make sure the problem hasn’t been already solved by the support team before creating a new ticket.
Please make sure you can provide us a way to find your account, as a Factory ID or an Encoding ID.
Application integration
Rails
Integrating Telestream Cloud with Ruby on Rails
Coming soon! If you want to integrate Telestream Cloud with your Ruby on Rails app using API V2, take a look at documentation for API V2
PHP
Integrating Telestream Cloud with your PHP application
Coming soon! If you want to integrate Telestream Cloud with your PHP app using API V2, take a look at documentation for API V2
Frequently Asked Questions
Videos
Flash is crashing before or after selecting a file.
Please can you check first if it crashes also with swfupload examples (http://demo.swfupload.org/v220/simpledemo/index.php).
If it does not work get in touch with support.
Video resource has status fail. What does this mean?
The status attribute of a video resource is the result of the following process:
- Getting your original video from the source.
- No encoding task has been performed yet.
A failure can be the result of following problems:
- You are using the source_url and the video is bigger than 25GB. Send a smaller video. If you want to upload bigger video, please contact our support.
- You are using the source_url and the video is not reachable by Telestream Cloud. Make sure your video can be downloaded from outside and that you are not referring to localhost.
Check attributes error_class
and error_message
of the response
All my recent uploads are failing now. What’s happening?
You should first check that Telestream Cloud has still permissions to read and write files to your bucket, using Amazon S3 console. You can grant access to Telestream Cloud again by editing your Factory in the web app.
If yes, please get in touch with the support.
If not, use the edit cloud link inside your account, re-type your bucket name and re-enter your amazon credentials.
I can’t find the encoding log file in my bucket
Check first the status of your video by doing GET /videos/:id.json
. If the status is fail
then look at the “Video Resource has status fail” section
Telestream Cloud uploads temporary files in my bucket. How can I avoid that?
Telestream Cloud will upload all files having a filename starting with the Encoding ID. So make sure you give to your temporary file a name which doesn’t start with $record_id$.
Can I use a different video container?
When you create a profile from a preset, we choose a default container compatible with the video codec. Generally speaking this will suffice for most peoples needs.
If you do want to change container, you can simply update the extname of your profile:
prof = TelestreamCloud::Profile.create!(
:preset_name => "h264",
:extname => ".mkv"
)
How do I encode and store my videos in the EU region?
This is handled through your Telestream Cloud account creation and Amazon’s AWS region selection.
When creating a Telestream Cloud account you can opt to have the service based in Amazon’s EU region (please contact us if you wish to move an existing account to the EU region). This will mean that all your videos are uploaded and encoded on our EU servers.
If you are using this option you will also need to make sure the S3 buckets which store you videos are also in the EU region.
What storage backends can I use?
We’re constantly working on adding new storage options.
Currently Telestream Cloud supports following:
- Amazon S3
- Google Cloud Storage
- Rackspace Cloud Files
- your own FTP server
If you have valid accounts with any of these service providers you can connect them right away. Or set up your FTP server for full control.
Does Telestream Cloud support resumable uploads?
Yes, file uploader built into Telestream Cloud web UI supports resumable upload. Anytime connection gets broken while you upload a file to Telestream Cloud it will be resumed once it’s restored. No need to upload file again. Please note that resumable upload will not work with Flash version of uploader which is fallback option.
Encodings
Does Telestream Cloud support audio encoding?
Yes, we provide several audio presets or you can check the Advanced profiles section and create your own profiles.
Does Telestream Cloud support multi-pass encoding?
Yes, 2 pass encoding is supported for presets and custom profiles.
I’m using a custom profile and my videos are not scaled
Make sure that your command include the $filters$
variable
Encoding has status fail. What does that mean?
If you have a failing encoding, make sure: * the original video is reachable. * the profile the encoding is using still exists
Check attributes error_class
and error_message
of the response
If the steps above are correct, then you should check the log file uploaded to your s3 bucket and see why the command has failed.
If you think your video should have been encoded correctly, please get in touch with support and give us the ID of this encoding.
How can I create Audio Encodings?
Telestream Cloud allows you to convert your audio files or video file into a new audio encoding. We provide some simple to use presets such as MP3, AAC or Ogg Vorbis. Creating an audio encoding profile using the Telestream Cloud Ruby Gem would look like this:
profile = TelestreamCloud::Profile.create!(
:name => 'aac',
:extname => '.m4a',
)
How can I adjust the speed of my video?
If you want to speed up or slow down your video (perhaps you are doing a Benny Hill'esque chase scene?) you can create a custom profile with an ffmpeg command value similar to this:
ffmpeg -i $input_file$ -vf "setpts=(1/<speed>)*PTS" $output_file$
Where speed is the desired speed of the video. Setting it to 1 would be the normal speed, 2 would be double speed, etc. A complete command using the Telestream Cloud Ruby Gem might look like this:
profile = TelestreamCloud::Profile.create!(
:name => 'DoubleTime',
:extname => '.mp4',
:command => 'ffmpeg -i $input_file$ -vf "setpts=(1/2)*PTS" $output_file$',
:title => 'DoubeTime'
)
Now, all of your videos will be encoded with a new double speed version.
How can I create a new encoding to an existing video?
If you want to add another profile and re-encode an existing video, this is the way to do it:
new_profile_name='xxx'
video_id= 'xxxx'
video=TelestreamCloud::Video.find video_id
puts "Adding one encoding to #{video.original_filename} using #{new_profile_name}..."
video.encodings.create!(:profile_name => new_profile_name)
What are Telestream Cloud’s Supported Video Formats?
Telestream Cloud supports encoding a wide variety of video formats. Some of the more popular video formats that we support are:
- Input: AAC, AVI, 3GP, FLV, MOV, MP3, MP4, MPEG, OGG, WAV, WEBM, WMA, WMV and many more.
- Output: AAC, AVI, FLV, MP3, MP4 (H.264), OGG, WEBM (VP8) any more output formats including iPhone segmented streaming are also supported.
A complete list of all supported video formats is avaiable here.
How can I remove the black bars around my videos?
If you see black bars around your videos it’s most likely because your profile’s aspect_mode is set to ‘letterbox’.
You can fix this by adjusting your profile. Just update the aspect_mode setting to 'constrain’ and say bye-bye to those pesky black bars.
Can I use a different notification url?
If you are integrating panda into your webapp with WebHooks enabled, you might want to have a different notification url for your Development, Staging and Production setup.
The best solution is to create a different Telestream Cloud Factory for each environment and set a different notification url.
Separating your environments with a different Factory is a Telestream Cloud best practice. It avoids any accidental operations on data in the wrong environment.
Errors
I’m getting an error code 404. What does this mean?
404 means Resource not found. You are trying to access to a resource which doesn’t exist. It can be a video, and encoding, a profile, a preset or trying to connect with a wrong Factory ID.
If you are posting a video, make sure you are not specifying a wrong profile Id
I’m getting an error code 417. What does this mean?
It means you are maybe using the flash uploader behind a proxy server.
I’m getting an error code 413. What does this mean?
It means you have reached the upload file size limit that is 150GB.
I’m getting an error code 401. What does this mean?
It means you sent a Bad request. At least one required parameters is missing. Check The API section and look at the required parameters. This is likely to be caused by the signature not being generated correctly.
I’m getting an error code 401 and I have an EU account using panda uploader. What does that mean?
EU and US use difference hosts. You should specify api_host : "api-eu-west.cloud.telestream.net"
.
Check the panda_uploader’s Documentation
Various
How can I restrict content to certain users?
Telestream Cloud uses Cloudfront to deliver content. As such, you can take advantage of Cloudfront’s access control measures to limit which users see your videos. To use this feature you should set your bucket to private, and then follow the instructions in the Amazon Documention to setup CloudFront to best suit your needs:
How can i play my videos in a private Factory?
If you have set your Telestream Cloud Factory to private, all your file will be uploaded to your s3 bucket with private access only:
(headers['x-amz-acl'] = 'private' )
That means that only you (S3 bucket owner) can generate a signed url, with your AWS Key/Secret pair, that temporarily grant access to your users for a certain amount of time. As this feature is not a Telestream Cloud but an S3 specific feature, we let you generate those Signed URL using the framework of your choice.
Using the Telestream Cloud Ruby Gem would look like this:
require 'fog'
require 'telestream_cloud'
# create a connection
connection = Fog::Storage.new({
:provider => 'AWS',
:aws_secret_access_key => YOUR_SECRET_ACCESS_KEY,
:aws_access_key_id => YOUR_SECRET_ACCESS_KEY_ID
})
# Get infos from telestream cloud
bucket = TelestreamCloud::Factory.all.first.s3_videos_bucket
video = TelestreamCloud::Video.find("your video id")
# Finally, get the signed url
expires_at = Time.now + (5 * 60)
signed_url = connection.directories.get(bucket).files.get_https_url(video_path, expires_at)
Why am I not receiving any WebHooks anymore?
If you don’t receive any webhooks, go the the Console page in your dashboard and see in realtime your notification activity.
You should see either a green or red log entry giving you more details about what is going on. Your controller might be failing or some authentication (Basic auth) might prevent your application to receive the notifications.
Can I transfer ownership to my own AWS account?
Amazon S3 doesn’t allow an account to change the ownership of a file.
If you want to change the owner inside your S3 Object ACL, the solution is the make a COPY of your files using your own AWS account. It is described here.
Can I switch to a different encoding provider?
For now you can use either AWS or Google Compute to encode your videos. You can choose between then AWS US, AWS EU and Google US.
For default, we are using AWS US for encoding. If you would like to encode in AWS EU or on Google US, please contact support and we will create a new factories for specific region.
Where is my Telestream Cloud Invoice?
When you sign up with Telestream Cloud, you should receive an email invoice at the email address you registered with. Always make sure to check your Spam / Junk email folders to make sure that your invoice hasn’t gone astray and wandered in there!
If, for some reason, your invoice appears to have completely disappeared on you, please open a support ticket and we will re-send the invoice(s) that you need.
How can I restrict content to certain users?
Telestream Cloud uses Cloudfront to deliver content. As such, you can take advantage of Cloudfront’s access control measures to limit which users see your videos.
To use this feature you should set your bucket to private, and then follow the instructions in the Amazon Documention to setup CloudFront to best suit your needs:
Can I stream MP4 by moving the MOOV atom?
If you are using our presets, we automatically move the MOOV atom to the beginning of your video files. This ensures your videos playback starts fast.
If you are using custom commands, you will need to apply qt-faststart on your files.
Using the Ruby gem:
TelestreamCloud::Profile.create!(
:stack => "corepack-2",
:name => "h264.SD",
:width => 480,
:height => 320,
:command => "ffmpeg -i $input_file$ -threads 0 -c:a libfaac -c:v libx264 -preset medium $video_quality$ $audio_bitrate$ $audio_sample_rate$ $keyframes$ $fps$ -y video_tmp_noqt.mp4\nqt-faststart video_tmp_noqt.mp4 $output_file$"
)
Note that we are first saving the video to a file named video_tmp_noqt.mp4. Then qt-faststart is run using the tmp video as input and outputting to your desired output_file.