此文档仅适用于 1.32.2.2 之前的版本。如果您使用的是 1.32.2.2 或之后的版本,请查看视频上传。
类别 | 说明 |
---|---|
开发环境 | Android Studio (推荐使用最新版本) |
系统版本 | minSdkVersion: 14 |
ABI 兼容性 | 架构要求:armv7 或 arm64 |
确保 project 根目录下的 build.gradle 文件中的 repositories 中配置了 mavenCentral()
和 火山引擎maven
服务。
allprojects { repositories { google() jcenter() maven { url "https://artifact.bytedance.com/repository/Volcengine/" // volc public maven repo } } }
在 module 目录下的 build.gradle 文件中的 dependencies 中添加 上传 SDK 依赖。如下所示:
dependencies { //... your own dependencies... def ttsdk_version = "x.x.x.x" //推荐使用最新稳定版,具体版本号请参考下方的ChangeLog implementation "com.bytedanceapi:ttsdk-ttuploader:$ttsdk_version" implementation "com.bytedanceapi:ttsdk-ttcommon:$ttsdk_version" }
本模块介绍如何使用上传 SDK 以最快捷的方式进行视频上传。请在完成集成准备后,再进行该步骤。
您可直接通过下述 Demo,快速实现视频上传。
详细划分为 4 个步骤,也在本章节对 4 个步骤进行了解释与说明。
视频上传 Demo
import com.ss.ttuploader.TTVideoUploaderConfigTop;
import com.ss.ttuploader.TTVideoUploaderTop;
import com.ss.ttuploader.TTVideoInfoTop;
import com.ss.ttuploader.TTVideoUploaderListenerTop;
Context mContext = this.getApplicationContext();
// 下面填写的参数仅供释义,请填写您自己的参数
Map<String, Object> appinfoMap = new HashMap<>();
appinfoMap.put("appname", "your app name");
appinfoMap.put("appid", 123); // your app id
appinfoMap.put("appchannel", "xiaomi_appstore"); // 设为test_channel不会展示日志
appinfoMap.put("region", "china");
appinfoMap.put("appversion", BuildConfig.VERSION_NAME);
//初始化上传SDK配置
TTVideoUploaderTop.setAppInfo(mContext, appinfoMap); //初始化上传配置,建议早配置
TTVideoUploaderTop uploaderTop;
try {
uploaderTop = new TTVideoUploaderTop();
} catch (Exception e) {
e.printStackTrace();
return null;
}
TTVideoUploaderConfigTop config = new TTVideoUploaderConfigTop();
JSONObject sts = null;
try {
sts = new JSONObject(authParam); //authParam为鉴权串,从步骤3中获取。
config.mSecretAccessKey = (String)sts.get("SecretAccessKey");
config.mAccessKeyId = (String)sts.get("AccessKeyID");
config.mSessionToken = (String)sts.get("SessionToken");
config.mExpiredTime = (String)sts.get("ExpiredTime");
} catch (JSONException e) {
e.printStackTrace();
}
config.mFilePathName = "/mnt/sdcard/test.mp4"; //视频文件路径
config.mRegion = "xxxxxx";
config.mSpace = "xxxxxx"; //即空间名称,此参数说明请参考下方文档
config.mVideoHostName = "xxxxxx";
config.mFileType = "video";
config.mServerParameter = "key1=value1&key2=value2&"; //希望透传的参数
uploaderTop.setUploadConfig(config);
//注册回调
uploaderTop.setListener(new TTVideoUploaderListenerTop() {
@Override
public void onNotify(int what, long parameter, TTVideoInfoTop info) {
if (what == MsgIsComplete) {
//视频上传完成
}
else if(what == MsgIsUpdateProgress){
//视频上传进度,parameter表示最新进度位置
}
else if(what == MsgIsFail) {
//视频上传失败
}
}
@Override
public void onLog(int what, int code, String info) {
//预留上报,可暂时忽略该函数的实现
}
});
对于简单使用场景,使用上传 SDK 完成文件(视频)上传,需要以下 4 个步骤:
初始化操作很轻量,建议放到 Application#onCreate 中执行,保障初始化顺序
需要的参数列举如下:
参数 | 类型 | 说明 |
---|---|---|
appid | int | App id |
appname | String | App 英文名 |
appchannel | String | 渠道 |
region | String | appid填写的地区或者国家 |
appversion | String |
Context mContext = this.getApplicationContext();
// 下面填写的参数仅供释义,请填写您自己的参数
Map<String, Object> appinfoMap = new HashMap<>();
appinfoMap.put("appname", "your app name");
appinfoMap.put("appid", 123); // your app id
appinfoMap.put("appchannel", "xiaomi_appstore"); // 设为test_channel不会展示日志
appinfoMap.put("region", "china");
appinfoMap.put("appversion", BuildConfig.VERSION_NAME);
//初始化上传SDK配置
TTVideoUploaderTop.setAppInfo(mContext, appinfoMap); //初始化上传配置,建议早配置
import com.ss.ttuploader.TTVideoUploaderTop;
TTVideoUploaderTop uploaderTop;
try {
uploaderTop = new TTVideoUploaderTop();
} catch (Exception e) {
e.printStackTrace();
return null;
}
注意
需要关注下 TTVideoUploaderTop 实例的生命周期,如设置为局部变量时,会导致 TTVideoUploaderTop 实例析构销毁时,无法继续进行视频上传操作。
此处获取的鉴权参数 authParam,用于第四步进行上传的鉴权配置。
//ex:JSONObject responseJson 如下:
{
"result":{
"AccessKeyID":"XXXXXX",
"SecretAccessKey":"XXXXXX",
"SessionToken":"XXXXXX",
"ExpiredTime":"XXXXXX",
"CurrentTime":"XXXXXX"
}
}
String authParam = responseJson.getString("result");
参数 | 类型 | 说明 |
---|---|---|
mSecretAccessKey | String | 服务端鉴权参数:临时 sk |
mAccessKeyId | String | 服务端鉴权参数:临时 ak |
mSessionToken | String | 服务端鉴权参数:token |
mExpiredTime | String | 服务端鉴权参数:过期时间 |
mFilePathName | String | 文件路径 |
mRegion | String | 地区 |
mSpace | String | 空间 |
mVideoHostName | String | 上传域名 |
mFileType | String | 上传的文件类型 |
mServerParameter | String | 额外的要带上的上传参数 |
说明
空间相关说明请参考空间管理。
import com.ss.ttuploader.TTVideoUploaderConfigTop;
TTVideoUploaderConfigTop config = new TTVideoUploaderConfigTop();
JSONObject sts = null;
try {
sts = new JSONObject(authParam); //authParam为鉴权串,从步骤3中获取。
config.mSecretAccessKey = (String)sts.get("SecretAccessKey");
config.mAccessKeyId = (String)sts.get("AccessKeyID");
config.mSessionToken = (String)sts.get("SessionToken");
config.mExpiredTime = (String)sts.get("ExpiredTime");
} catch (JSONException e) {
e.printStackTrace();
}
config.mFilePathName = "/mnt/sdcard/test.mp4"; //视频文件路径
config.mRegion = "cn-north-1";
config.mSpace = "xxxxxx"; //即空间名称,此参数说明请参考下方文档
config.mVideoHostName = "vod.volcengineapi.com";
config.mFileType = "video";
config.mServerParameter = "key1=value1&key2=value2&"; //希望透传的参数
uploaderTop.setUploadConfig(config);
在快速开始
章节中,我们完成 TTVideoUploaderTop 实例的创建,本章节介绍如何使用 TTVideoUploaderTop 实例进行上传。
uploaderTop.start();//开始上传
uploaderTop.stop();//暂停上传
uploaderTop.close();//停止上传并释放TTVideoUploaderTop实例
注意
在上传完成、上传失败或者其他任何时候需要释放上传对象的时候,一定要调用其- (void)close,不然会引起 crash 或者内存泄漏。
对应的监听类为 TTVideoUploaderListenerTop
//注册回调
uploaderTop.setListener(new TTVideoUploaderListenerTop() {
@Override
public void onNotify(int what, long parameter, TTVideoInfoTop info) {
if (what == MsgIsComplete) {
//视频上传完成
}
else if(what == MsgIsUpdateProgress){
//视频上传进度,parameter表示最新进度位置
}
else if(what == MsgIsFail) {
//视频上传失败
}
}
@Override
public void onLog(int what, int code, String info) {
//预留上报,可暂时忽略该函数的实现
}
});
note:
当对应事件发生时,可获取该事件下的相应事件信息,如下表所示:
事件信息 | 说明 |
---|---|
MsgIsComplete | 获取上传的视频信息,如 vid、封面截图、meta、加密相关等信息,信息封装在 TTVideoInfoTop 中 |
MsgIsUpdateProgress | onNotify 函数参数 parameter 表示进度 |
MsgIsFail | 获取上传失败时的错误码,封装在 TTVideoInfoTop 中 |
TTVideoInfoTop 结构
成员变量 | 含义 | 说明 |
---|---|---|
mVideoId | 视频的 videoid | string |
mCoverUri | 截图的 uri | string |
mProgress | 上传进度 | 取值范围 0~100 |
mErrcode | 上传错误码 | 上传错误的时候,这个会有错误码的值 |
mTosKey | 上传的视频的 uri | string |
mSourceInfo | 上传的视频的视频信息 | string |
mEncryptionInfo | 上传的视频的加密信息 | string |
mCallbackArgs | 希望透传的参数 | string |
// 在创建上传对象之前,建议在调用上传之前配置 Debug 日志开关 TTVideoUploaderTop.setEnableDebug(1);
在快速开始
章节的第四个步骤TTVideoUploaderTop设置上传数据源及其他配置
中增加相应的配置选项,即可接入该功能。
说明
视频上传在不设置 ProcessActionSnapshot 以及截图时间的情况下,默认会截取非黑帧的第一帧为封面。
config.mProcessAction = config.ProcessActionSnapshot; //截图
config.snapshotTime = 1.0f; //设置截图的时间点