You need to enable JavaScript to run this app.
导航

Android 视频上传 SDK(历史版本)

最近更新时间2023.10.27 16:27:03

首次发布时间2021.02.23 10:42:36

适用版本

此文档仅适用于 1.32.2.2 之前的版本。如果您使用的是 1.32.2.2 或之后的版本,请查看视频上传

集成准备

环境要求

类别说明
开发环境Android Studio (推荐使用最新版本)
系统版本minSdkVersion: 14
ABI 兼容性架构要求:armv7 或 arm64

添加 maven 仓库

确保 project 根目录下的 build.gradle 文件中的 repositories 中配置了 mavenCentral() 和 火山引擎maven服务。

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "https://artifact.bytedance.com/repository/Volcengine/" // volc public maven repo
        }
    }
}

添加 SDK 依赖

在 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 获取

  • 最新 ttsdk_version 获取:详见 ChangeLog

快速开始

本模块介绍如何使用上传 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 个步骤:

  • 初始化上传 SDK 环境
  • 创建视频上传对象 TTVideoUploaderTop
  • 获取鉴权 authParam
  • TTVideoUploaderTop 实例设置上传数据源及其他配置
  1. 初始化上传 SDK 环境

初始化操作很轻量,建议放到 Application#onCreate 中执行,保障初始化顺序

需要的参数列举如下:

参数类型说明
appidintApp id
appnameStringApp 英文名
appchannelString渠道
regionStringappid填写的地区或者国家
appversionString
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);   //初始化上传配置,建议早配置
  1. 创建视频上传对象 TTVideoUploaderTop
import com.ss.ttuploader.TTVideoUploaderTop;

TTVideoUploaderTop uploaderTop;
try {
    uploaderTop = new TTVideoUploaderTop();
} catch (Exception e) {
    e.printStackTrace();
    return null;
}

注意

需要关注下 TTVideoUploaderTop 实例的生命周期,如设置为局部变量时,会导致 TTVideoUploaderTop 实例析构销毁时,无法继续进行视频上传操作。

  1. 获取鉴权 authParam

此处获取的鉴权参数 authParam,用于第四步进行上传的鉴权配置。

//ex:JSONObject responseJson 如下:
{
    "result":{
        "AccessKeyID":"XXXXXX",
        "SecretAccessKey":"XXXXXX",
        "SessionToken":"XXXXXX",
        "ExpiredTime":"XXXXXX",
        "CurrentTime":"XXXXXX"
    }
}

String authParam = responseJson.getString("result");
  1. TTVideoUploaderTop 实例设置上传数据源及其他配置
参数类型说明
mSecretAccessKeyString服务端鉴权参数:临时 sk
mAccessKeyIdString服务端鉴权参数:临时 ak
mSessionTokenString服务端鉴权参数:token
mExpiredTimeString服务端鉴权参数:过期时间
mFilePathNameString文件路径
mRegionString地区
mSpaceString空间
mVideoHostNameString上传域名
mFileTypeString上传的文件类型
mServerParameterString额外的要带上的上传参数

说明

空间相关说明请参考空间管理

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();//暂停上传
  • 释放 TTVideoUploaderTop 实例
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 中
TTVideoInfoTop 结构如下表所示

MsgIsUpdateProgress
(视频上传进度)

onNotify 函数参数 parameter 表示进度
TTVideoInfoTop 结构中的 mProgress 同样表示进度

MsgIsFail
(视频上传失败)

获取上传失败时的错误码,封装在 TTVideoInfoTop 中
TTVideoInfoTop 结构如下表所示

TTVideoInfoTop 结构

成员变量含义说明
mVideoId视频的 videoidstring
mCoverUri截图的 uristring
mProgress上传进度取值范围 0~100
mErrcode上传错误码上传错误的时候,这个会有错误码的值
mTosKey上传的视频的 uristring
mSourceInfo上传的视频的视频信息string
mEncryptionInfo上传的视频的加密信息string
mCallbackArgs希望透传的参数string
  • Debug 日志获取:当您遇到上传的问题时,可以打开 Debug 日志开关,获取详细日志信息,推进问题快速处理。
// 在创建上传对象之前,建议在调用上传之前配置 Debug 日志开关 TTVideoUploaderTop.setEnableDebug(1);

高级功能接入

视频抽帧作为封面

  • 进行视频上传时,可设置视频截图的时间点,将该时间点的视频截图作为上传视频的封面。

快速开始章节的第四个步骤TTVideoUploaderTop设置上传数据源及其他配置中增加相应的配置选项,即可接入该功能。

说明

视频上传在不设置 ProcessActionSnapshot 以及截图时间的情况下,默认会截取非黑帧的第一帧为封面。

config.mProcessAction = config.ProcessActionSnapshot;   //截图
config.snapshotTime = 1.0f;    //设置截图的时间点

增值服务接入

素材上传

Android素材上传SDK