最近更新时间:2023.11.08 14:51:30
首次发布时间:2022.10.17 21:06:08
本文为您介绍如何用 Android 上传 SDK 以简单便捷的方式上传视频。
此文档适用于 TTSDK 1.32.2 及以上的版本,其他版本请参考快速开始(历史版本)。
已完成上传 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 版本号,使用 BuildConfig.VERSION_NAME, |
AppChannel | String | 必填,渠道号;您可自定义,如:小米应用商店 (xiaomi)、 |
实现创建实例的代码示例如下所示。
BDVideoUploader mUploader = new BDVideoUploader();
设置上传的文件,支持 2 种方式,任选其一。
mUploader.setPathName("/data/user/0/xxx/files/test.mp4");
从接入方自己的 AppServer 获取鉴权参数设置给 SDK。鉴权参数说明详见客户端上传。实现的代码示例如下所示。
mUploader.setTopAccessKey("xxx"); mUploader.setTopSecretKey("xxx"); mUploader.setTopSessionToken("xxx");
实现设置空间的代码示例如下所示。
mUploader.setSpaceName("xxx");
说明
空间相关说明请参考空间管理。
上传完成后,文件在云端的存储路径形式如下所示。StoreUri = {{BucketName}}/{{FilePrefix}}{{FileTitle}}{{FileExtension}}
其中 BucketName 不需要接入方设置,其他几个参数说明如下表示。
参数 | 含义 | 是否必选 | 描述 |
---|---|---|---|
FilePrefix | 文件前缀 | 否 | 路径字符串,支持多级路径(如 path/to/foo/bar/) |
FileTitle | 文件标题 | 否 | 如果不手动设置,SDK 会自动生成 32 位字符串作为文件标题 |
FileExtension | 文件后缀 | 是 | 最终完整路径中必须包含 FileExtension,否则会上传失败。 |
设置云端存储路径,支持 2 种方式。您可根据自身需求,任选其一。
注意
设置 FileName 时,必须带有后缀,如:.mp4、.mp3 等,否则会报错。
// 例 1,云端的存储路径:tos-pathxxx/volc/test.mp4 mUploader.setFileName("volc/test.mp4"); // 例 2,云端的存储路径:tos-pathxxx/test.mp4 mUploader.setFileName("test.mp4");
例如:tos-pathxxx/pathxxx/test.mp4
,则对应关系如下所示。
参数(示例) | 含义 | 描述 |
---|---|---|
tos-pathxxx/ | 存储桶名称 | 接入方不用设置。 |
pathxxx/ | 文件前缀 | 可选。 |
test | 文件标题 | 可选;如果不设置,SDK 会自动生成一个 32 位字符串作为文件名。 |
.mp4 | 文件后缀 | 必传;不传报错。 |
上传视频支持设置分类 ID,可在控制台系统设置 > 分类管理中查看或通过媒资分类OpenAPI 查询,素材不支持分类,示例代码如下:
public void setClassificationId(long classificationId)
上传控制支持的操作开始上传、暂停上传和终止上传。
mUploader.start();
注意
上传完成后,请调用 close()
,否则会内存泄漏。
回调的线程:在 A 线程创建 Uploader 实例,如果 A 线程存在 Looper,则在 A 线程回调;否则在主线程回调。
public void setListener(BDVideoUploaderListener listener) public interface BDVideoUploaderListener { // 上传进度和上传状态的回调,详见下表 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 | 视频上传完成通知。调用 close() 来释放上传对象。 | 0,无意义 | 详见下方BDVideoInfo 的参数说明 |
MsgIsFlushComplete | 50 | 视频秒传完成通知。调用 close() 来释放上传对象。 | 0,无意义 | 详见下方BDVideoInfo 的参数说明 |
MsgIsFail | 2 | 视频上传失败通知。如果需重试,请调用 start() 重新上传;否则调用 close() 来释放上传对象。 | 详情请参见上传 SDK 错误码 | 详见下方 BDVideoInfo 的参数说明 |
MsgIsUpdateProgress | 1 | 视频上传进度更新。 | 上传进度。取值范围为[0,100] | 无需关注 |
MessageIsDiskResumeInfoError | 120 | sdk 发现无法走断点续传时回调,同时 fallback 到普通上传;接入方最终会得到上传成功或失败的回调。 | -1,无意义 | 无需关注 |
参数 | 说明 |
---|---|
mVideoId | 视频 Vid |
mCoverUri | 封面Uri |
mTosKey | TOS 存储 key |
mErrorCode | 错误码。详情请参见上传 SDK 错误码 |
mErrorMsg | 错误信息 |
mVideoMediaInfo | 媒资信息,例如:码率、格式、长度、宽高等,代码示例如下所示。
说明 媒资信息的详情请参见确认上传中的 SourceInfo 参数。 |
mCallbackArgs | 透传服务端回调信息 |
mLog | 为空,目前不使用。 |
mProgress | 上传进度。取值范围为[0,100] |
mEncryptionMeta | 为空,目前不使用。 |