Skip to content

Commit 70ec5b4

Browse files
committed
code refactored for async requests
1 parent 8a116a2 commit 70ec5b4

10 files changed

Lines changed: 462 additions & 227 deletions

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2+
3+
# dependencies
4+
/node_modules

Classes/TranscodingTask.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
const querystring = require('querystring');
2-
31
class TranscodingTask {
42

53
constructor(api, taskToken, uploadUrl){
@@ -13,7 +11,7 @@ class TranscodingTask {
1311
this.lastStatus
1412
}
1513

16-
Start(transcodingProfiles, uri, transferMethod = null, payload = null, OutputPathVariables = null){
14+
async Start(transcodingProfiles, uri, transferMethod = null, payload = null, OutputPathVariables = null){
1715

1816
if(Array.isArray(transcodingProfiles)){
1917
transcodingProfiles = transcodingProfiles.join();
@@ -50,14 +48,14 @@ class TranscodingTask {
5048
parameters.output_path_variables = JSON.stringify(OutputPathVariables);
5149
}
5250

53-
let response = this.api.Request("start_encode", parameters);
51+
let response = await this.api.Request("start_encode", parameters);
5452

5553
this.statusUrl = response.status_url;
5654

5755
return response;
5856
}
5957

60-
StartCustom(taskParams, payload = null){
58+
async StartCustom(taskParams, payload = null){
6159

6260
if(Array.isArray(taskParams.source)){
6361
taskParams.stitch = taskParams.source;
@@ -80,22 +78,25 @@ class TranscodingTask {
8078
return this._do_request("start_encode2", parameters);;
8179
}
8280

83-
_do_request(methodName, parameters){
84-
let response = this.api.Request(methodName, parameters);
81+
async _do_request(methodName, parameters){
82+
let response = await this.api.Request(methodName, parameters);
8583
this.statusUrl = response.status_url;
8684
return response;
8785
}
8886

89-
GetStatus(){
87+
async GetStatus(){
9088
let parameters = {
9189
"task_tokens[]": this.taskToken
9290
};
9391

94-
let response = this.api.Request("status", parameters, this.statusUrl);
92+
let response = await this.api.Request("status", parameters, this.statusUrl);
9593

9694
this.lastStatus = response.statuses[this.taskToken];
97-
98-
if(this.lastStatus.status_url){
95+
if (this.lastStatus == null) {
96+
this.statusUrl = this.api.url + this.api.version + "/status"
97+
return this.GetStatus()
98+
}
99+
if(this.lastStatus && this.lastStatus.status_url){
99100
this.statusUrl = this.lastStatus.status_url;
100101
}
101102

Examples/CustomEncodingExample.js

Lines changed: 88 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,91 @@
1-
const QencodeApiClient = require('qencode-api');
2-
3-
const apiKey = "your_api_key_here";
4-
const s3_path = "s3://s3-yourRegion.amazonaws.com/bucketname";
5-
const s3_key = "youS3Key";
6-
const s3_secret = "yourS3secret";
7-
8-
// using one video as a source
9-
// const videoUrl = "https://servername/folder/video.mp4";
10-
11-
// using several videos as a source for stitching
12-
const videoUrl = [
13-
"https://servername/folder/video1.mp4",
14-
"https://servername/folder/video2.mp4",
15-
{
16-
"url":"https://servername/folder/video3.mp4",
17-
"start_time":"0.01567",
18-
"duration":"0.575"
19-
}
20-
];
21-
22-
const payload = null;
23-
24-
let transcodingParams = {};
25-
transcodingParams.source = videoUrl;
26-
27-
let format = {};
28-
29-
format.destination = {};
30-
format.destination.url = s3_path;
31-
format.destination.key = s3_key;
32-
format.destination.secret = s3_secret;
33-
34-
format.output = "advanced_hls";
35-
36-
37-
let stream = {};
38-
stream.size = "1920x1080";
39-
stream.audio_bitrate = 128;
40-
41-
let vcodec_params = {};
42-
vcodec_params.vprofile = "baseline";
43-
vcodec_params.level = 31;
44-
vcodec_params.coder = 0;
45-
vcodec_params.flags2 = "-bpyramid+fastpskip-dct8x8";
46-
vcodec_params.partitions = "+parti8x8+parti4x4+partp8x8+partb8x8";
47-
vcodec_params.directpred = 2;
48-
49-
stream.video_codec_parameters = vcodec_params;
50-
51-
format.stream = [];
52-
format.stream.push(stream);
53-
54-
55-
transcodingParams.format = [];
56-
transcodingParams.format.push(format);
57-
58-
const qencodeApiClient = new QencodeApiClient(apiKey);
59-
console.log("AccessToken: ", qencodeApiClient.AccessToken);
60-
61-
let task = qencodeApiClient.CreateTask();
62-
console.log("Created new task: ", task.taskToken);
63-
64-
task.StartCustom(transcodingParams, payload);
65-
console.log("Status URL: ", task.statusUrl);
66-
67-
68-
CheckTaskStatus();
69-
70-
async function CheckTaskStatus(){
71-
while (task.GetStatus().status != "completed") {
72-
console.log(task.GetStatus().status);
73-
await sleep(10000);
1+
(async function () {
2+
3+
const QencodeApiClient = require('qencode-api');
4+
5+
const apiKey = "your_api_key_here";
6+
const s3_path = "s3://s3-yourRegion.amazonaws.com/bucketname";
7+
const s3_key = "youS3Key";
8+
const s3_secret = "yourS3secret";
9+
10+
// using one video as a source
11+
// const videoUrl = "https://servername/folder/video.mp4";
12+
13+
// using several videos as a source for stitching
14+
const videoUrl = [
15+
"https://servername/folder/video1.mp4",
16+
"https://servername/folder/video2.mp4",
17+
{
18+
"url":"https://servername/folder/video3.mp4",
19+
"start_time":"0.01567",
20+
"duration":"0.575"
21+
}
22+
];
23+
24+
const payload = null;
25+
26+
let transcodingParams = {};
27+
transcodingParams.source = videoUrl;
28+
29+
let format = {};
30+
31+
format.destination = {};
32+
format.destination.url = s3_path;
33+
format.destination.key = s3_key;
34+
format.destination.secret = s3_secret;
35+
36+
format.output = "advanced_hls";
37+
38+
39+
let stream = {};
40+
stream.size = "1920x1080";
41+
stream.audio_bitrate = 128;
42+
43+
let vcodec_params = {};
44+
vcodec_params.vprofile = "baseline";
45+
vcodec_params.level = 31;
46+
vcodec_params.coder = 0;
47+
vcodec_params.flags2 = "-bpyramid+fastpskip-dct8x8";
48+
vcodec_params.partitions = "+parti8x8+parti4x4+partp8x8+partb8x8";
49+
vcodec_params.directpred = 2;
50+
51+
stream.video_codec_parameters = vcodec_params;
52+
53+
format.stream = [];
54+
format.stream.push(stream);
55+
56+
57+
transcodingParams.format = [];
58+
transcodingParams.format.push(format);
59+
60+
const qencodeApiClient = await new QencodeApiClient(apiKey);
61+
console.log("AccessToken: ", qencodeApiClient.AccessToken);
62+
63+
let task = await qencodeApiClient.CreateTask();
64+
console.log("Created new task: ", task.taskToken);
65+
66+
await task.StartCustom(transcodingParams, payload);
67+
console.log("Status URL: ", task.statusUrl);
68+
69+
70+
// example on how to get status
71+
CheckTaskStatus();
72+
73+
async function CheckTaskStatus(){
74+
let statusObject = await task.GetStatus()
75+
let status = statusObject.status
76+
while (status != "completed") {
77+
statusObject = await task.GetStatus()
78+
status = statusObject.status;
79+
progress = statusObject.percent;
80+
console.log(`task: ${task.taskToken} | status: ${status} | progress: ${progress}`);
81+
await sleep(10000);
82+
}
7483
}
75-
console.log(task.GetStatus().status);
76-
}
77-
78-
function sleep(ms){
79-
return new Promise(resolve=>{
84+
85+
function sleep(ms){
86+
return new Promise(resolve=>{
8087
setTimeout(resolve,ms)
8188
})
82-
}
89+
}
90+
91+
})();

Examples/CustomEncodingJSONExample.js

Lines changed: 58 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,63 @@
1-
const QencodeApiClient = require('qencode-api');
2-
3-
const apiKey = "your_api_key_here";
4-
5-
const payload = null;
6-
7-
let transcodingParams = {
8-
"source": [
9-
"https://servername/folder/video1.mp4",
10-
"https://servername/folder/video1.mp4",
1+
(async function () {
2+
3+
const QencodeApiClient = require('qencode-api');
4+
5+
const apiKey = "your_api_key_here";
6+
7+
const payload = null;
8+
9+
let transcodingParams = {
10+
"source": [
11+
"https://servername/folder/video1.mp4",
12+
"https://servername/folder/video1.mp4",
13+
{
14+
"url":"https://servername/folder/video1.mp4",
15+
"start_time":"0.01567",
16+
"duration":"0.575"
17+
}
18+
],
19+
"format": [
1120
{
12-
"url":"https://servername/folder/video1.mp4",
13-
"start_time":"0.01567",
14-
"duration":"0.575"
21+
"output": "mp4",
22+
"size": "320x240",
23+
"video_codec": "libx264"
1524
}
16-
],
17-
"format": [
18-
{
19-
"output": "mp4",
20-
"size": "320x240",
21-
"video_codec": "libx264"
25+
]
26+
};
27+
28+
29+
30+
const qencodeApiClient = await new QencodeApiClient(apiKey);
31+
console.log("AccessToken: ", qencodeApiClient.AccessToken);
32+
33+
let task = await qencodeApiClient.CreateTask();
34+
console.log("Created new task: ", task.taskToken);
35+
36+
await task.StartCustom(transcodingParams, payload);
37+
console.log("Status URL: ", task.statusUrl);
38+
39+
40+
// example on how to get status
41+
CheckTaskStatus();
42+
43+
async function CheckTaskStatus(){
44+
let statusObject = await task.GetStatus()
45+
let status = statusObject.status
46+
while (status != "completed") {
47+
statusObject = await task.GetStatus()
48+
status = statusObject.status;
49+
progress = statusObject.percent;
50+
console.log(`task: ${task.taskToken} | status: ${status} | progress: ${progress}`);
51+
await sleep(10000);
2252
}
23-
]
24-
};
25-
26-
27-
28-
const qencodeApiClient = new QencodeApiClient(apiKey);
29-
console.log("AccessToken: ", qencodeApiClient.AccessToken);
30-
31-
let task = qencodeApiClient.CreateTask();
32-
console.log("Created new task: ", task.taskToken);
33-
34-
task.StartCustom(transcodingParams, payload);
35-
console.log("Status URL: ", task.statusUrl);
36-
37-
38-
CheckTaskStatus();
53+
}
54+
55+
function sleep(ms){
56+
return new Promise(resolve=>{
57+
setTimeout(resolve,ms)
58+
})
59+
}
60+
3961

40-
async function CheckTaskStatus(){
41-
while (task.GetStatus().status != "completed") {
42-
console.log(task.GetStatus().status);
43-
await sleep(5000);
44-
}
45-
console.log(task.GetStatus().status);
46-
}
62+
})();
4763

48-
function sleep(ms){
49-
return new Promise(resolve=>{
50-
setTimeout(resolve,ms)
51-
})
52-
}

Examples/GetStatus.js

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
1-
const QencodeApiClient = require('qencode-api');
1+
(async function () {
22

3-
const apiKey = "your_api_key_here";
4-
const taskToken = "your_job_id_here";
3+
const QencodeApiClient = require('qencode-api');
54

6-
let parameters = {
7-
"task_tokens[]": taskToken
8-
};
5+
const apiKey = "your_api_key_here";
6+
const taskToken = "your_job_id_here";
97

10-
const qencodeApiClient = new QencodeApiClient(apiKey);
11-
let response = qencodeApiClient.Request("status", parameters, qencodeApiClient.url + '/v1/status');
8+
let parameters = {
9+
"task_tokens[]": taskToken
10+
};
1211

13-
let status = response.statuses[taskToken];
12+
const qencodeApiClient = await new QencodeApiClient(apiKey);
13+
14+
let response = await qencodeApiClient.Request("status", parameters, qencodeApiClient.url + '/v1/status');
15+
16+
let status = response.statuses[taskToken];
1417

15-
console.log(status);
18+
console.log("status: ", status)
19+
20+
})();

0 commit comments

Comments
 (0)