本文为您介绍如何使用视频点播服务端 Node.js SDK 将音频、视频、图片等媒资文件上传至视频点播服务。
媒资上传到视频点播中会产生存储费用,具体参见媒资存储计费。
视频点播服务端 SDK 封装了 ApplyUploadInfo - 获取上传地址和凭证和 CommitUploadInfo - 确认上传接口以及上传逻辑,您只需简单配置即可进行上传。
说明
const uploadMedia = async () => { try { const options = { SpaceName: "your target space name", // 空间名 FilePath: "your file path", // 绝对路径 FileName: "your target storage path", // 文件路径(可选)。您可根据业务需求自定义文件路径。设置 FileName, 当 FileName 相同时,有文件覆盖的风险;需要保证 FileName 不同。 FileExtension: "your file extension", // 文件后缀(可选)。以.开头,不超过 8 位。当您传入 FileExtension 时,不需要重复传入FileName 参数,视频点播将生成 32 位随机字符串,和您传入的 FileExtension 共同拼接成文件路径。 Functions: JSON.stringify([ { Name: "GetMeta" }, { Name: "Snapshot", Input: { SnapshotTime: 2.3, }, }, ]), CallbackArgs: "your callbackArgs" }; const res = await vodOpenapiService.UploadMedia(options); // do your work // ... } catch (err) { console.log(err); } };
视频点播服务端 SDK 封装了 URL 批量拉取上传接口,您只需简单配置即可进行上传。完整的上传流程请见服务端上传。
说明
const uploadMediaByUrl = async () => { try { const options = { SpaceName: "your space name", URLSets: [ { SourceUrl: "http://demourl/test1.mp4", FileName: "movie/test1.mp4", // 文件路径(可选)。设置 FileName, 当 FileName 相同时,有文件覆盖的风险;需要保证 FileName 不同。 FileExtension: ".mp4", // 文件后缀(可选)。以 . 开头,不超过 8 位。当您传入 FileExtension 时,不需要重复传入 FileName 参数,视频点播将生成 32 位随机字符串,和您传入的 FileExtension 共同拼接成文件路径。 }, { SourceUrl: "http://demourl/test2.mp4", FileName: "cartoon/test1.mp4", }, ], }; const res = await vodOpenapiService.UploadMediaByUrl(options); // do your work // ... } catch (err) { console.log(err); } };
const uploadMaterial = async () => { try { const options = { SpaceName: "your target space name", // 空间名 Content: "your file content", // 文件可读流 FileSize: "your file size", // 文件大小 FileName: "your target storage path", // 文件路径(可选)。您可根据业务需求自定义文件路径。设置 FileName, 当 FileName 相同时,有文件覆盖的风险;需要保证 FileName 不同。 FileExtension: "your file extension", // 文件后缀(可选)。以.开头,不超过 8 位。当您传入 FileExtension 时,不需要重复传入FileName 参数,视频点播将生成 32 位随机字符串,和您传入的 FileExtension 共同拼接成文件路径。 Functions: JSON.stringify([ { Name: "GetMeta" }, { Name: "Snapshot", Input: { SnapshotTime: 2.3, }, }, ]), CallbackArgs: "your callbackArgs", }; const res = await vodOpenapiService.UploadMaterial(options); // do your work // ... } catch (err) { console.log(err); } };
视频点播服务端 SDK 封装了 ApplyUploadInfo - 获取上传地址和凭证和 CommitUploadInfo - 确认上传接口以及上传逻辑,您只需简单配置即可进行上传。
说明
const uploadMaterial = async () => { try { const options = { SpaceName: "your target space name", // 空间名 FilePath: "your local file path", // 目标文件的绝对路径 FileName: "your target storage path", // 文件路径(可选)。您可根据业务需求自定义文件路径 FileExtension: "your file extension", // 文件后缀(可选)。以 . 开头,不超过 8 位。当您传入 FileExtension 时,不需要重复传入 FileName 参数,视频点播将生成 32 位随机字符串,和您传入的 FileExtension 共同拼接成文件路径。 FileType: "your file type", Functions: JSON.stringify([ { Name: "GetMeta" }, { Name: "AddOptionInfo", Input: { Title: "素材测试名称", Tags: "test", Description: "素材测试,视频文件", Category: "video", Format: "MP4", RecordType: 2, }, }, ]), CallbackArgs: "your callbackArgs" }; const res = await vodOpenapiService.UploadMaterial(options); // do your work // ... } catch (err) { console.log(err); } };
您可以通过配置上传事件通知及时获取上传的进展和状态,详细介绍请见上传事件通知。
您可以通过工作流实现上传后自动转码,详细介绍请见工作流。
音视频资源上传至视频点播服务之后,默认为未发布状态,此时无法获取到播放地址。因此在音视频播放前,您需要先修改音视频状态为已发布。具体操作请参见修改音视频发布状态。
FileName
参数设置了文件名称,但上传后控制台显示"未命名",为什么没有显示我设置的文件名称?这是因为在视频点播服务中,FileName
参数实际上指的是文件路径(即媒资在存储桶中的唯一标识和存储位置),而不是用户可见的文件名称。如需设置控制台显示的文件名称,您需要通过上传功能函数设置 FileTitle
参数。详见上传功能函数说明。
参数 | 说明 |
---|---|
FileType |
|
RecordType |
|
Category |
|
通过正确组合这三个参数,可确保文件上传至正确的域名并生成匹配的元数据。示例:
FileType
设为 media
或留空。RecordType
设为 1
或留空。Category
无需设置(仅当 RecordType=2
时生效)。FileType
设为 image
(图片使用图片上传域名)。RecordType
设为 2
(素材)。Category
设为 image
(进一步指定为图片素材)。FileType
设为 object
(非音视频/图片的文件类型)。RecordType
设为 2
(素材)。Category
设为 subtitle
(进一步指定为字幕素材)。说明
通过服务端 SDK 上传素材时,接口已默认设置 RecordType
为 2,用户无需再设置。
视频点播当前仅支持手动分类。您可在视频点播控制台指定空间内的分类管理页面创建分类并获取分类 ID,具体请见分类管理。
如果您使用客户端上传 SDK 进行上传,您需要在应用服务端通过 AK 和 SK 在本地签出临时上传 Token,不依赖外网。如希望同时生成多个临时上传 Token,您可以循环调用生成方法。更多信息,请见客户端上传。
// 可设置临时密钥过期时间(单位为毫秒),默认为 1h。 vodOpenapiService.GetUploadToken(); // 如下示例设置临时上传凭证过期时间为 30min。 vodOpenapiService.GetUploadToken(30 * 60 * 1000);
接口的请求参数和返回参数说明详见 QueryUploadTaskInfo。
const queryUploadTaskInfo = async () => { try { const options = { JobIds: "your job ids" }; const res = await vodOpenapiService.QueryUploadTaskInfo(options); // do your work // ... } catch (err) { console.log(err); } };
接口请求参数和返回参数说明详见 ApplyUploadInfo 及 CommitUploadInfo。
const uploadMedia = async () => { try { const options = { SpaceName: "your space name", FilePath: "your file path", // 绝对路径 Functions: JSON.stringify([ { Name: "GetMeta" }, { Name: "Snapshot", Input: { SnapshotTime: 2.3, }, }, ]), CallbackArgs: "your callbackArgs" }; const res = await vodOpenapiService.UploadMedia(options); // do your work // ... } catch (err) { console.log(err); } };
接口请求参数和返回参数说明详见 ApplyUploadInfo 及 CommitUploadInfo。
const uploadMaterial = async () => { try { const options = { SpaceName: "your space name", FilePath: "your file path", // 绝对路径 FileType: "your file type", Functions: JSON.stringify([ { Name: "GetMeta" }, { Name: "AddOptionInfo", Input: { Title: "素材测试名称", Tags: "test", Description: "素材测试,视频文件", Category: "video", Format: "MP4", RecordType: 2, }, }, ]), CallbackArgs: "your callbackArgs" }; const res = await vodOpenapiService.UploadMaterial(options); // do your work // ... } catch (err) { console.log(err); } };