有奖:语音产品征文挑战赛火热进行中> HOT
对于在 Android 平台上传视频的场景,云点播提供了 Android 上传 SDK。上传流程请参见 客户端上传指引
SDK 名称
云点播 Android 上传 SDK
版本号
V1.1.23.0
SDK 介绍
为 App 的最终用户提供本地视频上传到云点播平台的场景
开发者
腾讯云计算(北京)有限责任公司
合规使用说明
个人信息处理规则
下载 SDK
1. 单击下载 Android 上传 Demo 及源码,将下载好的压缩包解压,可以看到 Demo 目录。
2. 上传源码在 Demo/app/src/main/java/com/tencent/ugcupload/demo/videoupload 目录下。

集成上传库和源码

1. 拷贝上传源码目录Demo/app/src/main/java/com/tencent/ugcupload/demo/videoupload到您的工程目录中,需要手动修改一下 package 名。
2. 参考Demo/app/build.gradle在您的工程中添加依赖:
implementation 'com.qcloud.cos:cos-android-nobeacon:5.9.25'
implementation 'com.qcloud.cos:quic:1.5.43'
说明:
您也可以参考 手动集成 文档集成对应版本的依赖库。
3. 使用视频上传需要网络、存储等相关访问权限,可在AndroidManifest.xml中增加如下权限声明:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
4. 视频上传需要根据网络变化来刷新上传 IP,可按照业务需要动态注册广播,示例如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// your code......
registerNetReceiver();
}

private void registerNetReceiver() {
if (null == mNetWorkStateReceiver) {
mNetWorkStateReceiver = new TVCNetWorkStateReceiver();
IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(mNetWorkStateReceiver, intentFilter);
}
}

private void unRegisterNetReceiver() {
if (null != mNetWorkStateReceiver) {
unregisterReceiver(mNetWorkStateReceiver);
}
}

@Override
protected void onDestroy() {
super.onDestroy();
// your code......
unRegisterNetReceiver();
}

简单视频上传

初始化上传对象

TXUGCPublish mVideoPublish = new TXUGCPublish(this.getApplicationContext(), "independence_android")

设置上传对象回调

mVideoPublish.setListener(new TXUGCPublishTypeDef.ITXVideoPublishListener() {
@Override
public void onPublishProgress(long uploadBytes, long totalBytes) {
mProgress.setProgress((int) (100*uploadBytes/totalBytes));
}

@Override
public void onPublishComplete(TXUGCPublishTypeDef.TXPublishResult result) {
mResultMsg.setText(result.retCode + " Msg:" + (result.retCode == 0 ? result.videoURL : result.descMsg));
}
});

构造上传参数

TXUGCPublishTypeDef.TXPublishParam param = new TXUGCPublishTypeDef.TXPublishParam();

param.signature = "xxx";
param.videoPath = "xxx";
signature计算规则请参见 客户端上传签名

调用上传

int publishCode = mVideoPublish.publishVideo(param);

简单图片上传

初始化上传对象

TXUGCPublish mVideoPublish = new TXUGCPublish(this.getApplicationContext(), "independence_android")

设置上传对象回调

mVideoPublish.setListener(new TXUGCPublishTypeDef.ITXMediaPublishListener() {
@Override
public void onMediaPublishProgress(long uploadBytes, long totalBytes) {
mProgress.setProgress((int) (100*uploadBytes/totalBytes));
}
@Override
public void onMediaPublishComplete(TXUGCPublishTypeDef.TXMediaPublishResult mediaResult) {
mResultMsg.setText(result.retCode + " Msg:" + (result.retCode == 0 ? result.videoURL : result.descMsg));
}
});

构造上传参数

TXUGCPublishTypeDef.TXMediaPublishParam param = new TXUGCPublishTypeDef.TXMediaPublishParam();

param.signature = "xxx";
param.mediaPath = "xxx";
signature计算规则请参见 客户端上传签名

调用上传

int publishCode = mVideoPublish.publishMedia(param);
说明:
上传方法根据用户文件的长度,自动选择普通上传以及分片上传,用户不用关心分片上传的每个步骤,即可实现分片上传。
如需上传至指定应用下,请参见 应用体系 - 客户端上传

高级功能

携带封面

在上传参数中带上封面路径即可。
TXUGCPublishTypeDef.TXPublishParam param = new TXUGCPublishTypeDef.TXPublishParam();
param.signature = "xxx";
param.videoPath = "xxx";
param.coverPath = "xxx";
signature计算规则请参见 客户端上传签名

