SDK 名称 | 云点播 Android 上传 SDK |
版本号 | V1.2.4.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.45'
说明:
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,可按照业务需要动态注册广播,示例如下:
@Overrideprotected 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);}}@Overrideprotected void onDestroy() {super.onDestroy();// your code......unRegisterNetReceiver();}
简单视频上传
初始化上传对象
TXUGCPublish mVideoPublish = new TXUGCPublish(this.getApplicationContext(), "independence_android")
设置上传对象回调
mVideoPublish.setListener(new TXUGCPublishTypeDef.ITXVideoPublishListener() {@Overridepublic void onPublishProgress(long uploadBytes, long totalBytes) {mProgress.setProgress((int) (100*uploadBytes/totalBytes));}@Overridepublic 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";
调用上传
int publishCode = mVideoPublish.publishVideo(param);
简单图片上传
初始化上传对象
TXUGCPublish mVideoPublish = new TXUGCPublish(this.getApplicationContext(), "independence_android")
设置上传对象回调
mVideoPublish.setListener(new TXUGCPublishTypeDef.ITXMediaPublishListener() {@Overridepublic void onMediaPublishProgress(long uploadBytes, long totalBytes) {mProgress.setProgress((int) (100*uploadBytes/totalBytes));}@Overridepublic 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";
调用上传
int publishCode = mVideoPublish.publishMedia(param);
高级功能
携带封面
在上传参数中带上封面路径即可。
TXUGCPublishTypeDef.TXPublishParam param = new TXUGCPublishTypeDef.TXPublishParam();param.signature = "xxx";param.videoPath = "xxx";param.coverPath = "xxx";
取消和恢复上传
取消上传,调用
TXUGCPublish
的cancleublish()
接口。mVideoPublish.canclePublish();
恢复上传,用相同的上传参数(视频路径和封面路径不变),再调用一次
TXUGCPublish
的publishVideo
。断点续传
在视频上传过程中,云点播支持断点续传,即当上传意外终止时,用户再次上传该文件,可以从中断处继续上传,减少重复上传时间。断点续传的有效时间是1天,即同一个视频上传被中断,那么1天内再次上传可以直接从断点处上传,超过1天默认会重新上传完整视频。
上传参数中的
enableResume
为断点续传开关,默认是开启的。预上传
在实际上传过程中,很大部分的错误是由于网络连接失败或超时导致的,为优化此类问题,我们增加了预上传优化逻辑。预上传包含:HTTPDNS 解析、获取建议上传地域、探测最优上传地域。
建议您在 App 启动的时候调用
TXUGCPublishOptCenter.getInstance().prepareUpload(signature)
,预上传模块会把<域名,IP>
映射表和最优上传地域缓存在本地,如果此前动态注册了网络广播,订阅到网络切换时,清空缓存并自动刷新。开启 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 | 签名过期。 |