本文为您介绍如何集成小程序上传 SDK,支持微信小程序、抖音小程序。
此文档适用于小程序上传 SDK 2.0.0 及以上的版本。其他版本请参考历史版本小程序上传 SDK。
上传前需要从服务端获取上传临时安全凭证 UploadAuthToken
。为方便您的使用,视频点播服务端 SDK 对 UploadAuthToken
的签发进行了封装,详见以下文档:
注意
由于签名计算放在前端会暴露 AccessKey 和 SecretKey,我们把签名计算过程放在后端实现。实现的方式如下:
将网关地址和上传地址添加到小程序的访问白名单中。
request 合法域名:
https://vod.volcengineapi.com https://mcs.zijieapi.com https://tob-upload-x.volcvod.com https://tob-upload-y.volcvod.com https://tob-upload-x-d.volcvod.com https://tob-upload-y-d.volcvod.com https://tob-upload-sinfonline.volcvod.com https://tob-upload-sinfonlinea.volcvod.com https://tob-upload-sinfonlinec.volcvod.com https://tob-upload-sinfonline-d.volcvod.com https://tob-upload-sinfonlinea-d.volcvod.com https://tob-upload-sinfonlinec-d.volcvod.com
截图示例如下所示:
uploadFile 合法域名:
https://tob-upload-x.volcvod.com https://tob-upload-y.volcvod.com https://tob-upload-x-d.volcvod.com https://tob-upload-y-d.volcvod.com https://tob-upload-sinfonline.volcvod.com https://tob-upload-sinfonlinea.volcvod.com https://tob-upload-sinfonlinec.volcvod.com https://tob-upload-sinfonline-d.volcvod.com https://tob-upload-sinfonlinea-d.volcvod.com https://tob-upload-sinfonlinec-d.volcvod.com
截图示例如下所示:
npm install tt-uploader-miniprogram
import TTUploader from 'tt-uploader-miniprogram'; // 1. 初始化 uploader const uploader = new TTUploader({ userId: 'volcengine-user1', //建议设置能识别用户的唯一标识 ID,用于上传出错时排查问题,不要传入非 ASCII 编码。 appId: 8888, //在视频点播控制台应用管理中创建的 AppID,视频点播的质量监控等都是以这个参数来区分业务方的,务必正确填写。 videoConfig: { spaceName: 'your spaceName' //在视频点播中创建的点播空间名。 } }); // 2. 设置监听事件 uploader.on('error', (info) => { console.log('上传失败', info) }) uploader.on('progress', (infor) => { console.log('上传进度:', infor.percent) }); uploader.on('complete', (info) => { console.log('上传成功', info) }) // 3. 添加上传文件 const key = uploader.addFile({ path: '', // 文件临时路径,从 chooseMedia 回调中获取。 size: 1234, // 文件大小,从 chooseMedia 回调中获取。 // 从服务端获取到的签名 token,见上方【获取上传签名说明】说明 stsToken: { "CurrentTime":"2023-03-31T07:47:14.866Z", "ExpiredTime":"2023-05-30T07:47:14.866Z", "SessionToken":"STS2eyJU******MTlmZWEzNzBlNWQ4ZmU3NjAwMTljIn0=", "AccessKeyId":"AKTPZDM1ODg3MG******zODEyYmZiNTU5ODg", "SecretAccessKey":"aNXEA8uvCBF7tqtoolAxJ******l7KTZcaxyOWQbuPqg==" }, type : 'media', // 上传文件类型,三个可选值:(默认值)media(视频或者音频),image(图片),object(普通文件) }); // 4. 开始上传 uploader.start(key)
初始化 uploader
实例时,可配置的属性如下,示例如下:
const uploader = new TTUploader({ userId: 'xxx', appId: 8888, //视频/普通文件上传必传字段 videoConfig: { spaceName: 'your space name' }, useFileExtension: true, uploadTimeout: 1000 * 60 * 30, gatewayTimeout: 1000 * 60 * 5 });
详细的参数说明如下表所示。
参数 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
userId | String | 是 | null | 用户 ID。用于进行单点追踪日志,定位某一个用户的日志,请设置一个唯一 ID。 |
appId | Number | 是 | null | 应用 ID。用于定位某一条业务线的日志。 |
videoConfig | Object | 是 | null | 点播上传(视频/文件)专用配置。具体请参见下方videoConfig 详细参数说明。 |
useFileExtension | Boolean | 否 |
| 是否使用文件扩展名作为存储 URI 的后缀。 说明 小程序上传 SDK 根据文件路径自动截取文件后缀。 |
uploadTimeout | Number | 否 | 30min | 上传文件请求的超时时间,单位为 ms。示例为 |
gatewayTimeout | Number | 否 | 5min | 网关请求的超时时间,单位为 ms。示例为 |
videoConfig 详细参数说明如下表所示:
参数 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
spaceName | String | 是 | null | 空间名,在视频点播控制台中创建。 |
添加视频文件,传入的 fileOption 配置如下表所示。
参数 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
path | String | 是 | null | 上传的文件的临时路径。 |
size | Number | 是 | null | 上传文件的大小。 |
stsToken | Object | 是 | null | 上传签名。 |
type | String | 否 |
| 上传文件类型。可选值如下:
|
callbackArgs | String | 否 | null | 回调时回传给用户,用于客户端上传时,您希望透传客户端的一些信息。 |
fileName | String | 否 | null | 文件路径。要求带上文件后缀。详细规则,具体请参见服务端ApplyUploadInfo 请求参数中的 |
fileExtension | String | 否 | null | 文件后缀名,用户传后缀时,文件名添加此后缀。 (以. 开头,不超过8位,与 FileName 互斥) |
storageClass | Number | 否 |
| 存储类型。取值如下:
|
processAction | Array of processAction | 否 | null | 视频/文件上传后的处理 Action 对象,类型是一个数组,有多个处理请求时可以配置多个动作对象。对象中的 Input 会被透传到对应的处理服务中。 |
Action 对象的结构如下表所示。
参数 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
Name | String | 是 | 无 | action 名称 |
Input | Object | 否 | 无 | action 输入 |
processAction 目前支持的 action 如下表所示。
action 名称 | action 输入 | 描述 | 返回上传结果 |
---|---|---|---|
GetMeta | void | 获取 Meta 信息。
| VideoMeta/ObjectMeta |
StartWorkflow | 触发工作流。 | void | |
Snapshot | 截图功能。默认抽第一帧,可以指定视频时间点抽帧做封面图。 | PosterUri,封面截图 Uri | |
AddOptionInfo | 添加媒资信息功能信息。 | void |
各个 action 的输入参数如下表所示。
StartWorkflowInput
参数 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
TemplateId | String | 是 | 无 | 工作流模板 ID,从视频点播控制台配置并获取。 |
SnapshotInput
参数 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
SnapshotTime | Float | 是 | 无 | 截图时间 |
AddOptionInfoInput
参数 | 类型 | 是否必传 | 默认值 | 描述 |
---|---|---|---|---|
Title | String | 否 | 无 | 标题 |
Tags | String | 否 | 无 | 多个标签可用逗号隔开 |
Description | String | 否 | 无 | 描述信息 |
RecordType | Int | 否 |
| 上传类型。取值如下:
音视频和素材的定义详见媒资上传概述。 |
Category | String | 否 | 无 | 分类信息。 说明 当 可选值如下:
|
Format | String | 否 | 无 | 格式。 说明
|
ClassificationId | int64 | 否 | 无 | 分类 ID。获取方式如下:
注意 素材不支持分类。 |
addFile
方法中 type
参数的取值和 Category
对应关系如下表所示。
type 取值 | 类型 | 对应 Category 取值 |
---|---|---|
media | String | video、audio |
image | String | image、dynamic_img |
object | String | subtitle、font |
该方法返回当前文件的 key 值时,在上传和取消上使用,代码示例如下所示:
const key = uploader.addFile({ file: file, // 上传的文件对象 stsToken: {}, type: 'media', processAction: [ { Name: 'GetMeta' }, { Name: 'Snapshot', Input: { SnapshotTime: 2 } } ] }); console.log(key); // file_1495442273603_999031 (类似格式)
启动上传任务。如果该上传任务被暂停,则再次调用此方法时将恢复上传。传入文件的 key 值,如果不传参数,则所有已添加的文件将开始上传。
uploader.start();
暂停上传,将暂存当前文件的上传信息。传入文件的 key 值,如果不传参数,则将暂停所有文件的上传。
uploader.pause('file_1495442273603_999031');
恢复上传,将恢复当前被暂停的上传任务。传入文件的 key 值,如果不传参数,则将恢复所有文件的上传。
uploader.restart();
取消某一文件的上传,同时删除暂存的上传信息。传入文件的 key 值,如果不传参数,则将取消所有文件的上传。
uploader.cancel();
在文件上传的过程中,小程序上传 SDK 会依次抛出各类事件以通知外部,您可根据业务需要监听这些事件,事件名称和事件描述如下表所示:
事件名称 | 事件描述 |
---|---|
progress | 文件上传过程中会多次触发,可用于标识文件上传进度。详见 progress 事件。 |
complete | 文件上传成功时触发,标识一个上传任务结束。详见 complete 事件。 |
error | 上传失败、发生错误时触发。详见 error 事件。 |
// 监听事件 uploader.on('progress', function(info) { console.log('上传进度:', info.percent); }); uploader.on('complete', function(info) { console.log('上传成功:', info); }); uploader.on('error', function(info) { console.error('上传失败:', info); });
progress
事件回调的参数如下所示:
属性 | 类型 | 描述 |
---|---|---|
percent | Number | 整体上传进度。单位为百分比。取值范围为 [0, 99],为整数。 说明 当 |
totalSize | Number | 上传文件的总体大小,单位为 byte。 |
sentSize | Number | 此时已发送的字节数,单位为 byte。 |
key | String | 标识本次上传任务的字符串,由 |
oid | String | 文件存储的 URI(统一资源标识符)。 |
sliceIndex | Number | 可选,在分片上传的场景下,标识此索引的分片上传完成。 |
uploadId | String | 可选,在分片上传的场景下,标识此次上传的唯一 ID。 |
complete
事件回调的参数如下所示:
属性 | 类型 | 描述 |
---|---|---|
filePath | String | 文件在本地的临时路径。 |
fileSize | Number | 文件大小,单位为 byte。 |
startTime | Number | 文件开始上传的时间戳。 |
totalDuration | Number | 上传总体耗时,单位为 ms。 |
key | String | 当前上传任务的 key。 说明
|
oid | String | 文件存储的 URI。 |
percent | Number | 当前上传总体进度百分比。 |
speed | Number | 文件上传的平均速度,单位为 kb/s。 |
status | Number | 文件上传运行状态。取值如下:
|
type | 'success' | 'error'
|
uploadId | String | 可选,本次上传所使用的uploadId |
extra | Object | 当前状态的描述(随着生命周期不断变化) |
extra.message | String | 描述性信息。 |
uploadResult | Object | 上传成功之后返回的音视频 Meta 信息,封面信息等。详见属性详细说明 uploadResult。 |
uploadResult 属性详细说明如下:
对于视频上传的返回结果,默认情况下只会返回 Vid,如果想获取详细的视频 meta 信息、封面图,请在上传时添加配置。
属性 | 类型 | 描述 |
---|---|---|
Vid | String | 视频 ID,vid 是视频在视频架构中的唯一 ID。 |
PosterUri | String | 封面图 uri,当添加有截取封面信息的配置时返回。 |
SourceInfo | Object | 视频源信息。 |
SourceInfo.Bitrate | Number | 视频码率,单位:Kbps。 |
SourceInfo.Duration | Number | 视频时长,单位:秒。 |
SourceInfo.FileType | String | 文件类型。取值如下:
|
SourceInfo.Format | String | 文件格式。 |
SourceInfo.Fps | Number | 帧率。 |
SourceInfo.Height | Number | 视频高度,单位为 px。 |
SourceInfo.Width | Number | 视频宽度,单位为 px。 |
SourceInfo.Size | Number | 视频文件大小,单位为 byte。 |
SourceInfo.StoreUri | String | 视频源文件在 TOS 存储桶中的 URI。 注意 获取视频播放地址请不要使用这种方式访问。 |
SourceInfo.Md5 | String | 视频文件 md5 值。 |
SourceInfo.TosStorageClass | String | 文件在对象存储中的存储类型。 |
SourceInfo.VideoStreamMeta | Object | 视频流 meta 信息,当添加有获取 meta 信息的配置时返回。 |
VideoStreamMeta.Duration | Number | 视频时长,单位:秒。 |
VideoStreamMeta.Width | Number | 视频宽度,单位为 px。 |
VideoStreamMeta.Height | Number | 视频高度,单位为 px。 |
VideoStreamMeta.Codec | String | 视频编码格式。 |
VideoStreamMeta.Bitrate | Number | 视频流码率,单位:kbps |
VideoStreamMeta.Definition | String | 视频清晰度。 |
VideoStreamMeta.Fps | Number | 视频流帧率。 |
AudioStreamMeta | Object | 音频流 meta 信息 |
AudioStreamMeta.Code | String | 音频编码格式。 |
AudioStreamMeta.Duration | Number | 音频时长,单位:秒。 |
AudioStreamMeta.SampleRate | Number | 音频采样率。 |
AudioStreamMeta.Bitrate | Number | 音频码率,单位:Kbps |
AudioStreamMeta.Quality | String | 音频质量。 |
属性 | 类型 | 描述 |
---|---|---|
Uri | String | 源文件在 TOS 存储桶中的 URI,格式为 |
ObjectMeta | Object | 文件 meta 信息,当添加有获取 meta 信息的配置时返回。 |
ObjectMeta.Md5 | String | 文件 md5 值。 |
ObjectMeta.Uri | String | 与上层中的 Uri 一致。 |
error 事件回调的参数如下所示:
属性 | 类型 | 描述 |
---|---|---|
key | String | 标识本次上传任务的字符串,由 addFile 方法返回 |
code | Number | 错误码,包含小程序原生的错误码 |
error | String | 具体错误,包含小程序原生的错误信息 |
message | String | 错误描述信息 |
type | String | 事件类型,固定为 |
stage | Number | 上传任务发生错误的阶段 |
statusCode | Number | 可选,网络请求的状态码 |
oid | String | 可选,文件的 URI。 |
uploadId | String | 可选,唯一的上传 ID。 |
详见上传 SDK 错误码。