JS SDK使用

创建实例

let option = {
    appId:"xxx",
    accountId:"xxx",
    token:"xxx",
}
let vodupload = null;
VhallUpload.createInstance(option,(res) => {
    vodupload = res.interface;
},err=>{
    console.error(err);
});

// async 用法
try {
  const res = await VhallUpload.createInstance(option);
  vodupload = res.interface;
} catch (e) {
  console.error(err);
}

销毁实例

vodupload.destroy();

文件上传(视频文件、字幕文件)

注意,使用此种方式,文件不管成功失败,都会在上传队列中,需要对对列进行管理

// 文件列表 例如:[file,file,file]
// 文件格式为'rmvb', 'mp4', 'avi', 'wmv', 'mkv', 'flv', 'mp3', 'wav', 'mov', 'SRT' (大小写后缀无关)

const fileList = [];
// 添加文件到任务列表
// 注意,add添加到任务列表中默认是暂停状态的
// 所以需要先调用 vodupload.resume() 再 add
try {
  vodupload.add({ files: filesArr });
} catch(e) {
  // 文件格式不支持 / 有重复文件等错误
  console.error(e);
}
// 开始 / 恢复上传队列
vodupload.resume();
// 暂停上传队列
vodupload.pause();
// 暂停单个文件上传
vodupload.pauseTask(task);
// 暂停多个文件上传
vodupload.pauseTask([task, task]);
// 恢复单个文件上传
vodupload.resumeTask(task);
// 恢复多个文件上传
vodupload.resumeTask([task, task]);
// 移除单个文件上传
vodupload.remove(task);
// 返回所有文件上传任务的列表
const tasks = vodupload.tasks();
// task.status // 0-待上传/上传中 1-成功 3-失败
// task.quickUpload // 是否秒传,仅在task.status为1的时候有效
// task.isPause // 是否被暂停
// task.size // 文件大小
// task.filename // 文件名
// task.file // 上传的文件
// task.fileType // 文件类型 0-视频 1-字幕
// task.result // 上传成功的结果保存
// task.error // 抛出的错误
// task.progress // 进度

文件上传(不使用队列)

此种上传,sdk不会抛出事件,只会执行回调 少量文件上传建议使用此方式,省去管理队列的麻烦

// 选择文件
var opt = {multiple:true,types:[{accept:{'*/*':['.srt'],'video/*':['.mp4','.avi']}}]}
var handles = await showOpenFilePicker(opt)
var files = await Promise.all(handles.map(i => i.getFile()))

// 上传
vodupload.upload(files, t=>console.log(`[${t.filename}] 进度: ${t.progress}` ), t=>console.log('成功: ', t.filename, t.result), ()=>console.log('失败'))

创建点播

let param = {
    file:new File(),   // 文件对象
    fileName:"",   // 新的文件名    *命名规则为 字母数字下划线中文
    is_safe: 0 // // 是否加密,0为不加密,1为加密,默认为0。
}

let success = function(res){
    console.log(res.recordId); // 创建成功,返回点播recordId
}

let failure = function(err){
    console.log(err); // 创建失败,返回失败信息
}
vodupload.createDemand(param,success,failure);
  • 创建点播的文件必须保证已经上传成功。
  • 已创建点播后,切勿删除上传文件,以免导致播放失败。

创建字幕(关联字幕到点播)

let param = {
    vodId, // 点播视频id,必填
    url, // 上传文件后返回的filePath,必填
    lang, // 语言的标识符 (例如zh,en),选填
    isDefault: true // 是否是默认字幕
}
let success = function(res){
    console.log(res);
}
let failure = function(err){
}
vodupload.createSubtitle(param,success,failure);

删除上传文件 (仅移除中间文件,不会删除已创建的点播)

let param = {
    file:new File()   // 文件对象
}
let success = function(res){
    console.log(res);
}
let failure = function(err){
    console.log(err);
}
interface.deleteFile(param,success,failure);

上传事件使用

function progress (e) {
  console.log('上传进度', e);
}
vodupload.on(VhallUpload.EVENT.FILE_UPLOAD_PROGRESS, progress);
// 取消监听
vodupload.off(VhallUpload.EVENT.FILE_UPLOAD_PROGRESS, progress);

上传事件

事件 含义 触发条件 参数结构
VhallUpload.EVENT.FILE_UPLOAD_SUCCESS 文件上传成功 文件上传成功时 参考下文
VhallUpload.EVENT.FILE_UPLOAD_PROGRESS 文件上传进度 文件上传进度更新时 参考下文
VhallUpload.EVENT.FILE_UPLOAD_FAIL 文件上传失败 文件上传失败,网络原因及其他 参考下文
VhallUpload.EVENT.UPLOAD_TASK_DRAIN 上传所有文件完成 上传队列中可上传文件传输完成时 参考下文

事件数据结构

// FILE_UPLOAD_SUCCESS
{
  name: '文件名.mp4', // 文件名
  file: File, // 文件
  id: 11, // 任务id
  index: index,
  filePath: '/dddd/xxx/aa', // 上传结果的路径
  filetype: 0, // 文件类型 0-视频 1-字幕
  quickUpload: false, // 是否秒传
  status: 0, // 0-未上传/上传中 1-成功 3-失败
  size: 213423, // 文件大小
  task: task, // 上传任务实例
  msg: '文件上传成功'
}

// FILE_UPLOAD_FAIL
{
  name: '文件名.mp4', // 文件名
  file: File, // 文件
  id: 11, // 任务id
  index: index,
  filetype: 0, // 文件类型 0-视频 1-字幕
  status: 0, // 0-未上传/上传中 1-成功 3-失败
  size: 213423, // 文件大小
  task: task, // 上传任务实例
  progress: 0.83233 // 进度
}

// FILE_UPLOAD_FAIL
{
  name: '文件名.mp4', // 文件名
  file: File, // 文件
  id: 11, // 任务id
  index: index,
  filetype: 0, // 文件类型 0-视频 1-字幕
  status: 0, // 0-未上传/上传中 1-成功 3-失败
  size: 213423, // 文件大小
  task: task, // 上传任务单个文件上传实例
  msg: '网络错误'
}