此文档仅适用于 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; //设置截图的时间点