You need to enable JavaScript to run this app.
导航
上传素材
最近更新时间:2024.11.14 14:48:11首次发布时间:2022.10.18 16:05:12

本文为您介绍如何使用 Android 上传 SDK 以简单便捷的方式将素材上传至视频点播服务。上传 SDK 支持上传字幕、封面图、预告片、音频等素材。

适用版本

此文档适用于上传 SDK 1.32.2 及以上的版本,其他版本请参考Android 素材上传 SDK(历史版本)

前提条件

基础功能

日志调试

开发的过程中,建议打开 logcat 日志,便于调试,排查问题。

说明

Release 线上版本一定要关闭,目的是减少性能开销。

BDUploadLog.turnOn(LOG_DEBUG, 1);
BDUploadUtil.setEnableNativeLog(true);

初始化 SDK

初始化操作是轻量的,建议放到 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

必填,App ID,从视频点播控制台应用管理页面获取。详情请参见管理应用

AppName

String

必填, App 英文名,从视频点播控制台应用管理页面获取。

AppVersion

String

必填,App 版本号,可使用 BuildConfig.VERSION_NAME。合法版本号应包含大于、等于 2 个分隔符,如 "1.3.2"。

AppChannel

String

必填,渠道号。您可自定义,如小米应用商店 (xiaomi)、华为应用市场 (huawei) 等。

创建实例

实现创建实例的代码示例如下所示。

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

文件前缀,路径字符串,支持多级路径,如 path/to/foo/bar/。文件前缀必须以 / 结尾,否则会上传失败。

FileTitle

文件名称。如您没有设置,SDK 会自动生成 32 位字符串作为文件名称。

FileExtension

文件后缀。最终完整路径中必须包含 FileExtension,否则会上传失败。文件后缀需以 . 开头,如 .mp4.mp3

注意

具体的字符规则,请见文件命名通用字符规则

您可参考以下示例代码设置云端存储路径。

// 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

上传控制

上传控制支持的操作有开始上传、暂停上传和终止上传。

SDK 内部在执行此函数的时候,会新建线程,不会阻塞。实现开始上传的代码示例如下所示。
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

视频上传完成通知。调用 close() 来释放上传对象。

0,无意义

详见 BDVideoInfo

MsgIsFlushComplete

视频秒传完成通知。调用 close() 来释放上传对象。

0,无意义

详见 BDVideoInfo

MsgIsFail

视频上传失败通知。如需重试,请调用 start() 重新上传,否则调用 close() 释放上传对象。

详见上传 SDK 错误码

详见 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)