取消和恢复上传

取消上传,调用TXUGCPublishcancleublish()接口。
mVideoPublish.canclePublish();
恢复上传,用相同的上传参数(视频路径和封面路径不变),再调用一次TXUGCPublishpublishVideo

断点续传

在视频上传过程中,云点播支持断点续传,即当上传意外终止时,用户再次上传该文件,可以从中断处继续上传,减少重复上传时间。断点续传的有效时间是1天,即同一个视频上传被中断,那么1天内再次上传可以直接从断点处上传,超过1天默认会重新上传完整视频。
上传参数中的enableResume为断点续传开关,默认是开启的。

预上传

在实际上传过程中,很大部分的错误是由于网络连接失败或超时导致的,为优化此类问题,我们增加了预上传优化逻辑。预上传包含:HTTPDNS 解析、获取建议上传地域、探测最优上传地域。
建议您在 App 启动的时候调用TXUGCPublishOptCenter.getInstance().prepareUpload(signature),预上传模块会把<域名,IP>映射表和最优上传地域缓存在本地,如果此前动态注册了网络广播,订阅到网络切换时,清空缓存并自动刷新。
signature计算规则请参见 客户端上传签名

开启 https 上传

将上传参数中 TXPublishParam 中的 enableHTTPS 置为 true 即可,默认 false。
TXUGCPublishTypeDef.TXPublishParam param = new TXUGCPublishTypeDef.TXPublishParam();
param.enableHttps = true;

关闭日志

关闭日志需要通过 TXUGCPublish 的setIsDebug方法进行操作,默认开启。开启的情况下,会打印 logcat 日志,同时也会将 log 保存到 app 私有目录下。
// false 关闭日志
mTXUGCPublish.setIsDebug(false);

视频上传接口描述

初始化上传对象:TXUGCPublish
参数名称
参数描述
类型
必填
context
application 上下文。
Context
customKey
用于区分不同的用户,建议使用 App 的账号 ID,方便后续定位问题。
String
设置点播 appId:TXUGCPublish.setAppId
参数名称
参数描述
类型
必填
appId
点播 appId。
int
上传视频:TXUGCPublish.publishVideo
参数名称
参数描述
类型
必填
param
上传参数。
TXUGCPublishTypeDef.TXPublishParam
上传参数:TXUGCPublishTypeDef.TXPublishParam
参数名称
参数描述
类型
必填
signature
String
videoPath
本地视频文件路径。
String
coverPath
本地封面文件路径,默认不带封面文件。
String
enableResume
是否启动断点续传,默认开启。
boolean
enableHttps
是否启动 HTTPS,默认关闭。
boolean
fileName
上传到腾讯云的视频文件名称,不填默认用本地文件名。
String
enablePreparePublish
是否开启预上传机制,默认开启。预上传机制可以大幅提升文件的上传质量
boolean
sliceSize
分片大小,支持最小为1M,最大10M,默认为上传文件大小除以10
long
concurrentCount
分片上传最大并发数量,默认为4个
int
trafficLimit
限速值设置范围为819200 ~ 838860800,即100KB/s ~ 100MB/s,如果超出该范围会返回400错误。不建议将该值设置太小,防止超时。-1 表示不限速
long
uploadResumeController
续点控制器,可自行实现续点键值的计算和保存,默认使用 md5 计算文件键值
IUploadResumeController
设置上传回调:TXUGCPublish.setListener
参数名称
参数描述
类型
必填
listener
上传进度和结果回调订阅。
TXUGCPublishTypeDef.ITXVideoPublishListener
进度回调:TXUGCPublishTypeDef.ITXVideoPublishListener.onPublishProgress
变量名称
变量描述
类型
uploadBytes
已上传的字节数。
long
totalBytes
总字节数。
long
结果回调:TXUGCPublishTypeDef.ITXVideoPublishListener.onPublishComplete
变量名称
变量描述
类型
result
上传结果。
TXUGCPublishTypeDef.TXPublishResult
上传结果:TXUGCPublishTypeDef.TXPublishResult
成员变量名称
变量说明
类型
retCode
结果码。
int
descMsg
上传失败的错误描述。
String
videoId
点播视频文件 ID。
String
videoURL
视频存储地址。
String
coverURL
封面存储地址。
String
预上传:TXUGCPublishOptCenter.prepareUpload
参数名称
参数描述
类型
必填
signature
String

图片上传接口描述

