ks3
Version:
本代码库为`金山云存储KS3`服务.主要提供`KS3 nodejs SDK`和`命令行工具`.
158 lines (135 loc) • 6.32 kB
JavaScript
/* 测试异步数据处理相关操作 */
var KS3 = require('..');
var should = require('should');
require('should-http');
var path = require('path');
var fs = require('fs');
var request = require('request');
var config = require('../config');
var xml2json = require("../lib/util").xml2json;
var debug = require('debug')('adptest');
const { ak, sk, bucketName } = require('./config')
describe.skip('Asynchronous Data Processing', function () {
var client = new KS3(ak, sk, bucketName);
describe('Upload Trigger Processing', function () {
it('avscrnshot: put a video and trigger a screen shot', function (done) {
this.timeout(300000);
var key = 'a.mp4';
var resultKey = 'screenshot_a.png';
var filePath = path.join(__dirname, './assets/' + key);
client.object.put({
Bucket: bucketName,
Key: key,
filePath: filePath,
headers: {
'kss-async-process': 'tag=avscrnshot&ss=1&res=640x360&&rotate=90|tag=saveas&bucket=' + bucketName + '&object=' + Buffer.from(resultKey).toString('base64'),
'kss-notifyurl': 'http://10.4.2.38:19090/'
}
},
function (err, data, res) {
// should.not.exist(err);
// res.should.have.status(200);
//console.log(JSON.stringify(res));
//下载视频截图图片到assets目录
setTimeout(getAdpResult, 2000);
function getAdpResult() {
client.object.get({
Bucket: bucketName,
Key: resultKey
}, function (err, data, res, originData) {
var newFileName = path.join(__dirname, 'assets/' + resultKey);
fs.writeFileSync(newFileName, originData);
should.not.exist(err);
done();
});
}
});
});
it('avop : encode a video to flv format', function (done) {
//设置超时时间
this.timeout(30000);
var key = 'a.mp4';
var resultVideoName = key.split('.')[0] + '1.flv';
client.object.put({
Bucket: bucketName,
Key: key,
subResource:'adp',
isNoContent: true,
headers: {
'kss-async-process': 'tag=avop&f=flv&res=x480&as=1&vbr=128k|tag=saveas&bucket=' + bucketName + '&object=' + Buffer.from(resultVideoName).toString('base64'),
'kss-notifyurl': 'http://10.4.2.38:19090/'
}
},
function (err, data, res) {
should.not.exist(err);
res.should.have.status(200);
//通过HEAD请求验证转码后的flv文件是否存在
setTimeout(headAdpResult, 6000);
function headAdpResult() {
client.object.head({
Key: resultVideoName
},
function(err, data, res) {
should.not.exist(err);
res.should.have.status(200);
done();
}
);
}
});
});
////视频切片
it('avm3u8 : convert a video to HTTP Live Streaming format', function (done) {
var key = 'a.mp4';
var resultVideoName = 'video/a.m3u8';
this.timeout(30000);
client.object.put({
Bucket: bucketName,
Key: key,
subResource:'adp',
isNoContent: true,
headers: {
'kss-async-process': 'tag=avm3u8&segtime=2|tag=saveas&bucket=' + bucketName + '&object=' + Buffer.from(resultVideoName).toString('base64'),
'kss-notifyurl': 'http://10.4.2.38:19090/'
}
},
function (err, data, res) {
should.not.exist(err);
res.should.have.status(200);
var taskid = res.headers.taskid;
//等10s转换时间
setTimeout(getAVInfo, 10000);
//通过queryadp获取生成的文件的元数据验证处理是否成功
function getAVInfo() {
var uri = config.protocol + '://' + config.baseUrl + '/' + taskid + '?queryadp&tag=avinfo';
var headers = {
'User-Agent': config.ua
};
var data = {
headers: headers,
method: 'GET',
timeout: 1000 * 60 * 60
}
request.request(uri, data, function(err, result, res) {
should.not.exist(err);
res.should.have.status(200);
var data = '';
if ( !!result) {
var dataStr = result.toString();
data = dataStr;
dataStr = dataStr.replace(/\s\w+\:\w+=\"\S+\"/g, '');
var json = xml2json.parser(dataStr,'notifystatus,notifydesc', 'html');
data = json;
debug('res:' + JSON.stringify(data));
data.indexOf('task is process success').should.greaterThan(-1);
data.indexOf('<![CDATA[success]]>').should.greaterThan(-1);
done();
}
});
}
});
});
});
after(function () {
});
});