Skip to content

Commit 3a83f25

Browse files
committed
Added DirectUploadWithPython sample
1 parent 929bde8 commit 3a83f25

3 files changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
const fs = require("fs");
2+
const tus = require('tus-js-client');
3+
const QencodeApiClient = require('qencode-api');
4+
5+
let path = '/path/to/your/local/video.mp4';
6+
//var file = fs.createReadStream(path);
7+
var size = fs.statSync(path).size;
8+
9+
const apiKey = "your-API-key-here";
10+
11+
const qencodeApiClient = new QencodeApiClient({key: apiKey, endpoint: 'https://api.qencode.com'});
12+
console.log("AccessToken: ", qencodeApiClient.AccessToken);
13+
14+
let task = qencodeApiClient.CreateTask();
15+
console.log("Created new task: ", task.taskToken);
16+
console.log("Upload URL: ", task.uploadUrl);
17+
console.log("Upload size, bytes: ", size);
18+
19+
var chunkSize = get_chunk_size(size);
20+
var uploadUrl = task.uploadUrl + '/' + task.taskToken;
21+
const { exec } = require("child_process");
22+
23+
exec(`python ./upload.py ${path} ${uploadUrl} ${chunkSize}`, (error, stdout, stderr) => {
24+
if (error) {
25+
console.log(`error: ${error.message}`);
26+
return;
27+
}
28+
if (stderr) {
29+
console.log(`stderr: ${stderr}`);
30+
return;
31+
}
32+
console.log(`stdout: ${stdout}`);
33+
launch_transcoding(stdout, task);
34+
});
35+
36+
37+
function get_chunk_size(size) {
38+
chunk_size = Math.round(size / 30);
39+
var min_size = 200000;
40+
var max_size = 104857600;
41+
if (chunk_size < min_size) {
42+
chunk_size = min_size;
43+
} else {
44+
if (chunk_size > max_size) {
45+
chunk_size = max_size;
46+
}
47+
}
48+
return chunk_size;
49+
}
50+
51+
function launch_transcoding(source_uri, task) {
52+
let transcodingParams = {
53+
"source": source_uri,
54+
"format": [
55+
{
56+
"output": "mp4",
57+
"size": "320x240",
58+
"video_codec": "libx264"
59+
}
60+
]
61+
};
62+
var payload = 'Direct upload from NodeJS with Python test';
63+
task.StartCustom(transcodingParams, payload);
64+
console.log("Status URL: ", task.statusUrl);
65+
66+
CheckTaskStatus();
67+
}
68+
69+
async function CheckTaskStatus(){
70+
while (task.GetStatus().status != "completed") {
71+
console.log("Status: ", task.GetStatus().status);
72+
await sleep(5000);
73+
}
74+
console.log('Done');
75+
}
76+
77+
function sleep(ms){
78+
return new Promise(resolve=>{
79+
setTimeout(resolve,ms)
80+
})
81+
}
82+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
There's currently an issue in tus-js-client code, preventing it from working properly on server side.
2+
3+
To workaround it, you can use this sample nodejs app using a python helper to perform a direct upload.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import sys
2+
from qencode import QencodeClientException, QencodeTaskException, tus_uploader
3+
4+
path = sys.argv[1]
5+
upload_url = sys.argv[2]
6+
chunk_size = sys.argv[3]
7+
8+
uploadedFile = tus_uploader.upload(file_path=path, url=upload_url, log_func=None, chunk_size=chunk_size)
9+
print uploadedFile.url

0 commit comments

Comments
 (0)