初始化上传对象:TXUGCPublish
参数名称
参数描述
类型
必填
context
application 上下文。
Context
customKey
用于区分不同的用户,建议使用 App 的账号 ID,方便后续定位问题。
String
设置点播 appId:TXUGCPublish.setAppId
参数名称
参数描述
类型
必填
appId
点播 appId。
int
上传图片:TXUGCPublish.publishMedia
参数名称
参数描述
类型
必填
param
上传参数。
TXUGCPublishTypeDef.TXMediaPublishParam
上传参数:TXUGCPublishTypeDef.TXMediaPublishParam
参数名称
参数描述
类型
必填
signature
String
mediaPath
本地图片文件路径。
String
enableResume
是否启动断点续传,默认开启。
boolean
enableHttps
是否启动 HTTPS,默认关闭。
boolean
fileName
上传到腾讯云的视频文件名称,不填默认用本地文件名。
String
enablePreparePublish
是否开启预上传机制,默认开启。预上传机制可以大幅提升文件的上传质量
boolean
sliceSize
分片大小,支持最小为1M,最大10M,默认为上传文件大小除以10
long
concurrentCount
分片上传最大并发数量,默认为4个
int
trafficLimit
限速值设置范围为819200 ~ 838860800,即100KB/s ~ 100MB/s,如果超出该范围会返回400错误。不建议将该值设置太小,防止超时。-1 表示不限速
long
uploadResumeController
续点控制器,可自行实现续点键值的计算和保存,默认使用md5计算文件键值
IUploadResumeController
设置上传回调:TXUGCPublish.setListener
参数名称
参数描述
类型
必填
listener
上传进度和结果回调订阅。
TXUGCPublishTypeDef.ITXMediaPublishListener
进度回调:TXUGCPublishTypeDef.ITXMediaPublishListener.onPublishProgress
变量名称
变量描述
类型
uploadBytes
已上传的字节数。
long
totalBytes
总字节数。
long
结果回调:TXUGCPublishTypeDef.ITXMediaPublishListener.onPublishComplete
变量名称
变量描述
类型
result
上传结果。
TXUGCPublishTypeDef.TXPublishResult
上传结果:TXUGCPublishTypeDef.TXMediaPublishResult
成员变量名称
变量说明
类型
retCode
结果码。
int
descMsg
上传失败的错误描述。
String
mediaId
点播媒体文件 ID。
String
mediaURL
媒体资源存储地址。
String
预上传:TXUGCPublishOptCenter.prepareUpload
参数名称
参数描述
类型
必填
signature
String

错误码

SDK 通过TXUGCPublishTypeDef.ITXVideoPublishListener\\ITXMediaPublishListener接口来订阅视频上传相关的状态。因此,可以用TXUGCPublishTypeDef.TXPublishResult\\TXMediaPublishResult中的retCode来确认视频上传的情况。
状态码
在 TVCConstants 中所对应的常量
含义
0
NO_ERROR
上传成功。
1001
ERR_UGC_REQUEST_FAILED
请求上传失败,通常是客户端签名过期或者非法,需要 App 重新申请签名。
1002
ERR_UGC_PARSE_FAILED
请求信息解析失败。
1003
ERR_UPLOAD_VIDEO_FAILED
上传视频失败。
1004
ERR_UPLOAD_COVER_FAILED
上传封面失败。
1005
ERR_UGC_FINISH_REQUEST_FAILED
结束上传请求失败。
1006
ERR_UGC_FINISH_RESPONSE_FAILED
结束上传响应错误。
1007
ERR_CLIENT_BUSY
客户端正忙(对象无法处理更多请求)。
1008
ERR_FILE_NOEXIT
上传文件不存在。
1009
ERR_UGC_PUBLISHING
视频正在上传中。
1010
ERR_UGC_INVALID_PARAM
上传参数为空。
1012
ERR_UGC_INVALID_SIGNATURE
视频上传 signature 为空。
1013
ERR_UGC_INVALID_VIDOPATH
视频文件的路径为空。
1014
ERR_UGC_INVALID_VIDEO_FILE
当前路径下视频文件不存在。
1015
ERR_UGC_FILE_NAME
视频上传文件名太长(超过40)或含有特殊字符。
1016
ERR_UGC_INVALID_COVER_PATH
视频文件封面路径不对,文件不存在。
1017
ERR_USER_CANCEL
用户取消上传。
1020
ERR_UPLOAD_SIGN_EXPIRED
签名过期。