本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍如何使用鸿蒙 SDK将媒体文件从本地上传至点播存储。
当前鸿蒙上传SDK处于公测阶段,因此不建议直接在生产环境中使用。如果您需要在生产环境中部署,请务必进行充分的测试,以确保其稳定性和兼容性。
前提条件
DevEco Studio版本为5.0 Release 或更高版本。
HarmonyOS SDK版本为API Version 12 或更高版本。
支持音视频的鸿蒙设备,操作系统版本为HarmonyOS NEXT 5.0.0.102 或更高版本。
集成SDK
集成方式
ohpm包管理器集成(推荐)
在终端中进入您应用模块的目录(例如 entry
目录),并执行以下命令:
ohpm install @aliyun_video_cloud/vod-upload-sdk
或使用简写命令:
ohpm i @aliyun_video_cloud/vod-upload-sdk
此命令会自动下载 SDK 及其依赖(如 @aliyun/oss
),并将其添加到您模块的 oh-package.json5
文件的dependencies
节点中。
手动方式集成
您也可以手动在您模块的 oh-package.json5
文件中添加依赖。如果您是从 ohpm 官方仓库安装,配置如下:
"dependencies": {
"@aliyun_video_cloud/vod-upload-sdk": "^1.0.0", // 请使用最新的稳定版本
}
如果您是手动下载 HAR 包进行本地引用:
"dependencies": {
"@aliyun_video_cloud/vod-upload-sdk": "file:path/to/your/vod-upload-sdk.har", // 替换为 HAR 包的实际路径
}
保存文件后,在项目根目录运行 ohpm install
来安装所有依赖:
ohpm install
配置权限
申请权限
在您的应用主模块的 src/main/module.json5
配置文件中,添加以下必要的权限声明:
请根据应用实际使用的Ability名称替换示例中的 .EntryAbility
。媒体读写权限(如 ohos.permission.READ_IMAGE
, ohos.permission.READ_VIDEO
)可根据应用支持的文件类型配置更具体的权限。
{
"module": {
// ... 其他配置
"requestPermissions": [
{
"name": "ohos.permission.INTERNET", // 应用需要联网以上传文件
"usedScene": {
"ability": [
".EntryAbility" // 替换为您的Ability名称
],
"when": "inuse"
}
},
{
"name": "ohos.permission.READ_MEDIA", // 应用需要读取本地媒体文件进行上传
"usedScene": {
"ability": [
".EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.WRITE_MEDIA", //应用可能需要写入媒体文件(例如复制到缓存)
"usedScene": {
"ability": [
".EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.GET_NETWORK_INFO", //应用需要获取网络状态以优化上传策略
"usedScene": {
"ability": [
".EntryAbility"
],
"when": "inuse"
}
},
{
"name": "ohos.permission.KEEP_BACKGROUND_RUNNING", //当熄屏或应用在系统后台时,仍能继续上传
"usedScene": {
"ability": [
".EntryAbility"
],
"when": "always"
}
}
]
}
}
声明后台模式
在 abilities
节点下,为您的主 Ability 添加 backgroundModes
声明,确保文件上传任务在后台可以继续执行。
// src/main/module.json5
"abilities": [
{
"name": "EntryAbility",
// ... 其他配置
"backgroundModes": [
"dataTransfer" // 声明为数据传输模式,适用于文件上传
]
}
]
基础设置
初始化上传实例
请先了解客户端上传的整体上传流程,并根据上传的授权方式部署对应的授权服务:
选择使用上传地址和凭证方式, 请在授权服务中获取上传地址和凭证。
选择使用STS Token方式,请在授权服务中获取STS Token。
初始化上传实例分为下列步骤:
获取凭证:客户端上传的整体流程需要通过凭证来验证上传的合法性。SDK 支持以下几种凭证方式:
重要无论哪种方式获取凭证,您的服务器需要与阿里云 VOD 服务交互以获取或刷新这些凭证。请参考CreateUploadVideo - 获取音视频上传地址和凭证、CreateUploadImage - 获取图片上传地址和凭证、RefreshUploadVideo - 刷新视频上传凭证。
上传地址和凭证方式
应用服务器调用点播的
CreateUploadVideo
(视频/音频) 或CreateUploadImage
(图片) 接口,获取一次性上传地址(UploadAddress)和上传凭证(UploadAuth)。客户端通过
onUploadStarted
回调从应用服务器获取uploadAuth
和uploadAddress
,并使用该信息完成上传操作。此方式安全性高,权限控制集中于应用服务器,建议用于生产环境部署。
STS Token方式
应用服务器向阿里云STS服务申请临时的安全令牌(AccessKeyId, AccessKeySecret, SecurityToken),并下发至客户端。
客户端在初始化时提供 STS Token (AccessKeyId, AccessKeySecret, SecurityToken, ExpireTime)。SDK 将通过该 Token 在内部执行 VOD API 调用(如 CreateUploadVideo/Image)或直接上传至 OSS。
AK/SK方式
客户端使用阿里云主账号或RAM用户的永久AccessKeyId和AccessKeySecret,SDK 通过该凭证在内部执行 VOD API 调用。此方式用于客户端,存在AK/SK泄露风险,建议仅用于开发测试。
初始化上传实例:根据选择的认证方式,使用不同的
init
方法初始化VODUploadClient
实例。上传地址和凭证方式
import { VODUploadClient, VODUploadClientImpl } from '@aliyun_video_cloud/vod-upload-sdk'; import { VODUploadCallback } from '@aliyun_video_cloud/vod-upload-sdk'; import { common } from '@kit.AbilityKit'; // 假设您在 UIAbility 中获取了 context let uiAbilityContext: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; let uploader: VODUploadClient | null = null; let uploadCallback: VODUploadCallback; // 需要实现 VODUploadCallback 接口 // 创建回调实例 (详细实现见下一节) uploadCallback = { onUploadSucceed: (info, result) => { /* ... */ }, onUploadFailed: (info, code, message) => { /* ... */ }, onUploadProgress: (info, uploadedSize, totalSize) => { /* ... */ }, onUploadTokenExpired: () => { /* ... */ }, onUploadRetry: (code, message) => { /* ... */ }, onUploadRetryResume: () => { /* ... */ }, onUploadStarted: (info) => { /* ... */ } }; // 初始化上传实例 uploader = new VODUploadClientImpl(uiAbilityContext); // 上传地址和凭证方式(推荐) // 这种方式下,SDK 会在 onUploadStarted 回调中请求应用服务器提供 uploadAuth 和 uploadAddress await uploader.init(uploadCallback);
STS Token方式
import { VODUploadClient, VODUploadClientImpl } from '@aliyun_video_cloud/vod-upload-sdk'; import { VODUploadCallback } from '@aliyun_video_cloud/vod-upload-sdk'; import { common } from '@kit.AbilityKit'; // 假设您在 UIAbility 中获取了 context let uiAbilityContext: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; let uploader: VODUploadClient | null = null; let uploadCallback: VODUploadCallback; // 需要实现 VODUploadCallback 接口 // 创建回调实例 (详细实现见下一节) uploadCallback = { onUploadSucceed: (info, result) => { /* ... */ }, onUploadFailed: (info, code, message) => { /* ... */ }, onUploadProgress: (info, uploadedSize, totalSize) => { /* ... */ }, onUploadTokenExpired: () => { /* ... */ }, onUploadRetry: (code, message) => { /* ... */ }, onUploadRetryResume: () => { /* ... */ }, onUploadStarted: (info) => { /* ... */ } }; // 初始化上传实例 uploader = new VODUploadClientImpl(uiAbilityContext); // STS Token 方式 // 传入从 STS 服务获取的临时 AccessKeyId, AccessKeySecret, SecurityToken, ExpireTime await uploader.init( "STS_ACCESS_KEY_ID", "STS_ACCESS_KEY_SECRET", "STS_SECURITY_TOKEN", "STS_EXPIRE_TIME_ISO8601", // ISO8601格式的STS凭证的过期时间, e.g. "2025-12-31T23:59:59Z" uploadCallback );
AK/SK方式
import { VODUploadClient, VODUploadClientImpl } from '@aliyun_video_cloud/vod-upload-sdk'; import { VODUploadCallback } from '@aliyun_video_cloud/vod-upload-sdk'; import { common } from '@kit.AbilityKit'; // 假设您在 UIAbility 中获取了 context let uiAbilityContext: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; let uploader: VODUploadClient | null = null; let uploadCallback: VODUploadCallback; // 需要实现 VODUploadCallback 接口 // 创建回调实例 (详细实现见下一节) uploadCallback = { onUploadSucceed: (info, result) => { /* ... */ }, onUploadFailed: (info, code, message) => { /* ... */ }, onUploadProgress: (info, uploadedSize, totalSize) => { /* ... */ }, onUploadTokenExpired: () => { /* ... */ }, onUploadRetry: (code, message) => { /* ... */ }, onUploadRetryResume: () => { /* ... */ }, onUploadStarted: (info) => { /* ... */ } }; // 初始化上传实例 uploader = new VODUploadClientImpl(uiAbilityContext); // AK/SK 方式(仅用于开发测试) //直接传入您的 AccessKeyId 和 AccessKeySecret await uploader.init("YOUR_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_SECRET", uploadCallback);
设置上传状态回调类:
VODUploadCallback
是上传状态的回调。您需要实现以下方法以处理上传事件。import { VODUploadCallback, UploadFileInfo, VodUploadResult } from '@aliyun_video_cloud/vod-upload-sdk'; import { VodUploadErrorType } from '@aliyun_video_cloud/vod-upload-sdk'; // 错误类型枚举 class MyUploadCallback implements VODUploadCallback { onUploadSucceed(info: UploadFileInfo, result: VodUploadResult): void { console.info(`Upload succeeded: ${info.getFileName()}, VideoId: ${result.getVideoId()}, ImageUrl: ${result.getImageUrl()}`); // 您可以根据 result 中的 videoId 或 imageUrl 进行后续操作 } onUploadFailed(info: UploadFileInfo, code: string, message: string): void { console.error(`Upload failed: ${info.getFileName()}, Code: ${code}, Message: ${message}`); // 根据错误码和信息处理失败情况,例如提示用户重试或检查凭证 } onUploadProgress(info: UploadFileInfo, uploadedSize: number, totalSize: number): void { const progress = totalSize > 0 ? (uploadedSize / totalSize) * 100 : 0; console.info(`Upload progress: ${info.getFileName()} - ${progress.toFixed(2)}% (${uploadedSize}/${totalSize})`); // 更新 UI 进度条 } onUploadTokenExpired(): void { console.warn("Upload token expired. Need to refresh credentials."); // 在此回调中,您需要向您的应用服务器请求新的凭证, // 然后根据初始化方式调用 uploader.resumeWithAuth(newAuth) 或 uploader.resumeWithToken(...) } onUploadRetry(code: string, message: string): void { console.warn(`Upload will retry. Code: ${code}, Message: ${message}`); // 可以在 UI 上显示重试提示 } onUploadRetryResume(): void { console.info("Upload retry resumed."); // 可以在 UI 上移除重试提示 } onUploadStarted(uploadFileInfo: UploadFileInfo): void { console.info(`Upload started: ${uploadFileInfo.getFileName()}`); // 如果使用上传地址和凭证方式初始化 SDK (即 uploader.init(callback)), // 则在此回调中向您的应用服务器请求 uploadAuth 和 uploadAddress, // 然后调用 uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress); // 示例: // myAppServer.getUploadCredentials(uploadFileInfo.getFileName()) // .then(credentials => { // uploader.setUploadAuthAndAddress(uploadFileInfo, credentials.uploadAuth, credentials.uploadAddress); // }) // .catch(error => { // console.error("Failed to get upload credentials from server:", error); // uploader.onUploadFailed(uploadFileInfo, VodUploadErrorType.VOD_API_ERROR, "Failed to get upload credentials."); // }); } }
构造上传请求函数:通过
addFile
方法将文件加入上传队列。您可以为文件指定 VOD 相关的元数据。重要HarmonyOS中,通常使用
picker
API实现文件选择, 返回值为文件URI。由于点播上传SDK的addFile
方法要求本地路径,您需要将用户选择的URI(content://
)复制至应用沙箱缓存目录。import { VodInfo, UploadFileInfo } from '@aliyun_video_cloud/vod-upload-sdk'; import { picker } from '@kit.CoreFileKit'; import { common } from '@kit.AbilityKit'; import { FileUtils } from '@aliyun_video_cloud/vod-upload-sdk'; // SDK 提供的文件工具类 // 假设 uploader 实例已初始化 async function selectAndAddFiles(uiAbilityContext: common.UIAbilityContext) { const docPicker = new picker.DocumentViewPicker(); const selectOptions: picker.DocumentSelectOptions = { maxSelectNumber: 5, // 允许选择最多5个文件 fileTypes: ['video/*', 'image/*', 'audio/*'] // 限制文件类型 }; try { const selectedUris = await docPicker.select(selectOptions); if (selectedUris && selectedUris.length > 0) { for (const uri of selectedUris) { const originalFileName = FileUtils.getFileName(uri); const tempFileName = `${Date.now()}_${Math.random().toString(36).substring(2, 8)}_${originalFileName}`; const cacheDirectory = uiAbilityContext.cacheDir; // 获取应用缓存目录 const localTempFilePath = `${cacheDirectory}/${tempFileName}`; // 将文件复制到应用沙箱缓存目录,以便 SDK 访问 try { await FileUtils.copyUriToFile(uiAbilityContext, uri, localTempFilePath); const fileSize = await FileUtils.getFileSize(localTempFilePath); // 构造 VodInfo,包含媒体元数据 const vodInfo = new VodInfo(); vodInfo.setTitle(`鸿蒙上传-${originalFileName}`); vodInfo.setFileName(originalFileName); // 设置原始文件名,SDK会自动从路径解析 vodInfo.setFileSize(String(fileSize)); vodInfo.setDescription("这是通过鸿蒙 SDK 上传的视频/图片"); vodInfo.setTags("HarmonyOS,Demo,Upload"); vodInfo.setCateId(19); // 替换为您的点播分类ID // vodInfo.setCoverUrl("http://your.cdn.com/cover.jpg"); // 可选:指定封面URL // vodInfo.setUserData("{\"key\":\"value\"}"); // 可选:自定义数据,用于上传加速等 // 添加文件到上传队列 uploader.addFile(localTempFilePath, vodInfo); console.info(`Added file to queue: ${originalFileName}, path: ${localTempFilePath}`); } catch (copyError) { console.error(`Failed to copy file ${originalFileName} to cache:`, copyError); // 处理文件复制失败的情况,例如通知用户 } } } else { console.info("No files selected."); } } catch (error) { console.error("File selection failed:", error); } }
VodInfo
对象用于承载上传文件的元数据信息。主要属性包括:说明高级配置参数(如
storageLocation
,templateGroupId
,workflowId
) 可在后续高级功能中配置,或通过VodInfo
单独设置文件。字段
类型
说明
title
string
视频/图片标题。
fileName
string
原始文件名称,应包含扩展名。主要用于点播服务记录,通常SDK会尝试从文件路径中提取。
description
string
描述。
tags
string
标签,多个标签用逗号分隔。
appId
string
应用 ID。
cateId
number
分类 ID。
coverUrl
string
封面 URL。
partSize
number
单个文件上传的分片大小,优先级高于全局
setPartSize
。
imageType
string
图片类型。
default
(普通图片)或
cover
(视频封面图)。仅当上传图片时有效。
templateGroupId
string
转码模板组 ID。与
workflowId
同时设置时,
workflowId
优先。
workflowId
string
工作流 ID。
storageLocation
string
存储地址。
userData
string
自定义设置,JSON 字符串,用于上传加速等高级功能。
开始上传:调用
start()
方法开始上传。SDK 会按添加顺序处理文件队列。// 假设 uploader 实例已初始化,且已通过 addFile 添加了文件 // 开始上传 uploader.start();
如果SDK使用凭证方式初始化,调用
start()
方法后,对于未设置Endpoint/Bucket/Object的待上传文件,会先触发onUploadStarted
回调。您需要在该回调中异步获取文件的uploadAuth
和uploadAddress
,并通过uploader.setUploadAuthAndAddress(uploadFileInfo, uploadAuth, uploadAddress)
进行设置。文件开始上传OSS后,
onUploadProgress
回调会同步更新上传进度。
执行结果:
队列管理
VODUploadClient
支持添加多个文件顺序上传,并提供了以下方法管理上传队列:
VODUploadClient
支持多文件上传,但如果使用上传凭证和地址方式上传,仍需为每个文件单独设置。由于多文件上传会增加代码复杂度,建议只添加单文件上传。
从队列中删除上传文件,如果待删除的文件正在上传中,则取消上传并自动上传下一个文件。
deleteFile(index: number): void
清空上传队列,如果有文件在上传,则取消上传。
clearFiles(): void
获取上传文件队列。
listFiles(): Array<UploadFileInfo>
取消指定索引文件的上传,文件仍保留在上传列表中,状态标记为已取消。如果待取消的文件正在上传中,则取消上传并自动上传下一个文件。
cancelFile(index: number): void
将之前调用
cancelFile
标记为取消的或上传失败的文件,在指定索引处恢复上传状态,使其可以被重新上传。SDK会在下次处理队列时或start()
调用后尝试上传它。resumeFile(index: number): void
上传控制
VODUploadClient
支持以下上传控制方法:
停止所有上传活动。如果有文件正在上传中,则取消这些上传。调用
stop()
后,队列中的文件(未成功、未失败、未取消的)状态会重置为初始(READY)状态,等待下一次start()
调用。stop(): void
暂停所有正在进行的上传活动。SDK状态将变为
PAUSED
。已开始上传的OSS分片会继续完成当前分片,但不会开启新的分片上传。pause(): void
恢复之前通过
pause()
暂停的上传活动。SDK状态将变为STARTED
,并从暂停点继续上传。resume(): void
高级设置
VODUploadClient
支持回调处理、超时处理、分片上传设置、指定存储地址、断点续传、蜂窝网络上传策略、上传加速、设置转码、设置点播服务地域、设置应用ID等高级设置。具体示例如下:
回调处理
VODUploadClient
通过 VODUploadCallback
接口处理各种事件:
上传失败(
onUploadFailed
)当文件上传失败时触发。回调参数中包含错误码(
code
)和错误信息(message
),可用于定位问题和用户提示。错误码可能源自VOD API、OSS服务或SDK内部。详情请参见公共错误码和异常响应。上传凭证过期 (
onUploadTokenExpired
)当STS Token或VOD上传凭证(UploadAuth)过期时触发。收到回调后,可以从应用服务器获取新凭证。
若是STS Token过期(影响VOD API调用或OSS直接上传),调用
uploader.resumeWithToken(newStsAk, newStsSk, newToken, newExpireTime)
。若是VOD上传凭证(UploadAuth)过期,调用
uploader.resumeWithAuth(newUploadAuth)
。
上传重试 (
onUploadRetry
/onUploadRetryResume
):在onUploadRetry
回调中,应用可以提示用户正在重试,或在达到一定重试次数后调用cancelFile()
或stop()
来停止。onUploadRetry
: SDK内部的VOD API调用或OSS上传操作因可重试错误(如网络超时)自动发起重试前触发。onUploadRetryResume
: 重试成功并恢复上传时触发。
超时处理
SDK允许配置HTTP请求的超时参数和最大重试次数。
import { VodHttpClientConfig } from '@aliyun_video_cloud/vod-upload-sdk';
const httpClientConfig = new VodHttpClientConfig();
httpClientConfig.setConnectionTimeout(15000); // 连接超时时间,单位毫秒,默认15000
httpClientConfig.setSocketTimeout(30000); // Socket读取超时时间,单位毫秒,默认30000
httpClientConfig.setMaxRetryCount(3); // HTTP请求最大重试次数,默认3
if (uploader) { // 确保 uploader 已初始化
uploader.setVodHttpClientConfig(httpClientConfig);
}
分片上传设置
SDK默认启用分片上传。可通过以下方法调整分片行为:
setPartSize(partSize: number): void:设置分片大小(单位:字节),默认1MB (1 * 1024 * 1024 字节)。当文件超过设置大小时,将自动分片上传。
// uploader 已初始化 uploader.setPartSize(2 * 1024 * 1024); // 设置为2MB
setDisableMultiPart(disable: boolean): void:设为
true
时将禁用分片上传,所有文件将通过简单PUT Object方式上传。适用于明确知道待上传文件较小,或特定场景无需分片的情况。默认为false
(即启用分片)。// uploader 已初始化 uploader.setDisableMultiPart(true); // 禁用分片上传
指定存储地址
VODUploadClient
实例支持为VOD流程上传的文件(需调用CreateUploadVideo/Image
获取凭证)指定存储地址(指点播控制台配置的存储位置标识,OSS Bucket 的 Region 和 Endpoint 由 VOD 服务返回)。
此设置为全局配置,将影响后续所有VOD流程上传的文件,除非在
VodInfo
中单独指定storageLocation
。直接OSS上传模式(
addFile
时提供了endpoint, bucket, objectKey)不受此设置影响。
// uploader 已初始化
uploader.setStorageLocation("outin-xxxx.oss-cn-shanghai.aliyuncs.com"); // 从点播控制台获取
断点续传
SDK默认开启断点续传功能,该功能依赖于记录上传进度。
此功能仅对分片上传有效。当文件较小未分片,或通过 setDisableMultiPart(true)
禁用分片时,功能不生效。
setRecordUploadProgressEnabled(enabled: boolean): void:设置是否记录上传进度以支持断点续传,默认值为
true
(开启)。// uploader 已初始化 uploader.setRecordUploadProgressEnabled(true); // 确保开启
蜂窝网络上传策略
SDK提供蜂窝网络自动暂停上传功能。
此功能需满足:
应用已获取
ohos.permission.GET_NETWORK_INFO
权限。SDK 网络监听模块正常运行。
网络切回 Wi-Fi/以太网时将自动恢复上传(仅限策略触发的暂停)。若是手动 pause()
暂停需调用 resume()
恢复上传。
setPauseOnCellular(enabled: boolean): void:设置蜂窝网络时自动暂停上传,默认值为
false
(不自动暂停)。// uploader 已初始化 uploader.setPauseOnCellular(true); // 开启蜂窝网络下自动暂停
isPauseOnCellularEnabled(): boolean:检查当前是否已设置蜂窝网络自动暂停策略。
上传加速
当需要上传较大文件(GB、TB级别)或进行跨区域上传时,可启用上传加速功能。详情请参见开通方式。开通后,在构建VodInfo
对象时,通过 setUserData
方法设置包含加速配置的JSON字符串。示例如下:
const vodInfo = new VodInfo();
// ... 其他 VodInfo 设置 ...
const userData = {
"Vod": { // 确保顶层有 "Vod" 结构
"UserData": { // 自定义用户数据
"AccelerateConfig": { // 上传加速配置
"Type": "oss", // 固定为 "oss"
"Domain": "your-accelerate-domain.oss-accelerate.aliyuncs.com" // 您的加速域名
}
}
}
};
vodInfo.setUserData(JSON.stringify(userData));
参数描述
名称 | 类型 | 说明 |
Type | string | 开启上传加速的类型(仅支持oss)。 |
Domain | string | 阿里云分配给您Bucket的加速域名(默认为HTTPS)。 |
设置转码
VOD流程上传的音视频文件可指定转码模板组ID或工作流ID实现自动转码。
同时设置
WorkflowId
和TemplateGroupId
时,以WorkflowId
为准。此设置全局生效(影响后续所有VOD流程文件),除非在
VodInfo
中单独指定。客户端上传SDK不支持工作流方式的图片转码,请使用图片样式或独立图片处理服务。
setTemplateGroupId(templateGroupId: string): void:设置转码模板组ID。
// uploader 已初始化 uploader.setTemplateGroupId("your-template-group-id");
setWorkflowId(workflowId: string): void:设置工作流ID。
// uploader 已初始化 uploader.setWorkflowId("your-workflow-id");
设置点播服务地域
设置点播服务API的接入地域,并指定OSS上传时STS凭证的对应区域(适用于上传凭证未提供OSS Region信息)。默认值为 "cn-shanghai"
。
setRegion(region: string): void
// uploader 已初始化 uploader.setRegion("cn-beijing"); // 例如,设置为华北2(北京)
设置应用ID
通过该方法设置应用ID,可将媒体资源上传至指定应用(适用于使用了视频点播多应用体系)。
此设置全局生效(影响后续所有VOD流程文件),除非在 VodInfo
中单独指定 appId
。
setAppId(appId: string): void
// uploader 已初始化 uploader.setAppId("app-yourxxxxid");