本文为您介绍如何使用 Android 上传 SDK 以简单便捷的方式将素材上传至视频点播服务。上传 SDK 支持上传字幕、封面图、预告片、音频等素材。
此文档适用于上传 SDK 1.32.2 及以上的版本,其他版本请参考Android 素材上传 SDK(历史版本)。
开发的过程中,建议打开 logcat 日志,便于调试,排查问题。
说明
Release 线上版本一定要关闭,目的是减少性能开销。
BDUploadLog.turnOn(LOG_DEBUG, 1); BDUploadUtil.setEnableNativeLog(true);
初始化操作是轻量的,建议放到 Application#onCreate
中执行,保障初始化顺序。
Env.init(new Config.Builder() .setApplicationContext(context) .setAppID("your app id") .setAppName("your app English name") // 合法版本号应大于、等于 3 位,如:"1.3.2" .setAppVersion(BuildConfig.VERSION_NAME) .setAppChannel("channel name") .build());
详细的参数说明如下表所示。
参数 | 类型 | 说明 |
---|---|---|
AppId | String | |
AppName | String | 必填, App 英文名,从视频点播控制台应用管理页面获取。 |
AppVersion | String | 必填,App 版本号,可使用 |
AppChannel | String | 必填,渠道号。您可自定义,如小米应用商店 ( |
实现创建实例的代码示例如下所示。
BDMaterialUploader mUploader = new BDMaterialUploader();
设置上传的文件,支持 2 种方式,任选其一。
mUploader.setPathName("/data/user/0/xxx/files/test.mp4");
您需要在应用服务端通过视频点播服务端 SDK 签发临时上传 Token,下发给客户端,再设置给 SDK。鉴权参数说明详见客户端上传。实现的代码示例如下所示。
mUploader.setTopAccessKey("xxx"); mUploader.setTopSecretKey("xxx"); mUploader.setTopSessionToken("xxx");
实现设置空间的代码示例如下所示。空间相关说明请参考空间管理。
mUploader.setSpaceName("xxx");
文件上传完成后的云端存储路径形式如下:
StoreUri = {{BucketName}}/{{FilePrefix}}{{FileTitle}}{{FileExtension}}
以下为一个完整的云端存储路径示例。
ASmapleBucketName/path/to/foo/bar/test.mp4
参数说明如下表所示。
参数 | 是否必选 | 说明 |
---|---|---|
BucketName | N/A | 存储桶名称,您无需设置。 |
FilePrefix | 否 | 文件前缀,路径字符串,支持多级路径,如 |
FileTitle | 否 | 文件名称。如您没有设置,SDK 会自动生成 32 位字符串作为文件名称。 |
FileExtension | 是 | 文件后缀。最终完整路径中必须包含 |
注意
具体的字符规则,请见文件命名通用字符规则。
您可参考以下示例代码设置云端存储路径。
// FileName = FilePrefix + FileTitle + FileExtension // 例 1,云端的存储路径:tos-pathxxx/volc/test.mp4 mUploader.setFileName("volc/test.mp4"); // 例 2,云端的存储路径:tos-pathxxx/test.mp4 mUploader.setFileName("test.mp4");
设置素材信息接口的代码示例如下所示。
public void setFileType(String fileType) public void setTitle(String title) public void setTags(String tags) public void setDescription(String description) public void setCategory(String category) public void setFormat(String format)
详细的参数说明如下表所示。
参数 | 类型 | 描述 |
---|---|---|
FileType | String | 文件类型,必填。可选值为 media、image、object。 |
Title | String | 标题。 |
Tags | String | 多个标签可用逗号隔开。 |
Description | String | 描述信息。 |
Category | String | 素材分类。当上传类型为素材时,可以指定素材的分类信息,必填。可选值为 video、audio、image、dynamic_img、subtitle、font。分别对应:视频、音频、图片、动图、字幕、字体。 |
Format | String | 格式。若传入 Format 的话,以您传入参数为准,否则以系统识别出的 Format 为准。若遇到特殊文件无法识别,Format 可能为空。 |
FileType 取值和 Category 对应关系如下表所示。
FileType 取值 | 对应 Category 取值 |
---|---|
media | video、audio |
image | image、dynamic_img |
object | subtitle、font |
上传控制支持的操作有开始上传、暂停上传和终止上传。
mUploader.start();
注意
上传完成后,请调用close()
,否则会内存泄漏。
回调的线程:在 A 线程创建 Uploader 实例,如果 A 线程存在 Looper,则在 A 线程回调;否则在主线程回调。
public void setListener(BDMaterialUploaderListener listener) public interface BDMaterialUploaderListener { // 上传进度和上传状态的回调,详见下表 onNotify 回调说明 void onNotify(int what, long parameter, BDVideoInfo info); // 关键日志回调,接入方可将回调信息上传到自己的服务器,可通过日志排查线上问题。 // 需要通过 mUploader.setEnableLogCallBack(true) 开启才能生效。 // 不使用空实现即可。 void onLog(int what, int code, String info); // 上传出错重试时回调;由接入方检查网络状态, // 返回 1 sdk 认为有网,进行重试; // 返回 0 sdk 认为无网,不再进行重试 // 如接入方不想检查网络状态,返回 1 即可,SDK 会在重试次数、超时时间内重试。 int videoUploadCheckNetState(int errorCode, int tryCount); // 暂未使用 String getStringFromExtern(int key); }
onNotify
回调说明如下表所示。
消息类型 what | 说明 | 对应 parameter 含义 | 对应 info 含义 |
---|---|---|---|
MsgIsComplete | 视频上传完成通知。调用 | 0,无意义 | 详见 BDVideoInfo |
MsgIsFlushComplete | 视频秒传完成通知。调用 | 0,无意义 | 详见 BDVideoInfo |
MsgIsFail | 视频上传失败通知。如需重试,请调用 | 详见 BDVideoInfo | |
MsgIsUpdateProgress | 视频上传进度更新。 | 上传进度。取值范围为[0,100] | 无需关注 |
MessageIsDiskResumeInfoError | SDK 发现无法走断点续传时回调,同时 fallback 到普通上。接入方最终会得到上传成功或失败的回调。 | -1,无意义 | 无需关注 |
实现的代码示例如下所示。
// 指定断点续传配置文件存放目录,上传 sdk 需要有读写权限,初始化后全局设置 1 次即可。 BDUploadUtil.setSDKConfigDir(dir) // 打开断点续传,每个 Uploader 实例都需设置 mUploader.setDiskResumeOption(1);
说明
通过 Reader 设置要上传的文件,不支持断点续传。
实现的代码示例如下所示。
// 分片上传设置分片大小,单位 byte,默认值 512 * 1024; public void setSliceSize(int size) // 开启并行上传的线程数,默认值 1 public void setSocketNum(int num) // 单次tcp 建连超时,单位 ms, 默认值 5000 public void setTcpOpenTimeOutMilliSec(int openTimeOutMilliSec) // 单个分片传输超时,单位 s,默认 40 public void setRWTimeout(int timeOut) // 总的建联超时,单位 s,默认 70 public void setMaxFailTime(int maxTime) // 系统 socket 单次读写超时,单位 s,默认 10 public void setTranTimeOutUnit(int tranTimeOutUnit) // 复用连接的超时时间,防止老连接质量变差,导致的上传速度变慢,单位 s,默认 6 public void setAliveMaxFailTime(int maxFailTime) // 分片重试次数,默认值 2 public void setSliceReTryCount(int retryCount) // 文件级别的重试次数,默认值 3 public void setFileRetryCount(int retryCount) // 接入方自定义参数,如"testkey=testValue" public void setServerParameter(String value) // 开启 https,设置 1 为全开启 public void setEnableHttps(int isEnableHttps)